Built with Alectryon, running Coq+SerAPI v8.15.0+0.15.0. Bubbles () indicate interactive fragments: hover for details, tap to reveal contents. Use Ctrl+↑ Ctrl+↓ to navigate, Ctrl+🖱️ to focus. On Mac, use instead of Ctrl.
From Coq Require Import ssreflect ssrfun ssrbool.

From Ltac2 Require Import Ltac2.

From Coq Require Import Ensembles Bool String.

From Coq.Logic Require Import FunctionalExtensionality Eqdep_dec.
From Equations Require Import Equations.

Require Import Coq.Program.Tactics.

From MatchingLogic Require Import Syntax DerivedOperators_Syntax ProofSystem IndexManipulation wftactics.

New coercion path [Is_true] : bool >-> Sortclass is ambiguous with existing [is_true] : bool >-> Sortclass. [ambiguous-paths,typechecker]
From MatchingLogic.Utils Require Import stdpp_ext. Import extralibrary. From MatchingLogic Require Import Logic ProofInfo ProofMode_base ProofMode_propositional ProofMode_firstorder ProofMode_fixpoint ProofMode_reshaper . Import MatchingLogic.Logic.Notations. Set Default Proof Mode "Classic". Open Scope ml_scope. Open Scope string_scope. Open Scope list_scope. Ltac2 _callCompletedTransformedAndCast (t : constr) (transform : constr) (tac : constr -> unit) := let tac' := (fun (t' : constr) => let tac'' := (fun (t'' : constr) => let tcast := open_constr:(@useGenericReasoning'' _ _ _ _ _ $t'') in fillWithUnderscoresAndCall tac tcast [] ) in fillWithUnderscoresAndCall (fun t''' => tac'' t''') transform [t'] ) in fillWithUnderscoresAndCall tac' t [] . Ltac2 mlApplyMetaGeneralized (t : constr) := _callCompletedTransformedAndCast t constr:(@reshape_lhs_imp_to_and_forward) _mlApplyMetaRaw ; try_solve_pile_basic (); try_wfa () . Ltac _mlApplyMetaGeneralized t := _ensureProofMode; let ff := ltac2:(t' |- mlApplyMetaGeneralized (Option.get (Ltac1.to_constr(t')))) in ff t; rewrite [foldr patt_and _ _]/= . Tactic Notation "mlApplyMetaGeneralized" constr(t) := _mlApplyMetaGeneralized t .
Σ: Signature
Γ: Theory
a, b, c, d, e, f: Pattern

well_formed a → well_formed b → well_formed c → well_formed d → well_formed e → well_formed f → Γ ⊢ a ---> b ---> c ---> d ---> e ---> f → Γ ⊢ a and b and c and d and e ---> f
Σ: Signature
Γ: Theory
a, b, c, d, e, f: Pattern

well_formed a → well_formed b → well_formed c → well_formed d → well_formed e → well_formed f → Γ ⊢ a ---> b ---> c ---> d ---> e ---> f → Γ ⊢ a and b and c and d and e ---> f
Σ: Signature
Γ: Theory
a, b, c, d, e, f: Pattern
wfa: well_formed a
wfb: well_formed b
wfc: well_formed c
wfd: well_formed d
wfe: well_formed e
wff: well_formed f
H: Γ ⊢ a ---> b ---> c ---> d ---> e ---> f

Γ ⊢ a and b and c and d and e ---> f
Σ: Signature
Γ: Theory
a, b, c, d, e, f: Pattern
wfa: well_formed a
wfb: well_formed b
wfc: well_formed c
wfd: well_formed d
wfe: well_formed e
wff: well_formed f
H: Γ ⊢ a ---> b ---> c ---> d ---> e ---> f

well_formed (a and b and c and d and e ---> f)
Σ: Signature
Γ: Theory
a, b, c, d, e, f: Pattern
wfa: well_formed a
wfb: well_formed b
wfc: well_formed c
wfd: well_formed d
wfe: well_formed e
wff: well_formed f
H: Γ ⊢ a ---> b ---> c ---> d ---> e ---> f
Γ Ⱶ a and b and c and d and e ---> f
Σ: Signature
Γ: Theory
a, b, c, d, e, f: Pattern
wfa: well_formed a
wfb: well_formed b
wfc: well_formed c
wfd: well_formed d
wfe: well_formed e
wff: well_formed f
H: Γ ⊢ a ---> b ---> c ---> d ---> e ---> f

well_formed (a and b and c and d and e ---> f)
wf_auto2.
Σ: Signature
Γ: Theory
a, b, c, d, e, f: Pattern
wfa: well_formed a
wfb: well_formed b
wfc: well_formed c
wfd: well_formed d
wfe: well_formed e
wff: well_formed f
H: Γ ⊢ a ---> b ---> c ---> d ---> e ---> f

Γ Ⱶ a and b and c and d and e ---> f
Σ: Signature
Γ: Theory
a, b, c, d, e, f: Pattern
wfa: well_formed a
wfb: well_formed b
wfc: well_formed c
wfd: well_formed d
wfe: well_formed e
wff: well_formed f
H: Γ ⊢ a ---> b ---> c ---> d ---> e ---> f

Γ Ⱶ "H1" ∶ a and b and c and d and e, -------------------------------------- f
Σ: Signature
Γ: Theory
a, b, c, d, e, f: Pattern
wfa: well_formed a
wfb: well_formed b
wfc: well_formed c
wfd: well_formed d
wfe: well_formed e
wff: well_formed f
H: Γ ⊢ a ---> b ---> c ---> d ---> e ---> f

Γ Ⱶ "H1" ∶ a and b and c and d and e, -------------------------------------- a and b and c and d and e
mlExact "H1". Defined. Section FOL_helpers. Context {Σ : Signature}.
Σ: Signature
Γ: Theory
ϕ₁, ϕ₂, ψ: Pattern
i: ProofInfo
wfψ: well_formed ψ
pile: ProofInfoLe (ExGen := ∅, SVSubst := ∅, KT := false, FP := {[ψ ↾ wfψ]}) i

Γ ⊢i ϕ₁ ---> ϕ₂ using i → Γ ⊢i ϕ₁ $ ψ ---> ϕ₂ $ ψ using i
Σ: Signature
Γ: Theory
ϕ₁, ϕ₂, ψ: Pattern
i: ProofInfo
wfψ: well_formed ψ
pile: ProofInfoLe (ExGen := ∅, SVSubst := ∅, KT := false, FP := {[ψ ↾ wfψ]}) i

Γ ⊢i ϕ₁ ---> ϕ₂ using i → Γ ⊢i ϕ₁ $ ψ ---> ϕ₂ $ ψ using i
Σ: Signature
Γ: Theory
ϕ₁, ϕ₂, ψ: Pattern
i: ProofInfo
wfψ: well_formed ψ
pile: ProofInfoLe (ExGen := ∅, SVSubst := ∅, KT := false, FP := {[ψ ↾ wfψ]}) i
pf: ML_proof_system Γ (ϕ₁ ---> ϕ₂)
Hpf: ProofInfoMeaning Γ (ϕ₁ ---> ϕ₂) pf i

Γ ⊢i ϕ₁ $ ψ ---> ϕ₂ $ ψ using i
Σ: Signature
Γ: Theory
ϕ₁, ϕ₂, ψ: Pattern
i: ProofInfo
wfψ: well_formed ψ
pile: ProofInfoLe (ExGen := ∅, SVSubst := ∅, KT := false, FP := {[ψ ↾ wfψ]}) i
pf: ML_proof_system Γ (ϕ₁ ---> ϕ₂)
Hpf: ProofInfoMeaning Γ (ϕ₁ ---> ϕ₂) pf i

ML_proof_system Γ (ϕ₁ $ ψ ---> ϕ₂ $ ψ)
Σ: Signature
Γ: Theory
ϕ₁, ϕ₂, ψ: Pattern
i: ProofInfo
wfψ: well_formed ψ
pile: ProofInfoLe (ExGen := ∅, SVSubst := ∅, KT := false, FP := {[ψ ↾ wfψ]}) i
pf: ML_proof_system Γ (ϕ₁ ---> ϕ₂)
Hpf: ProofInfoMeaning Γ (ϕ₁ ---> ϕ₂) pf i
ProofInfoMeaning Γ (ϕ₁ $ ψ ---> ϕ₂ $ ψ) ?pf i
Σ: Signature
Γ: Theory
ϕ₁, ϕ₂, ψ: Pattern
i: ProofInfo
wfψ: well_formed ψ
pile: ProofInfoLe (ExGen := ∅, SVSubst := ∅, KT := false, FP := {[ψ ↾ wfψ]}) i
pf: ML_proof_system Γ (ϕ₁ ---> ϕ₂)
Hpf: ProofInfoMeaning Γ (ϕ₁ ---> ϕ₂) pf i

ML_proof_system Γ (ϕ₁ $ ψ ---> ϕ₂ $ ψ)
Σ: Signature
Γ: Theory
ϕ₁, ϕ₂, ψ: Pattern
i: ProofInfo
wfψ: well_formed ψ
pile: ProofInfoLe (ExGen := ∅, SVSubst := ∅, KT := false, FP := {[ψ ↾ wfψ]}) i
pf: ML_proof_system Γ (ϕ₁ ---> ϕ₂)
Hpf: ProofInfoMeaning Γ (ϕ₁ ---> ϕ₂) pf i

well_formed ψ
Σ: Signature
Γ: Theory
ϕ₁, ϕ₂, ψ: Pattern
i: ProofInfo
wfψ: well_formed ψ
pile: ProofInfoLe (ExGen := ∅, SVSubst := ∅, KT := false, FP := {[ψ ↾ wfψ]}) i
pf: ML_proof_system Γ (ϕ₁ ---> ϕ₂)
Hpf: ProofInfoMeaning Γ (ϕ₁ ---> ϕ₂) pf i
ML_proof_system Γ (ϕ₁ ---> ϕ₂)
Σ: Signature
Γ: Theory
ϕ₁, ϕ₂, ψ: Pattern
i: ProofInfo
wfψ: well_formed ψ
pile: ProofInfoLe (ExGen := ∅, SVSubst := ∅, KT := false, FP := {[ψ ↾ wfψ]}) i
pf: ML_proof_system Γ (ϕ₁ ---> ϕ₂)
Hpf: ProofInfoMeaning Γ (ϕ₁ ---> ϕ₂) pf i

well_formed ψ
exact wfψ.
Σ: Signature
Γ: Theory
ϕ₁, ϕ₂, ψ: Pattern
i: ProofInfo
wfψ: well_formed ψ
pile: ProofInfoLe (ExGen := ∅, SVSubst := ∅, KT := false, FP := {[ψ ↾ wfψ]}) i
pf: ML_proof_system Γ (ϕ₁ ---> ϕ₂)
Hpf: ProofInfoMeaning Γ (ϕ₁ ---> ϕ₂) pf i

ML_proof_system Γ (ϕ₁ ---> ϕ₂)
exact pf.
Σ: Signature
Γ: Theory
ϕ₁, ϕ₂, ψ: Pattern
i: ProofInfo
wfψ: well_formed ψ
pile: ProofInfoLe (ExGen := ∅, SVSubst := ∅, KT := false, FP := {[ψ ↾ wfψ]}) i
pf: ML_proof_system Γ (ϕ₁ ---> ϕ₂)
Hpf: ProofInfoMeaning Γ (ϕ₁ ---> ϕ₂) pf i

ProofInfoMeaning Γ (ϕ₁ $ ψ ---> ϕ₂ $ ψ) (Framing_left Γ ϕ₁ ϕ₂ ψ wfψ pf) i
Σ: Signature
Γ: Theory
ϕ₁, ϕ₂, ψ: Pattern
i: ProofInfo
wfψ: well_formed ψ
pile: ProofInfoLe (ExGen := ∅, SVSubst := ∅, KT := false, FP := {[ψ ↾ wfψ]}) i
pf: ML_proof_system Γ (ϕ₁ ---> ϕ₂)
Hpf: ProofInfoMeaning Γ (ϕ₁ ---> ϕ₂) pf i

ProofInfoMeaning Γ (ϕ₁ $ ψ ---> ϕ₂ $ ψ) (Framing_left Γ ϕ₁ ϕ₂ ψ wfψ pf) i
Σ: Signature
Γ: Theory
ϕ₁, ϕ₂, ψ: Pattern
i: ProofInfo
wfψ: well_formed ψ
pile: ProofInfoLe (ExGen := ∅, SVSubst := ∅, KT := false, FP := {[ψ ↾ wfψ]}) i
pf: ML_proof_system Γ (ϕ₁ ---> ϕ₂)
Hpf1: gset_to_coGset (uses_of_ex_gen Γ (ϕ₁ ---> ϕ₂) pf) ⊆ pi_generalized_evars i
Hpf2: gset_to_coGset (uses_of_svar_subst Γ (ϕ₁ ---> ϕ₂) pf) ⊆ pi_substituted_svars i
Hpf3: uses_kt pf ==> pi_uses_kt i
Hpf4: gset_to_coGset (framing_patterns Γ (ϕ₁ ---> ϕ₂) pf) ⊆ pi_framing_patterns i

ProofInfoMeaning Γ (ϕ₁ $ ψ ---> ϕ₂ $ ψ) (Framing_left Γ ϕ₁ ϕ₂ ψ wfψ pf) i
Σ: Signature
Γ: Theory
ϕ₁, ϕ₂, ψ: Pattern
i: ProofInfo
wfψ: well_formed ψ
pile: ProofInfoLe (ExGen := ∅, SVSubst := ∅, KT := false, FP := {[ψ ↾ wfψ]}) i
pf: ML_proof_system Γ (ϕ₁ ---> ϕ₂)
Hpf1: gset_to_coGset (uses_of_ex_gen Γ (ϕ₁ ---> ϕ₂) pf) ⊆ pi_generalized_evars i
Hpf2: gset_to_coGset (uses_of_svar_subst Γ (ϕ₁ ---> ϕ₂) pf) ⊆ pi_substituted_svars i
Hpf3: uses_kt pf ==> pi_uses_kt i
Hpf4: gset_to_coGset (framing_patterns Γ (ϕ₁ ---> ϕ₂) pf) ⊆ pi_framing_patterns i

gset_to_coGset (uses_of_ex_gen Γ (ϕ₁ ---> ϕ₂) pf) ⊆ pi_generalized_evars i
Σ: Signature
Γ: Theory
ϕ₁, ϕ₂, ψ: Pattern
i: ProofInfo
wfψ: well_formed ψ
pile: ProofInfoLe (ExGen := ∅, SVSubst := ∅, KT := false, FP := {[ψ ↾ wfψ]}) i
pf: ML_proof_system Γ (ϕ₁ ---> ϕ₂)
Hpf1: gset_to_coGset (uses_of_ex_gen Γ (ϕ₁ ---> ϕ₂) pf) ⊆ pi_generalized_evars i
Hpf2: gset_to_coGset (uses_of_svar_subst Γ (ϕ₁ ---> ϕ₂) pf) ⊆ pi_substituted_svars i
Hpf3: uses_kt pf ==> pi_uses_kt i
Hpf4: gset_to_coGset (framing_patterns Γ (ϕ₁ ---> ϕ₂) pf) ⊆ pi_framing_patterns i
gset_to_coGset (uses_of_svar_subst Γ (ϕ₁ ---> ϕ₂) pf) ⊆ pi_substituted_svars i
Σ: Signature
Γ: Theory
ϕ₁, ϕ₂, ψ: Pattern
i: ProofInfo
wfψ: well_formed ψ
pile: ProofInfoLe (ExGen := ∅, SVSubst := ∅, KT := false, FP := {[ψ ↾ wfψ]}) i
pf: ML_proof_system Γ (ϕ₁ ---> ϕ₂)
Hpf1: gset_to_coGset (uses_of_ex_gen Γ (ϕ₁ ---> ϕ₂) pf) ⊆ pi_generalized_evars i
Hpf2: gset_to_coGset (uses_of_svar_subst Γ (ϕ₁ ---> ϕ₂) pf) ⊆ pi_substituted_svars i
Hpf3: uses_kt pf ==> pi_uses_kt i
Hpf4: gset_to_coGset (framing_patterns Γ (ϕ₁ ---> ϕ₂) pf) ⊆ pi_framing_patterns i
uses_kt pf ==> pi_uses_kt i
Σ: Signature
Γ: Theory
ϕ₁, ϕ₂, ψ: Pattern
i: ProofInfo
wfψ: well_formed ψ
pile: ProofInfoLe (ExGen := ∅, SVSubst := ∅, KT := false, FP := {[ψ ↾ wfψ]}) i
pf: ML_proof_system Γ (ϕ₁ ---> ϕ₂)
Hpf1: gset_to_coGset (uses_of_ex_gen Γ (ϕ₁ ---> ϕ₂) pf) ⊆ pi_generalized_evars i
Hpf2: gset_to_coGset (uses_of_svar_subst Γ (ϕ₁ ---> ϕ₂) pf) ⊆ pi_substituted_svars i
Hpf3: uses_kt pf ==> pi_uses_kt i
Hpf4: gset_to_coGset (framing_patterns Γ (ϕ₁ ---> ϕ₂) pf) ⊆ pi_framing_patterns i
gset_to_coGset ({[ψ ↾ wfψ]} ∪ framing_patterns Γ (ϕ₁ ---> ϕ₂) pf) ⊆ pi_framing_patterns i
Σ: Signature
Γ: Theory
ϕ₁, ϕ₂, ψ: Pattern
i: ProofInfo
wfψ: well_formed ψ
pile: ProofInfoLe (ExGen := ∅, SVSubst := ∅, KT := false, FP := {[ψ ↾ wfψ]}) i
pf: ML_proof_system Γ (ϕ₁ ---> ϕ₂)
Hpf1: gset_to_coGset (uses_of_ex_gen Γ (ϕ₁ ---> ϕ₂) pf) ⊆ pi_generalized_evars i
Hpf2: gset_to_coGset (uses_of_svar_subst Γ (ϕ₁ ---> ϕ₂) pf) ⊆ pi_substituted_svars i
Hpf3: uses_kt pf ==> pi_uses_kt i
Hpf4: gset_to_coGset (framing_patterns Γ (ϕ₁ ---> ϕ₂) pf) ⊆ pi_framing_patterns i

gset_to_coGset (uses_of_ex_gen Γ (ϕ₁ ---> ϕ₂) pf) ⊆ pi_generalized_evars i
assumption.
Σ: Signature
Γ: Theory
ϕ₁, ϕ₂, ψ: Pattern
i: ProofInfo
wfψ: well_formed ψ
pile: ProofInfoLe (ExGen := ∅, SVSubst := ∅, KT := false, FP := {[ψ ↾ wfψ]}) i
pf: ML_proof_system Γ (ϕ₁ ---> ϕ₂)
Hpf1: gset_to_coGset (uses_of_ex_gen Γ (ϕ₁ ---> ϕ₂) pf) ⊆ pi_generalized_evars i
Hpf2: gset_to_coGset (uses_of_svar_subst Γ (ϕ₁ ---> ϕ₂) pf) ⊆ pi_substituted_svars i
Hpf3: uses_kt pf ==> pi_uses_kt i
Hpf4: gset_to_coGset (framing_patterns Γ (ϕ₁ ---> ϕ₂) pf) ⊆ pi_framing_patterns i

gset_to_coGset (uses_of_svar_subst Γ (ϕ₁ ---> ϕ₂) pf) ⊆ pi_substituted_svars i
Σ: Signature
Γ: Theory
ϕ₁, ϕ₂, ψ: Pattern
i: ProofInfo
wfψ: well_formed ψ
pile: ProofInfoLe (ExGen := ∅, SVSubst := ∅, KT := false, FP := {[ψ ↾ wfψ]}) i
pf: ML_proof_system Γ (ϕ₁ ---> ϕ₂)
Hpf1: gset_to_coGset (uses_of_ex_gen Γ (ϕ₁ ---> ϕ₂) pf) ⊆ pi_generalized_evars i
Hpf2: gset_to_coGset (uses_of_svar_subst Γ (ϕ₁ ---> ϕ₂) pf) ⊆ pi_substituted_svars i
Hpf3: uses_kt pf ==> pi_uses_kt i
Hpf4: gset_to_coGset (framing_patterns Γ (ϕ₁ ---> ϕ₂) pf) ⊆ pi_framing_patterns i
uses_kt pf ==> pi_uses_kt i
Σ: Signature
Γ: Theory
ϕ₁, ϕ₂, ψ: Pattern
i: ProofInfo
wfψ: well_formed ψ
pile: ProofInfoLe (ExGen := ∅, SVSubst := ∅, KT := false, FP := {[ψ ↾ wfψ]}) i
pf: ML_proof_system Γ (ϕ₁ ---> ϕ₂)
Hpf1: gset_to_coGset (uses_of_ex_gen Γ (ϕ₁ ---> ϕ₂) pf) ⊆ pi_generalized_evars i
Hpf2: gset_to_coGset (uses_of_svar_subst Γ (ϕ₁ ---> ϕ₂) pf) ⊆ pi_substituted_svars i
Hpf3: uses_kt pf ==> pi_uses_kt i
Hpf4: gset_to_coGset (framing_patterns Γ (ϕ₁ ---> ϕ₂) pf) ⊆ pi_framing_patterns i
gset_to_coGset ({[ψ ↾ wfψ]} ∪ framing_patterns Γ (ϕ₁ ---> ϕ₂) pf) ⊆ pi_framing_patterns i
Σ: Signature
Γ: Theory
ϕ₁, ϕ₂, ψ: Pattern
i: ProofInfo
wfψ: well_formed ψ
pile: ProofInfoLe (ExGen := ∅, SVSubst := ∅, KT := false, FP := {[ψ ↾ wfψ]}) i
pf: ML_proof_system Γ (ϕ₁ ---> ϕ₂)
Hpf1: gset_to_coGset (uses_of_ex_gen Γ (ϕ₁ ---> ϕ₂) pf) ⊆ pi_generalized_evars i
Hpf2: gset_to_coGset (uses_of_svar_subst Γ (ϕ₁ ---> ϕ₂) pf) ⊆ pi_substituted_svars i
Hpf3: uses_kt pf ==> pi_uses_kt i
Hpf4: gset_to_coGset (framing_patterns Γ (ϕ₁ ---> ϕ₂) pf) ⊆ pi_framing_patterns i

gset_to_coGset (uses_of_svar_subst Γ (ϕ₁ ---> ϕ₂) pf) ⊆ pi_substituted_svars i
assumption.
Σ: Signature
Γ: Theory
ϕ₁, ϕ₂, ψ: Pattern
i: ProofInfo
wfψ: well_formed ψ
pile: ProofInfoLe (ExGen := ∅, SVSubst := ∅, KT := false, FP := {[ψ ↾ wfψ]}) i
pf: ML_proof_system Γ (ϕ₁ ---> ϕ₂)
Hpf1: gset_to_coGset (uses_of_ex_gen Γ (ϕ₁ ---> ϕ₂) pf) ⊆ pi_generalized_evars i
Hpf2: gset_to_coGset (uses_of_svar_subst Γ (ϕ₁ ---> ϕ₂) pf) ⊆ pi_substituted_svars i
Hpf3: uses_kt pf ==> pi_uses_kt i
Hpf4: gset_to_coGset (framing_patterns Γ (ϕ₁ ---> ϕ₂) pf) ⊆ pi_framing_patterns i

uses_kt pf ==> pi_uses_kt i
Σ: Signature
Γ: Theory
ϕ₁, ϕ₂, ψ: Pattern
i: ProofInfo
wfψ: well_formed ψ
pile: ProofInfoLe (ExGen := ∅, SVSubst := ∅, KT := false, FP := {[ψ ↾ wfψ]}) i
pf: ML_proof_system Γ (ϕ₁ ---> ϕ₂)
Hpf1: gset_to_coGset (uses_of_ex_gen Γ (ϕ₁ ---> ϕ₂) pf) ⊆ pi_generalized_evars i
Hpf2: gset_to_coGset (uses_of_svar_subst Γ (ϕ₁ ---> ϕ₂) pf) ⊆ pi_substituted_svars i
Hpf3: uses_kt pf ==> pi_uses_kt i
Hpf4: gset_to_coGset (framing_patterns Γ (ϕ₁ ---> ϕ₂) pf) ⊆ pi_framing_patterns i
gset_to_coGset ({[ψ ↾ wfψ]} ∪ framing_patterns Γ (ϕ₁ ---> ϕ₂) pf) ⊆ pi_framing_patterns i
Σ: Signature
Γ: Theory
ϕ₁, ϕ₂, ψ: Pattern
i: ProofInfo
wfψ: well_formed ψ
pile: ProofInfoLe (ExGen := ∅, SVSubst := ∅, KT := false, FP := {[ψ ↾ wfψ]}) i
pf: ML_proof_system Γ (ϕ₁ ---> ϕ₂)
Hpf1: gset_to_coGset (uses_of_ex_gen Γ (ϕ₁ ---> ϕ₂) pf) ⊆ pi_generalized_evars i
Hpf2: gset_to_coGset (uses_of_svar_subst Γ (ϕ₁ ---> ϕ₂) pf) ⊆ pi_substituted_svars i
Hpf3: uses_kt pf ==> pi_uses_kt i
Hpf4: gset_to_coGset (framing_patterns Γ (ϕ₁ ---> ϕ₂) pf) ⊆ pi_framing_patterns i

uses_kt pf ==> pi_uses_kt i
assumption.
Σ: Signature
Γ: Theory
ϕ₁, ϕ₂, ψ: Pattern
i: ProofInfo
wfψ: well_formed ψ
pile: ProofInfoLe (ExGen := ∅, SVSubst := ∅, KT := false, FP := {[ψ ↾ wfψ]}) i
pf: ML_proof_system Γ (ϕ₁ ---> ϕ₂)
Hpf1: gset_to_coGset (uses_of_ex_gen Γ (ϕ₁ ---> ϕ₂) pf) ⊆ pi_generalized_evars i
Hpf2: gset_to_coGset (uses_of_svar_subst Γ (ϕ₁ ---> ϕ₂) pf) ⊆ pi_substituted_svars i
Hpf3: uses_kt pf ==> pi_uses_kt i
Hpf4: gset_to_coGset (framing_patterns Γ (ϕ₁ ---> ϕ₂) pf) ⊆ pi_framing_patterns i

gset_to_coGset ({[ψ ↾ wfψ]} ∪ framing_patterns Γ (ϕ₁ ---> ϕ₂) pf) ⊆ pi_framing_patterns i
Σ: Signature
Γ: Theory
ϕ₁, ϕ₂, ψ: Pattern
i: ProofInfo
wfψ: well_formed ψ
pile: ProofInfoLe (ExGen := ∅, SVSubst := ∅, KT := false, FP := {[ψ ↾ wfψ]}) i
pf: ML_proof_system Γ (ϕ₁ ---> ϕ₂)
Hpf1: gset_to_coGset (uses_of_ex_gen Γ (ϕ₁ ---> ϕ₂) pf) ⊆ pi_generalized_evars i
Hpf2: gset_to_coGset (uses_of_svar_subst Γ (ϕ₁ ---> ϕ₂) pf) ⊆ pi_substituted_svars i
Hpf3: uses_kt pf ==> pi_uses_kt i
Hpf4: gset_to_coGset (framing_patterns Γ (ϕ₁ ---> ϕ₂) pf) ⊆ pi_framing_patterns i

gset_to_coGset ({[ψ ↾ wfψ]} ∪ framing_patterns Γ (ϕ₁ ---> ϕ₂) pf) ⊆ pi_framing_patterns i
Σ: Signature
Γ: Theory
ϕ₁, ϕ₂, ψ: Pattern
pi_generalized_evars: coEVarSet
pi_substituted_svars: coSVarSet
pi_uses_kt: bool
pi_framing_patterns: coWfpSet
wfψ: well_formed ψ
pile: ProofInfoLe (ExGen := ∅, SVSubst := ∅, KT := false, FP := {[ψ ↾ wfψ]}) (ExGen := pi_generalized_evars, SVSubst := pi_substituted_svars, KT := pi_uses_kt, FP := pi_framing_patterns)
pf: ML_proof_system Γ (ϕ₁ ---> ϕ₂)
Hpf1: gset_to_coGset (uses_of_ex_gen Γ (ϕ₁ ---> ϕ₂) pf) ⊆ ProofSystem.pi_generalized_evars (ExGen := pi_generalized_evars, SVSubst := pi_substituted_svars, KT := pi_uses_kt, FP := pi_framing_patterns)
Hpf2: gset_to_coGset (uses_of_svar_subst Γ (ϕ₁ ---> ϕ₂) pf) ⊆ ProofSystem.pi_substituted_svars (ExGen := pi_generalized_evars, SVSubst := pi_substituted_svars, KT := pi_uses_kt, FP := pi_framing_patterns)
Hpf3: uses_kt pf ==> ProofSystem.pi_uses_kt (ExGen := pi_generalized_evars, SVSubst := pi_substituted_svars, KT := pi_uses_kt, FP := pi_framing_patterns)
Hpf4: gset_to_coGset (framing_patterns Γ (ϕ₁ ---> ϕ₂) pf) ⊆ ProofSystem.pi_framing_patterns (ExGen := pi_generalized_evars, SVSubst := pi_substituted_svars, KT := pi_uses_kt, FP := pi_framing_patterns)

gset_to_coGset ({[ψ ↾ wfψ]} ∪ framing_patterns Γ (ϕ₁ ---> ϕ₂) pf) ⊆ ProofSystem.pi_framing_patterns (ExGen := pi_generalized_evars, SVSubst := pi_substituted_svars, KT := pi_uses_kt, FP := pi_framing_patterns)
Σ: Signature
Γ: Theory
ϕ₁, ϕ₂, ψ: Pattern
pi_generalized_evars: coEVarSet
pi_substituted_svars: coSVarSet
pi_uses_kt: bool
pi_framing_patterns: coWfpSet
wfψ: well_formed ψ
pile: ProofInfoLe (ExGen := ∅, SVSubst := ∅, KT := false, FP := {[ψ ↾ wfψ]}) (ExGen := pi_generalized_evars, SVSubst := pi_substituted_svars, KT := pi_uses_kt, FP := pi_framing_patterns)
pf: ML_proof_system Γ (ϕ₁ ---> ϕ₂)
Hpf1: gset_to_coGset (uses_of_ex_gen Γ (ϕ₁ ---> ϕ₂) pf) ⊆ pi_generalized_evars
Hpf2: gset_to_coGset (uses_of_svar_subst Γ (ϕ₁ ---> ϕ₂) pf) ⊆ pi_substituted_svars
Hpf3: uses_kt pf ==> pi_uses_kt
Hpf4: gset_to_coGset (framing_patterns Γ (ϕ₁ ---> ϕ₂) pf) ⊆ pi_framing_patterns

gset_to_coGset ({[ψ ↾ wfψ]} ∪ framing_patterns Γ (ϕ₁ ---> ϕ₂) pf) ⊆ pi_framing_patterns
Σ: Signature
Γ: Theory
ϕ₁, ϕ₂, ψ: Pattern
pi_generalized_evars: coEVarSet
pi_substituted_svars: coSVarSet
pi_uses_kt: bool
pi_framing_patterns: coWfpSet
wfψ: well_formed ψ
pile: ∅ ⊆ pi_generalized_evars ∧ ∅ ⊆ pi_substituted_svars ∧ false ==> pi_uses_kt ∧ {[ψ ↾ wfψ]} ⊆ pi_framing_patterns
pf: ML_proof_system Γ (ϕ₁ ---> ϕ₂)
Hpf1: gset_to_coGset (uses_of_ex_gen Γ (ϕ₁ ---> ϕ₂) pf) ⊆ pi_generalized_evars
Hpf2: gset_to_coGset (uses_of_svar_subst Γ (ϕ₁ ---> ϕ₂) pf) ⊆ pi_substituted_svars
Hpf3: uses_kt pf ==> pi_uses_kt
Hpf4: gset_to_coGset (framing_patterns Γ (ϕ₁ ---> ϕ₂) pf) ⊆ pi_framing_patterns

gset_to_coGset ({[ψ ↾ wfψ]} ∪ framing_patterns Γ (ϕ₁ ---> ϕ₂) pf) ⊆ pi_framing_patterns
Σ: Signature
Γ: Theory
ϕ₁, ϕ₂, ψ: Pattern
pi_generalized_evars: coEVarSet
pi_substituted_svars: coSVarSet
pi_uses_kt: bool
pi_framing_patterns: coWfpSet
wfψ: well_formed ψ
H: ∅ ⊆ pi_generalized_evars
H1: ∅ ⊆ pi_substituted_svars
H0: false ==> pi_uses_kt
H3: {[ψ ↾ wfψ]} ⊆ pi_framing_patterns
pf: ML_proof_system Γ (ϕ₁ ---> ϕ₂)
Hpf1: gset_to_coGset (uses_of_ex_gen Γ (ϕ₁ ---> ϕ₂) pf) ⊆ pi_generalized_evars
Hpf2: gset_to_coGset (uses_of_svar_subst Γ (ϕ₁ ---> ϕ₂) pf) ⊆ pi_substituted_svars
Hpf3: uses_kt pf ==> pi_uses_kt
Hpf4: gset_to_coGset (framing_patterns Γ (ϕ₁ ---> ϕ₂) pf) ⊆ pi_framing_patterns

gset_to_coGset ({[ψ ↾ wfψ]} ∪ framing_patterns Γ (ϕ₁ ---> ϕ₂) pf) ⊆ pi_framing_patterns
(* destruct pi_framing_patterns0. { exfalso. set_solver. } *)
Σ: Signature
Γ: Theory
ϕ₁, ϕ₂, ψ: Pattern
pi_generalized_evars: coEVarSet
pi_substituted_svars: coSVarSet
pi_uses_kt: bool
pi_framing_patterns: coWfpSet
wfψ: well_formed ψ
H3: {[ψ ↾ wfψ]} ⊆ pi_framing_patterns
pf: ML_proof_system Γ (ϕ₁ ---> ϕ₂)
Hpf1: gset_to_coGset (uses_of_ex_gen Γ (ϕ₁ ---> ϕ₂) pf) ⊆ pi_generalized_evars
Hpf2: gset_to_coGset (uses_of_svar_subst Γ (ϕ₁ ---> ϕ₂) pf) ⊆ pi_substituted_svars
Hpf3: uses_kt pf ==> pi_uses_kt
Hpf4: gset_to_coGset (framing_patterns Γ (ϕ₁ ---> ϕ₂) pf) ⊆ pi_framing_patterns

gset_to_coGset ({[ψ ↾ wfψ]} ∪ framing_patterns Γ (ϕ₁ ---> ϕ₂) pf) ⊆ pi_framing_patterns
Σ: Signature
Γ: Theory
ϕ₁, ϕ₂, ψ: Pattern
pi_generalized_evars: coEVarSet
pi_substituted_svars: coSVarSet
pi_uses_kt: bool
pi_framing_patterns: coWfpSet
wfψ: well_formed ψ
H3: {[ψ ↾ wfψ]} ⊆ pi_framing_patterns
pf: ML_proof_system Γ (ϕ₁ ---> ϕ₂)
Hpf1: gset_to_coGset (uses_of_ex_gen Γ (ϕ₁ ---> ϕ₂) pf) ⊆ pi_generalized_evars
Hpf2: gset_to_coGset (uses_of_svar_subst Γ (ϕ₁ ---> ϕ₂) pf) ⊆ pi_substituted_svars
Hpf3: uses_kt pf ==> pi_uses_kt
Hpf4: gset_to_coGset (framing_patterns Γ (ϕ₁ ---> ϕ₂) pf) ⊆ pi_framing_patterns

x : wfPattern, x ∈ gset_to_coGset ({[ψ ↾ wfψ]} ∪ framing_patterns Γ (ϕ₁ ---> ϕ₂) pf) → x ∈ pi_framing_patterns
Σ: Signature
Γ: Theory
ϕ₁, ϕ₂, ψ: Pattern
pi_generalized_evars: coEVarSet
pi_substituted_svars: coSVarSet
pi_uses_kt: bool
pi_framing_patterns: coWfpSet
wfψ: well_formed ψ
H3: {[ψ ↾ wfψ]} ⊆ pi_framing_patterns
pf: ML_proof_system Γ (ϕ₁ ---> ϕ₂)
Hpf1: gset_to_coGset (uses_of_ex_gen Γ (ϕ₁ ---> ϕ₂) pf) ⊆ pi_generalized_evars
Hpf2: gset_to_coGset (uses_of_svar_subst Γ (ϕ₁ ---> ϕ₂) pf) ⊆ pi_substituted_svars
Hpf3: uses_kt pf ==> pi_uses_kt
Hpf4: gset_to_coGset (framing_patterns Γ (ϕ₁ ---> ϕ₂) pf) ⊆ pi_framing_patterns
p0: wfPattern
Hp0: p0 ∈ gset_to_coGset ({[ψ ↾ wfψ]} ∪ framing_patterns Γ (ϕ₁ ---> ϕ₂) pf)

p0 ∈ pi_framing_patterns
Σ: Signature
Γ: Theory
ϕ₁, ϕ₂, ψ: Pattern
pi_generalized_evars: coEVarSet
pi_substituted_svars: coSVarSet
pi_uses_kt: bool
pi_framing_patterns: coWfpSet
wfψ: well_formed ψ
H3: {[ψ ↾ wfψ]} ⊆ pi_framing_patterns
pf: ML_proof_system Γ (ϕ₁ ---> ϕ₂)
Hpf1: gset_to_coGset (uses_of_ex_gen Γ (ϕ₁ ---> ϕ₂) pf) ⊆ pi_generalized_evars
Hpf2: gset_to_coGset (uses_of_svar_subst Γ (ϕ₁ ---> ϕ₂) pf) ⊆ pi_substituted_svars
Hpf3: uses_kt pf ==> pi_uses_kt
Hpf4: gset_to_coGset (framing_patterns Γ (ϕ₁ ---> ϕ₂) pf) ⊆ pi_framing_patterns
p0: wfPattern
Hp0: p0 ∈ {[ψ ↾ wfψ]} ∪ framing_patterns Γ (ϕ₁ ---> ϕ₂) pf

p0 ∈ pi_framing_patterns
Σ: Signature
Γ: Theory
ϕ₁, ϕ₂, ψ: Pattern
pi_generalized_evars: coEVarSet
pi_substituted_svars: coSVarSet
pi_uses_kt: bool
pi_framing_patterns: coWfpSet
wfψ: well_formed ψ
H3: {[ψ ↾ wfψ]} ⊆ pi_framing_patterns
pf: ML_proof_system Γ (ϕ₁ ---> ϕ₂)
Hpf1: gset_to_coGset (uses_of_ex_gen Γ (ϕ₁ ---> ϕ₂) pf) ⊆ pi_generalized_evars
Hpf2: gset_to_coGset (uses_of_svar_subst Γ (ϕ₁ ---> ϕ₂) pf) ⊆ pi_substituted_svars
Hpf3: uses_kt pf ==> pi_uses_kt
Hpf4: gset_to_coGset (framing_patterns Γ (ϕ₁ ---> ϕ₂) pf) ⊆ pi_framing_patterns
p0: wfPattern
Hp0: p0 ∈ {[ψ ↾ wfψ]} ∨ p0 ∈ framing_patterns Γ (ϕ₁ ---> ϕ₂) pf

p0 ∈ pi_framing_patterns
Σ: Signature
Γ: Theory
ϕ₁, ϕ₂, ψ: Pattern
pi_generalized_evars: coEVarSet
pi_substituted_svars: coSVarSet
pi_uses_kt: bool
pi_framing_patterns: coWfpSet
wfψ: well_formed ψ
H3: {[ψ ↾ wfψ]} ⊆ pi_framing_patterns
pf: ML_proof_system Γ (ϕ₁ ---> ϕ₂)
Hpf1: gset_to_coGset (uses_of_ex_gen Γ (ϕ₁ ---> ϕ₂) pf) ⊆ pi_generalized_evars
Hpf2: gset_to_coGset (uses_of_svar_subst Γ (ϕ₁ ---> ϕ₂) pf) ⊆ pi_substituted_svars
Hpf3: uses_kt pf ==> pi_uses_kt
Hpf4: gset_to_coGset (framing_patterns Γ (ϕ₁ ---> ϕ₂) pf) ⊆ pi_framing_patterns
p0: wfPattern
Hp0: p0 ∈ {[ψ ↾ wfψ]}

p0 ∈ pi_framing_patterns
Σ: Signature
Γ: Theory
ϕ₁, ϕ₂, ψ: Pattern
pi_generalized_evars: coEVarSet
pi_substituted_svars: coSVarSet
pi_uses_kt: bool
pi_framing_patterns: coWfpSet
wfψ: well_formed ψ
H3: {[ψ ↾ wfψ]} ⊆ pi_framing_patterns
pf: ML_proof_system Γ (ϕ₁ ---> ϕ₂)
Hpf1: gset_to_coGset (uses_of_ex_gen Γ (ϕ₁ ---> ϕ₂) pf) ⊆ pi_generalized_evars
Hpf2: gset_to_coGset (uses_of_svar_subst Γ (ϕ₁ ---> ϕ₂) pf) ⊆ pi_substituted_svars
Hpf3: uses_kt pf ==> pi_uses_kt
Hpf4: gset_to_coGset (framing_patterns Γ (ϕ₁ ---> ϕ₂) pf) ⊆ pi_framing_patterns
p0: wfPattern
Hp0: p0 ∈ framing_patterns Γ (ϕ₁ ---> ϕ₂) pf
p0 ∈ pi_framing_patterns
Σ: Signature
Γ: Theory
ϕ₁, ϕ₂, ψ: Pattern
pi_generalized_evars: coEVarSet
pi_substituted_svars: coSVarSet
pi_uses_kt: bool
pi_framing_patterns: coWfpSet
wfψ: well_formed ψ
H3: {[ψ ↾ wfψ]} ⊆ pi_framing_patterns
pf: ML_proof_system Γ (ϕ₁ ---> ϕ₂)
Hpf1: gset_to_coGset (uses_of_ex_gen Γ (ϕ₁ ---> ϕ₂) pf) ⊆ pi_generalized_evars
Hpf2: gset_to_coGset (uses_of_svar_subst Γ (ϕ₁ ---> ϕ₂) pf) ⊆ pi_substituted_svars
Hpf3: uses_kt pf ==> pi_uses_kt
Hpf4: gset_to_coGset (framing_patterns Γ (ϕ₁ ---> ϕ₂) pf) ⊆ pi_framing_patterns
p0: wfPattern
Hp0: p0 ∈ {[ψ ↾ wfψ]}

p0 ∈ pi_framing_patterns
Σ: Signature
Γ: Theory
ϕ₁, ϕ₂, ψ: Pattern
pi_generalized_evars: coEVarSet
pi_substituted_svars: coSVarSet
pi_uses_kt: bool
pi_framing_patterns: coWfpSet
wfψ: well_formed ψ
H3: {[ψ ↾ wfψ]} ⊆ pi_framing_patterns
pf: ML_proof_system Γ (ϕ₁ ---> ϕ₂)
Hpf1: gset_to_coGset (uses_of_ex_gen Γ (ϕ₁ ---> ϕ₂) pf) ⊆ pi_generalized_evars
Hpf2: gset_to_coGset (uses_of_svar_subst Γ (ϕ₁ ---> ϕ₂) pf) ⊆ pi_substituted_svars
Hpf3: uses_kt pf ==> pi_uses_kt
Hpf4: gset_to_coGset (framing_patterns Γ (ϕ₁ ---> ϕ₂) pf) ⊆ pi_framing_patterns
p0: wfPattern
Hp0: p0 ∈ {[ψ ↾ wfψ]}

p0 ∈ pi_framing_patterns
Σ: Signature
Γ: Theory
ϕ₁, ϕ₂, ψ: Pattern
pi_generalized_evars: coEVarSet
pi_substituted_svars: coSVarSet
pi_uses_kt: bool
pi_framing_patterns: coWfpSet
wfψ: well_formed ψ
H3: {[ψ ↾ wfψ]} ⊆ pi_framing_patterns
pf: ML_proof_system Γ (ϕ₁ ---> ϕ₂)
Hpf1: gset_to_coGset (uses_of_ex_gen Γ (ϕ₁ ---> ϕ₂) pf) ⊆ pi_generalized_evars
Hpf2: gset_to_coGset (uses_of_svar_subst Γ (ϕ₁ ---> ϕ₂) pf) ⊆ pi_substituted_svars
Hpf3: uses_kt pf ==> pi_uses_kt
Hpf4: gset_to_coGset (framing_patterns Γ (ϕ₁ ---> ϕ₂) pf) ⊆ pi_framing_patterns
p0: wfPattern
Hp0: p0 ∈ {[ψ ↾ wfψ]}
F: {p : Pattern | well_formed p = true} → Pattern
HeqF: F = (@sval) Pattern (λ p : Pattern, well_formed p = true)

p0 ∈ pi_framing_patterns
Σ: Signature
Γ: Theory
ϕ₁, ϕ₂, ψ: Pattern
pi_generalized_evars: coEVarSet
pi_substituted_svars: coSVarSet
pi_uses_kt: bool
pi_framing_patterns: coWfpSet
wfψ: well_formed ψ
pf: ML_proof_system Γ (ϕ₁ ---> ϕ₂)
Hpf1: gset_to_coGset (uses_of_ex_gen Γ (ϕ₁ ---> ϕ₂) pf) ⊆ pi_generalized_evars
Hpf2: gset_to_coGset (uses_of_svar_subst Γ (ϕ₁ ---> ϕ₂) pf) ⊆ pi_substituted_svars
Hpf3: uses_kt pf ==> pi_uses_kt
Hpf4: gset_to_coGset (framing_patterns Γ (ϕ₁ ---> ϕ₂) pf) ⊆ pi_framing_patterns
p0: wfPattern
Hp0: p0 ∈ {[ψ ↾ wfψ]}
F: {p : Pattern | well_formed p = true} → Pattern
HeqF: F = (@sval) Pattern (λ p : Pattern, well_formed p = true)
H3: x : wfPattern, x ∈ {[ψ ↾ wfψ]} → x ∈ pi_framing_patterns

p0 ∈ pi_framing_patterns
Σ: Signature
Γ: Theory
ϕ₁, ϕ₂, ψ: Pattern
pi_generalized_evars: coEVarSet
pi_substituted_svars: coSVarSet
pi_uses_kt: bool
pi_framing_patterns: coWfpSet
wfψ: well_formed ψ
pf: ML_proof_system Γ (ϕ₁ ---> ϕ₂)
Hpf1: gset_to_coGset (uses_of_ex_gen Γ (ϕ₁ ---> ϕ₂) pf) ⊆ pi_generalized_evars
Hpf2: gset_to_coGset (uses_of_svar_subst Γ (ϕ₁ ---> ϕ₂) pf) ⊆ pi_substituted_svars
Hpf3: uses_kt pf ==> pi_uses_kt
Hpf4: gset_to_coGset (framing_patterns Γ (ϕ₁ ---> ϕ₂) pf) ⊆ pi_framing_patterns
p0: wfPattern
Hp0: p0 ∈ {[ψ ↾ wfψ]}
F: {p : Pattern | well_formed p = true} → Pattern
HeqF: F = (@sval) Pattern (λ p : Pattern, well_formed p = true)
H3: ψ ↾ wfψ ∈ {[ψ ↾ wfψ]} → ψ ↾ wfψ ∈ pi_framing_patterns

p0 ∈ pi_framing_patterns
Σ: Signature
Γ: Theory
ϕ₁, ϕ₂, ψ: Pattern
pi_generalized_evars: coEVarSet
pi_substituted_svars: coSVarSet
pi_uses_kt: bool
pi_framing_patterns: coWfpSet
wfψ: well_formed ψ
pf: ML_proof_system Γ (ϕ₁ ---> ϕ₂)
Hpf1: gset_to_coGset (uses_of_ex_gen Γ (ϕ₁ ---> ϕ₂) pf) ⊆ pi_generalized_evars
Hpf2: gset_to_coGset (uses_of_svar_subst Γ (ϕ₁ ---> ϕ₂) pf) ⊆ pi_substituted_svars
Hpf3: uses_kt pf ==> pi_uses_kt
Hpf4: gset_to_coGset (framing_patterns Γ (ϕ₁ ---> ϕ₂) pf) ⊆ pi_framing_patterns
p0: wfPattern
Hp0: p0 ∈ {[ψ ↾ wfψ]}
F: {p : Pattern | well_formed p = true} → Pattern
HeqF: F = (@sval) Pattern (λ p : Pattern, well_formed p = true)
H3: ψ ↾ wfψ ∈ {[ψ ↾ wfψ]} → ψ ↾ wfψ ∈ pi_framing_patterns

ψ ↾ wfψ ∈ {[ψ ↾ wfψ]}
Σ: Signature
Γ: Theory
ϕ₁, ϕ₂, ψ: Pattern
pi_generalized_evars: coEVarSet
pi_substituted_svars: coSVarSet
pi_uses_kt: bool
pi_framing_patterns: coWfpSet
wfψ: well_formed ψ
pf: ML_proof_system Γ (ϕ₁ ---> ϕ₂)
Hpf1: gset_to_coGset (uses_of_ex_gen Γ (ϕ₁ ---> ϕ₂) pf) ⊆ pi_generalized_evars
Hpf2: gset_to_coGset (uses_of_svar_subst Γ (ϕ₁ ---> ϕ₂) pf) ⊆ pi_substituted_svars
Hpf3: uses_kt pf ==> pi_uses_kt
Hpf4: gset_to_coGset (framing_patterns Γ (ϕ₁ ---> ϕ₂) pf) ⊆ pi_framing_patterns
p0: wfPattern
Hp0: p0 ∈ {[ψ ↾ wfψ]}
F: {p : Pattern | well_formed p = true} → Pattern
HeqF: F = (@sval) Pattern (λ p : Pattern, well_formed p = true)
H3: ψ ↾ wfψ ∈ pi_framing_patterns
p0 ∈ pi_framing_patterns
Σ: Signature
Γ: Theory
ϕ₁, ϕ₂, ψ: Pattern
pi_generalized_evars: coEVarSet
pi_substituted_svars: coSVarSet
pi_uses_kt: bool
pi_framing_patterns: coWfpSet
wfψ: well_formed ψ
pf: ML_proof_system Γ (ϕ₁ ---> ϕ₂)
Hpf1: gset_to_coGset (uses_of_ex_gen Γ (ϕ₁ ---> ϕ₂) pf) ⊆ pi_generalized_evars
Hpf2: gset_to_coGset (uses_of_svar_subst Γ (ϕ₁ ---> ϕ₂) pf) ⊆ pi_substituted_svars
Hpf3: uses_kt pf ==> pi_uses_kt
Hpf4: gset_to_coGset (framing_patterns Γ (ϕ₁ ---> ϕ₂) pf) ⊆ pi_framing_patterns
p0: wfPattern
Hp0: p0 ∈ {[ψ ↾ wfψ]}
F: {p : Pattern | well_formed p = true} → Pattern
HeqF: F = (@sval) Pattern (λ p : Pattern, well_formed p = true)
H3: ψ ↾ wfψ ∈ {[ψ ↾ wfψ]} → ψ ↾ wfψ ∈ pi_framing_patterns

ψ ↾ wfψ ∈ {[ψ ↾ wfψ]}
Σ: Signature
ψ: Pattern
wfψ: well_formed ψ

ψ ↾ wfψ ∈ {[ψ ↾ wfψ]}
set_solver.
Σ: Signature
Γ: Theory
ϕ₁, ϕ₂, ψ: Pattern
pi_generalized_evars: coEVarSet
pi_substituted_svars: coSVarSet
pi_uses_kt: bool
pi_framing_patterns: coWfpSet
wfψ: well_formed ψ
pf: ML_proof_system Γ (ϕ₁ ---> ϕ₂)
Hpf1: gset_to_coGset (uses_of_ex_gen Γ (ϕ₁ ---> ϕ₂) pf) ⊆ pi_generalized_evars
Hpf2: gset_to_coGset (uses_of_svar_subst Γ (ϕ₁ ---> ϕ₂) pf) ⊆ pi_substituted_svars
Hpf3: uses_kt pf ==> pi_uses_kt
Hpf4: gset_to_coGset (framing_patterns Γ (ϕ₁ ---> ϕ₂) pf) ⊆ pi_framing_patterns
p0: wfPattern
Hp0: p0 ∈ {[ψ ↾ wfψ]}
F: {p : Pattern | well_formed p = true} → Pattern
HeqF: F = (@sval) Pattern (λ p : Pattern, well_formed p = true)
H3: ψ ↾ wfψ ∈ pi_framing_patterns

p0 ∈ pi_framing_patterns
Σ: Signature
Γ: Theory
ϕ₁, ϕ₂, ψ: Pattern
pi_generalized_evars: coEVarSet
pi_substituted_svars: coSVarSet
pi_uses_kt: bool
pi_framing_patterns: coWfpSet
wfψ: well_formed ψ
pf: ML_proof_system Γ (ϕ₁ ---> ϕ₂)
Hpf1: gset_to_coGset (uses_of_ex_gen Γ (ϕ₁ ---> ϕ₂) pf) ⊆ pi_generalized_evars
Hpf2: gset_to_coGset (uses_of_svar_subst Γ (ϕ₁ ---> ϕ₂) pf) ⊆ pi_substituted_svars
Hpf3: uses_kt pf ==> pi_uses_kt
Hpf4: gset_to_coGset (framing_patterns Γ (ϕ₁ ---> ϕ₂) pf) ⊆ pi_framing_patterns
p0: wfPattern
Hp0: p0 ∈ {[ψ ↾ wfψ]}
H3: ψ ↾ wfψ ∈ pi_framing_patterns

p0 ∈ pi_framing_patterns
Σ: Signature
ψ: Pattern
pi_framing_patterns: coWfpSet
wfψ: well_formed ψ
p0: wfPattern
Hp0: p0 ∈ {[ψ ↾ wfψ]}
H3: ψ ↾ wfψ ∈ pi_framing_patterns

p0 ∈ pi_framing_patterns
set_solver.
Σ: Signature
Γ: Theory
ϕ₁, ϕ₂, ψ: Pattern
pi_generalized_evars: coEVarSet
pi_substituted_svars: coSVarSet
pi_uses_kt: bool
pi_framing_patterns: coWfpSet
wfψ: well_formed ψ
H3: {[ψ ↾ wfψ]} ⊆ pi_framing_patterns
pf: ML_proof_system Γ (ϕ₁ ---> ϕ₂)
Hpf1: gset_to_coGset (uses_of_ex_gen Γ (ϕ₁ ---> ϕ₂) pf) ⊆ pi_generalized_evars
Hpf2: gset_to_coGset (uses_of_svar_subst Γ (ϕ₁ ---> ϕ₂) pf) ⊆ pi_substituted_svars
Hpf3: uses_kt pf ==> pi_uses_kt
Hpf4: gset_to_coGset (framing_patterns Γ (ϕ₁ ---> ϕ₂) pf) ⊆ pi_framing_patterns
p0: wfPattern
Hp0: p0 ∈ framing_patterns Γ (ϕ₁ ---> ϕ₂) pf

p0 ∈ pi_framing_patterns
Σ: Signature
Γ: Theory
ϕ₁, ϕ₂, ψ: Pattern
pi_generalized_evars: coEVarSet
pi_substituted_svars: coSVarSet
pi_uses_kt: bool
pi_framing_patterns: coWfpSet
wfψ: well_formed ψ
H3: {[ψ ↾ wfψ]} ⊆ pi_framing_patterns
pf: ML_proof_system Γ (ϕ₁ ---> ϕ₂)
Hpf1: gset_to_coGset (uses_of_ex_gen Γ (ϕ₁ ---> ϕ₂) pf) ⊆ pi_generalized_evars
Hpf2: gset_to_coGset (uses_of_svar_subst Γ (ϕ₁ ---> ϕ₂) pf) ⊆ pi_substituted_svars
Hpf3: uses_kt pf ==> pi_uses_kt
Hpf4: gset_to_coGset (framing_patterns Γ (ϕ₁ ---> ϕ₂) pf) ⊆ pi_framing_patterns
p0: wfPattern
Hp0: p0 ∈ framing_patterns Γ (ϕ₁ ---> ϕ₂) pf

p0 ∈ pi_framing_patterns
set_solver. } } } Defined.
Σ: Signature
Γ: Theory
ϕ₁, ϕ₂, ψ: Pattern
i: ProofInfo
wfψ: well_formed ψ
pile: ProofInfoLe (ExGen := ∅, SVSubst := ∅, KT := false, FP := {[ψ ↾ wfψ]}) i

Γ ⊢i ϕ₁ ---> ϕ₂ using i → Γ ⊢i ψ $ ϕ₁ ---> ψ $ ϕ₂ using i
Σ: Signature
Γ: Theory
ϕ₁, ϕ₂, ψ: Pattern
i: ProofInfo
wfψ: well_formed ψ
pile: ProofInfoLe (ExGen := ∅, SVSubst := ∅, KT := false, FP := {[ψ ↾ wfψ]}) i

Γ ⊢i ϕ₁ ---> ϕ₂ using i → Γ ⊢i ψ $ ϕ₁ ---> ψ $ ϕ₂ using i
Σ: Signature
Γ: Theory
ϕ₁, ϕ₂, ψ: Pattern
i: ProofInfo
wfψ: well_formed ψ
pile: ProofInfoLe (ExGen := ∅, SVSubst := ∅, KT := false, FP := {[ψ ↾ wfψ]}) i
pf: ML_proof_system Γ (ϕ₁ ---> ϕ₂)
Hpf: ProofInfoMeaning Γ (ϕ₁ ---> ϕ₂) pf i

Γ ⊢i ψ $ ϕ₁ ---> ψ $ ϕ₂ using i
Σ: Signature
Γ: Theory
ϕ₁, ϕ₂, ψ: Pattern
i: ProofInfo
wfψ: well_formed ψ
pile: ProofInfoLe (ExGen := ∅, SVSubst := ∅, KT := false, FP := {[ψ ↾ wfψ]}) i
pf: ML_proof_system Γ (ϕ₁ ---> ϕ₂)
Hpf: ProofInfoMeaning Γ (ϕ₁ ---> ϕ₂) pf i

ML_proof_system Γ (ψ $ ϕ₁ ---> ψ $ ϕ₂)
Σ: Signature
Γ: Theory
ϕ₁, ϕ₂, ψ: Pattern
i: ProofInfo
wfψ: well_formed ψ
pile: ProofInfoLe (ExGen := ∅, SVSubst := ∅, KT := false, FP := {[ψ ↾ wfψ]}) i
pf: ML_proof_system Γ (ϕ₁ ---> ϕ₂)
Hpf: ProofInfoMeaning Γ (ϕ₁ ---> ϕ₂) pf i
ProofInfoMeaning Γ (ψ $ ϕ₁ ---> ψ $ ϕ₂) ?pf i
Σ: Signature
Γ: Theory
ϕ₁, ϕ₂, ψ: Pattern
i: ProofInfo
wfψ: well_formed ψ
pile: ProofInfoLe (ExGen := ∅, SVSubst := ∅, KT := false, FP := {[ψ ↾ wfψ]}) i
pf: ML_proof_system Γ (ϕ₁ ---> ϕ₂)
Hpf: ProofInfoMeaning Γ (ϕ₁ ---> ϕ₂) pf i

ML_proof_system Γ (ψ $ ϕ₁ ---> ψ $ ϕ₂)
Σ: Signature
Γ: Theory
ϕ₁, ϕ₂, ψ: Pattern
i: ProofInfo
wfψ: well_formed ψ
pile: ProofInfoLe (ExGen := ∅, SVSubst := ∅, KT := false, FP := {[ψ ↾ wfψ]}) i
pf: ML_proof_system Γ (ϕ₁ ---> ϕ₂)
Hpf: ProofInfoMeaning Γ (ϕ₁ ---> ϕ₂) pf i

well_formed ψ
Σ: Signature
Γ: Theory
ϕ₁, ϕ₂, ψ: Pattern
i: ProofInfo
wfψ: well_formed ψ
pile: ProofInfoLe (ExGen := ∅, SVSubst := ∅, KT := false, FP := {[ψ ↾ wfψ]}) i
pf: ML_proof_system Γ (ϕ₁ ---> ϕ₂)
Hpf: ProofInfoMeaning Γ (ϕ₁ ---> ϕ₂) pf i
ML_proof_system Γ (ϕ₁ ---> ϕ₂)
Σ: Signature
Γ: Theory
ϕ₁, ϕ₂, ψ: Pattern
i: ProofInfo
wfψ: well_formed ψ
pile: ProofInfoLe (ExGen := ∅, SVSubst := ∅, KT := false, FP := {[ψ ↾ wfψ]}) i
pf: ML_proof_system Γ (ϕ₁ ---> ϕ₂)
Hpf: ProofInfoMeaning Γ (ϕ₁ ---> ϕ₂) pf i

well_formed ψ
exact wfψ.
Σ: Signature
Γ: Theory
ϕ₁, ϕ₂, ψ: Pattern
i: ProofInfo
wfψ: well_formed ψ
pile: ProofInfoLe (ExGen := ∅, SVSubst := ∅, KT := false, FP := {[ψ ↾ wfψ]}) i
pf: ML_proof_system Γ (ϕ₁ ---> ϕ₂)
Hpf: ProofInfoMeaning Γ (ϕ₁ ---> ϕ₂) pf i

ML_proof_system Γ (ϕ₁ ---> ϕ₂)
exact pf.
Σ: Signature
Γ: Theory
ϕ₁, ϕ₂, ψ: Pattern
i: ProofInfo
wfψ: well_formed ψ
pile: ProofInfoLe (ExGen := ∅, SVSubst := ∅, KT := false, FP := {[ψ ↾ wfψ]}) i
pf: ML_proof_system Γ (ϕ₁ ---> ϕ₂)
Hpf: ProofInfoMeaning Γ (ϕ₁ ---> ϕ₂) pf i

ProofInfoMeaning Γ (ψ $ ϕ₁ ---> ψ $ ϕ₂) (Framing_right Γ ϕ₁ ϕ₂ ψ wfψ pf) i
Σ: Signature
Γ: Theory
ϕ₁, ϕ₂, ψ: Pattern
i: ProofInfo
wfψ: well_formed ψ
pile: ProofInfoLe (ExGen := ∅, SVSubst := ∅, KT := false, FP := {[ψ ↾ wfψ]}) i
pf: ML_proof_system Γ (ϕ₁ ---> ϕ₂)
Hpf: ProofInfoMeaning Γ (ϕ₁ ---> ϕ₂) pf i

ProofInfoMeaning Γ (ψ $ ϕ₁ ---> ψ $ ϕ₂) (Framing_right Γ ϕ₁ ϕ₂ ψ wfψ pf) i
Σ: Signature
Γ: Theory
ϕ₁, ϕ₂, ψ: Pattern
i: ProofInfo
wfψ: well_formed ψ
pile: ProofInfoLe (ExGen := ∅, SVSubst := ∅, KT := false, FP := {[ψ ↾ wfψ]}) i
pf: ML_proof_system Γ (ϕ₁ ---> ϕ₂)
Hpf1: gset_to_coGset (uses_of_ex_gen Γ (ϕ₁ ---> ϕ₂) pf) ⊆ pi_generalized_evars i
Hpf2: gset_to_coGset (uses_of_svar_subst Γ (ϕ₁ ---> ϕ₂) pf) ⊆ pi_substituted_svars i
Hpf3: uses_kt pf ==> pi_uses_kt i
Hpf4: gset_to_coGset (framing_patterns Γ (ϕ₁ ---> ϕ₂) pf) ⊆ pi_framing_patterns i

ProofInfoMeaning Γ (ψ $ ϕ₁ ---> ψ $ ϕ₂) (Framing_right Γ ϕ₁ ϕ₂ ψ wfψ pf) i
Σ: Signature
Γ: Theory
ϕ₁, ϕ₂, ψ: Pattern
i: ProofInfo
wfψ: well_formed ψ
pile: ProofInfoLe (ExGen := ∅, SVSubst := ∅, KT := false, FP := {[ψ ↾ wfψ]}) i
pf: ML_proof_system Γ (ϕ₁ ---> ϕ₂)
Hpf1: gset_to_coGset (uses_of_ex_gen Γ (ϕ₁ ---> ϕ₂) pf) ⊆ pi_generalized_evars i
Hpf2: gset_to_coGset (uses_of_svar_subst Γ (ϕ₁ ---> ϕ₂) pf) ⊆ pi_substituted_svars i
Hpf3: uses_kt pf ==> pi_uses_kt i
Hpf4: gset_to_coGset (framing_patterns Γ (ϕ₁ ---> ϕ₂) pf) ⊆ pi_framing_patterns i

gset_to_coGset (uses_of_ex_gen Γ (ϕ₁ ---> ϕ₂) pf) ⊆ pi_generalized_evars i
Σ: Signature
Γ: Theory
ϕ₁, ϕ₂, ψ: Pattern
i: ProofInfo
wfψ: well_formed ψ
pile: ProofInfoLe (ExGen := ∅, SVSubst := ∅, KT := false, FP := {[ψ ↾ wfψ]}) i
pf: ML_proof_system Γ (ϕ₁ ---> ϕ₂)
Hpf1: gset_to_coGset (uses_of_ex_gen Γ (ϕ₁ ---> ϕ₂) pf) ⊆ pi_generalized_evars i
Hpf2: gset_to_coGset (uses_of_svar_subst Γ (ϕ₁ ---> ϕ₂) pf) ⊆ pi_substituted_svars i
Hpf3: uses_kt pf ==> pi_uses_kt i
Hpf4: gset_to_coGset (framing_patterns Γ (ϕ₁ ---> ϕ₂) pf) ⊆ pi_framing_patterns i
gset_to_coGset (uses_of_svar_subst Γ (ϕ₁ ---> ϕ₂) pf) ⊆ pi_substituted_svars i
Σ: Signature
Γ: Theory
ϕ₁, ϕ₂, ψ: Pattern
i: ProofInfo
wfψ: well_formed ψ
pile: ProofInfoLe (ExGen := ∅, SVSubst := ∅, KT := false, FP := {[ψ ↾ wfψ]}) i
pf: ML_proof_system Γ (ϕ₁ ---> ϕ₂)
Hpf1: gset_to_coGset (uses_of_ex_gen Γ (ϕ₁ ---> ϕ₂) pf) ⊆ pi_generalized_evars i
Hpf2: gset_to_coGset (uses_of_svar_subst Γ (ϕ₁ ---> ϕ₂) pf) ⊆ pi_substituted_svars i
Hpf3: uses_kt pf ==> pi_uses_kt i
Hpf4: gset_to_coGset (framing_patterns Γ (ϕ₁ ---> ϕ₂) pf) ⊆ pi_framing_patterns i
uses_kt pf ==> pi_uses_kt i
Σ: Signature
Γ: Theory
ϕ₁, ϕ₂, ψ: Pattern
i: ProofInfo
wfψ: well_formed ψ
pile: ProofInfoLe (ExGen := ∅, SVSubst := ∅, KT := false, FP := {[ψ ↾ wfψ]}) i
pf: ML_proof_system Γ (ϕ₁ ---> ϕ₂)
Hpf1: gset_to_coGset (uses_of_ex_gen Γ (ϕ₁ ---> ϕ₂) pf) ⊆ pi_generalized_evars i
Hpf2: gset_to_coGset (uses_of_svar_subst Γ (ϕ₁ ---> ϕ₂) pf) ⊆ pi_substituted_svars i
Hpf3: uses_kt pf ==> pi_uses_kt i
Hpf4: gset_to_coGset (framing_patterns Γ (ϕ₁ ---> ϕ₂) pf) ⊆ pi_framing_patterns i
gset_to_coGset ({[ψ ↾ wfψ]} ∪ framing_patterns Γ (ϕ₁ ---> ϕ₂) pf) ⊆ pi_framing_patterns i
Σ: Signature
Γ: Theory
ϕ₁, ϕ₂, ψ: Pattern
i: ProofInfo
wfψ: well_formed ψ
pile: ProofInfoLe (ExGen := ∅, SVSubst := ∅, KT := false, FP := {[ψ ↾ wfψ]}) i
pf: ML_proof_system Γ (ϕ₁ ---> ϕ₂)
Hpf1: gset_to_coGset (uses_of_ex_gen Γ (ϕ₁ ---> ϕ₂) pf) ⊆ pi_generalized_evars i
Hpf2: gset_to_coGset (uses_of_svar_subst Γ (ϕ₁ ---> ϕ₂) pf) ⊆ pi_substituted_svars i
Hpf3: uses_kt pf ==> pi_uses_kt i
Hpf4: gset_to_coGset (framing_patterns Γ (ϕ₁ ---> ϕ₂) pf) ⊆ pi_framing_patterns i

gset_to_coGset (uses_of_ex_gen Γ (ϕ₁ ---> ϕ₂) pf) ⊆ pi_generalized_evars i
assumption.
Σ: Signature
Γ: Theory
ϕ₁, ϕ₂, ψ: Pattern
i: ProofInfo
wfψ: well_formed ψ
pile: ProofInfoLe (ExGen := ∅, SVSubst := ∅, KT := false, FP := {[ψ ↾ wfψ]}) i
pf: ML_proof_system Γ (ϕ₁ ---> ϕ₂)
Hpf1: gset_to_coGset (uses_of_ex_gen Γ (ϕ₁ ---> ϕ₂) pf) ⊆ pi_generalized_evars i
Hpf2: gset_to_coGset (uses_of_svar_subst Γ (ϕ₁ ---> ϕ₂) pf) ⊆ pi_substituted_svars i
Hpf3: uses_kt pf ==> pi_uses_kt i
Hpf4: gset_to_coGset (framing_patterns Γ (ϕ₁ ---> ϕ₂) pf) ⊆ pi_framing_patterns i

gset_to_coGset (uses_of_svar_subst Γ (ϕ₁ ---> ϕ₂) pf) ⊆ pi_substituted_svars i
Σ: Signature
Γ: Theory
ϕ₁, ϕ₂, ψ: Pattern
i: ProofInfo
wfψ: well_formed ψ
pile: ProofInfoLe (ExGen := ∅, SVSubst := ∅, KT := false, FP := {[ψ ↾ wfψ]}) i
pf: ML_proof_system Γ (ϕ₁ ---> ϕ₂)
Hpf1: gset_to_coGset (uses_of_ex_gen Γ (ϕ₁ ---> ϕ₂) pf) ⊆ pi_generalized_evars i
Hpf2: gset_to_coGset (uses_of_svar_subst Γ (ϕ₁ ---> ϕ₂) pf) ⊆ pi_substituted_svars i
Hpf3: uses_kt pf ==> pi_uses_kt i
Hpf4: gset_to_coGset (framing_patterns Γ (ϕ₁ ---> ϕ₂) pf) ⊆ pi_framing_patterns i
uses_kt pf ==> pi_uses_kt i
Σ: Signature
Γ: Theory
ϕ₁, ϕ₂, ψ: Pattern
i: ProofInfo
wfψ: well_formed ψ
pile: ProofInfoLe (ExGen := ∅, SVSubst := ∅, KT := false, FP := {[ψ ↾ wfψ]}) i
pf: ML_proof_system Γ (ϕ₁ ---> ϕ₂)
Hpf1: gset_to_coGset (uses_of_ex_gen Γ (ϕ₁ ---> ϕ₂) pf) ⊆ pi_generalized_evars i
Hpf2: gset_to_coGset (uses_of_svar_subst Γ (ϕ₁ ---> ϕ₂) pf) ⊆ pi_substituted_svars i
Hpf3: uses_kt pf ==> pi_uses_kt i
Hpf4: gset_to_coGset (framing_patterns Γ (ϕ₁ ---> ϕ₂) pf) ⊆ pi_framing_patterns i
gset_to_coGset ({[ψ ↾ wfψ]} ∪ framing_patterns Γ (ϕ₁ ---> ϕ₂) pf) ⊆ pi_framing_patterns i
Σ: Signature
Γ: Theory
ϕ₁, ϕ₂, ψ: Pattern
i: ProofInfo
wfψ: well_formed ψ
pile: ProofInfoLe (ExGen := ∅, SVSubst := ∅, KT := false, FP := {[ψ ↾ wfψ]}) i
pf: ML_proof_system Γ (ϕ₁ ---> ϕ₂)
Hpf1: gset_to_coGset (uses_of_ex_gen Γ (ϕ₁ ---> ϕ₂) pf) ⊆ pi_generalized_evars i
Hpf2: gset_to_coGset (uses_of_svar_subst Γ (ϕ₁ ---> ϕ₂) pf) ⊆ pi_substituted_svars i
Hpf3: uses_kt pf ==> pi_uses_kt i
Hpf4: gset_to_coGset (framing_patterns Γ (ϕ₁ ---> ϕ₂) pf) ⊆ pi_framing_patterns i

gset_to_coGset (uses_of_svar_subst Γ (ϕ₁ ---> ϕ₂) pf) ⊆ pi_substituted_svars i
assumption.
Σ: Signature
Γ: Theory
ϕ₁, ϕ₂, ψ: Pattern
i: ProofInfo
wfψ: well_formed ψ
pile: ProofInfoLe (ExGen := ∅, SVSubst := ∅, KT := false, FP := {[ψ ↾ wfψ]}) i
pf: ML_proof_system Γ (ϕ₁ ---> ϕ₂)
Hpf1: gset_to_coGset (uses_of_ex_gen Γ (ϕ₁ ---> ϕ₂) pf) ⊆ pi_generalized_evars i
Hpf2: gset_to_coGset (uses_of_svar_subst Γ (ϕ₁ ---> ϕ₂) pf) ⊆ pi_substituted_svars i
Hpf3: uses_kt pf ==> pi_uses_kt i
Hpf4: gset_to_coGset (framing_patterns Γ (ϕ₁ ---> ϕ₂) pf) ⊆ pi_framing_patterns i

uses_kt pf ==> pi_uses_kt i
Σ: Signature
Γ: Theory
ϕ₁, ϕ₂, ψ: Pattern
i: ProofInfo
wfψ: well_formed ψ
pile: ProofInfoLe (ExGen := ∅, SVSubst := ∅, KT := false, FP := {[ψ ↾ wfψ]}) i
pf: ML_proof_system Γ (ϕ₁ ---> ϕ₂)
Hpf1: gset_to_coGset (uses_of_ex_gen Γ (ϕ₁ ---> ϕ₂) pf) ⊆ pi_generalized_evars i
Hpf2: gset_to_coGset (uses_of_svar_subst Γ (ϕ₁ ---> ϕ₂) pf) ⊆ pi_substituted_svars i
Hpf3: uses_kt pf ==> pi_uses_kt i
Hpf4: gset_to_coGset (framing_patterns Γ (ϕ₁ ---> ϕ₂) pf) ⊆ pi_framing_patterns i
gset_to_coGset ({[ψ ↾ wfψ]} ∪ framing_patterns Γ (ϕ₁ ---> ϕ₂) pf) ⊆ pi_framing_patterns i
Σ: Signature
Γ: Theory
ϕ₁, ϕ₂, ψ: Pattern
i: ProofInfo
wfψ: well_formed ψ
pile: ProofInfoLe (ExGen := ∅, SVSubst := ∅, KT := false, FP := {[ψ ↾ wfψ]}) i
pf: ML_proof_system Γ (ϕ₁ ---> ϕ₂)
Hpf1: gset_to_coGset (uses_of_ex_gen Γ (ϕ₁ ---> ϕ₂) pf) ⊆ pi_generalized_evars i
Hpf2: gset_to_coGset (uses_of_svar_subst Γ (ϕ₁ ---> ϕ₂) pf) ⊆ pi_substituted_svars i
Hpf3: uses_kt pf ==> pi_uses_kt i
Hpf4: gset_to_coGset (framing_patterns Γ (ϕ₁ ---> ϕ₂) pf) ⊆ pi_framing_patterns i

uses_kt pf ==> pi_uses_kt i
assumption.
Σ: Signature
Γ: Theory
ϕ₁, ϕ₂, ψ: Pattern
i: ProofInfo
wfψ: well_formed ψ
pile: ProofInfoLe (ExGen := ∅, SVSubst := ∅, KT := false, FP := {[ψ ↾ wfψ]}) i
pf: ML_proof_system Γ (ϕ₁ ---> ϕ₂)
Hpf1: gset_to_coGset (uses_of_ex_gen Γ (ϕ₁ ---> ϕ₂) pf) ⊆ pi_generalized_evars i
Hpf2: gset_to_coGset (uses_of_svar_subst Γ (ϕ₁ ---> ϕ₂) pf) ⊆ pi_substituted_svars i
Hpf3: uses_kt pf ==> pi_uses_kt i
Hpf4: gset_to_coGset (framing_patterns Γ (ϕ₁ ---> ϕ₂) pf) ⊆ pi_framing_patterns i

gset_to_coGset ({[ψ ↾ wfψ]} ∪ framing_patterns Γ (ϕ₁ ---> ϕ₂) pf) ⊆ pi_framing_patterns i
Σ: Signature
Γ: Theory
ϕ₁, ϕ₂, ψ: Pattern
i: ProofInfo
wfψ: well_formed ψ
pile: ProofInfoLe (ExGen := ∅, SVSubst := ∅, KT := false, FP := {[ψ ↾ wfψ]}) i
pf: ML_proof_system Γ (ϕ₁ ---> ϕ₂)
Hpf1: gset_to_coGset (uses_of_ex_gen Γ (ϕ₁ ---> ϕ₂) pf) ⊆ pi_generalized_evars i
Hpf2: gset_to_coGset (uses_of_svar_subst Γ (ϕ₁ ---> ϕ₂) pf) ⊆ pi_substituted_svars i
Hpf3: uses_kt pf ==> pi_uses_kt i
Hpf4: gset_to_coGset (framing_patterns Γ (ϕ₁ ---> ϕ₂) pf) ⊆ pi_framing_patterns i

gset_to_coGset ({[ψ ↾ wfψ]} ∪ framing_patterns Γ (ϕ₁ ---> ϕ₂) pf) ⊆ pi_framing_patterns i
Σ: Signature
Γ: Theory
ϕ₁, ϕ₂, ψ: Pattern
pi_generalized_evars: coEVarSet
pi_substituted_svars: coSVarSet
pi_uses_kt: bool
pi_framing_patterns: coWfpSet
wfψ: well_formed ψ
pile: ProofInfoLe (ExGen := ∅, SVSubst := ∅, KT := false, FP := {[ψ ↾ wfψ]}) (ExGen := pi_generalized_evars, SVSubst := pi_substituted_svars, KT := pi_uses_kt, FP := pi_framing_patterns)
pf: ML_proof_system Γ (ϕ₁ ---> ϕ₂)
Hpf1: gset_to_coGset (uses_of_ex_gen Γ (ϕ₁ ---> ϕ₂) pf) ⊆ ProofSystem.pi_generalized_evars (ExGen := pi_generalized_evars, SVSubst := pi_substituted_svars, KT := pi_uses_kt, FP := pi_framing_patterns)
Hpf2: gset_to_coGset (uses_of_svar_subst Γ (ϕ₁ ---> ϕ₂) pf) ⊆ ProofSystem.pi_substituted_svars (ExGen := pi_generalized_evars, SVSubst := pi_substituted_svars, KT := pi_uses_kt, FP := pi_framing_patterns)
Hpf3: uses_kt pf ==> ProofSystem.pi_uses_kt (ExGen := pi_generalized_evars, SVSubst := pi_substituted_svars, KT := pi_uses_kt, FP := pi_framing_patterns)
Hpf4: gset_to_coGset (framing_patterns Γ (ϕ₁ ---> ϕ₂) pf) ⊆ ProofSystem.pi_framing_patterns (ExGen := pi_generalized_evars, SVSubst := pi_substituted_svars, KT := pi_uses_kt, FP := pi_framing_patterns)

gset_to_coGset ({[ψ ↾ wfψ]} ∪ framing_patterns Γ (ϕ₁ ---> ϕ₂) pf) ⊆ ProofSystem.pi_framing_patterns (ExGen := pi_generalized_evars, SVSubst := pi_substituted_svars, KT := pi_uses_kt, FP := pi_framing_patterns)
Σ: Signature
Γ: Theory
ϕ₁, ϕ₂, ψ: Pattern
pi_generalized_evars: coEVarSet
pi_substituted_svars: coSVarSet
pi_uses_kt: bool
pi_framing_patterns: coWfpSet
wfψ: well_formed ψ
pile: ProofInfoLe (ExGen := ∅, SVSubst := ∅, KT := false, FP := {[ψ ↾ wfψ]}) (ExGen := pi_generalized_evars, SVSubst := pi_substituted_svars, KT := pi_uses_kt, FP := pi_framing_patterns)
pf: ML_proof_system Γ (ϕ₁ ---> ϕ₂)
Hpf1: gset_to_coGset (uses_of_ex_gen Γ (ϕ₁ ---> ϕ₂) pf) ⊆ pi_generalized_evars
Hpf2: gset_to_coGset (uses_of_svar_subst Γ (ϕ₁ ---> ϕ₂) pf) ⊆ pi_substituted_svars
Hpf3: uses_kt pf ==> pi_uses_kt
Hpf4: gset_to_coGset (framing_patterns Γ (ϕ₁ ---> ϕ₂) pf) ⊆ pi_framing_patterns

gset_to_coGset ({[ψ ↾ wfψ]} ∪ framing_patterns Γ (ϕ₁ ---> ϕ₂) pf) ⊆ pi_framing_patterns
Σ: Signature
Γ: Theory
ϕ₁, ϕ₂, ψ: Pattern
pi_generalized_evars: coEVarSet
pi_substituted_svars: coSVarSet
pi_uses_kt: bool
pi_framing_patterns: coWfpSet
wfψ: well_formed ψ
pile: ∅ ⊆ pi_generalized_evars ∧ ∅ ⊆ pi_substituted_svars ∧ false ==> pi_uses_kt ∧ {[ψ ↾ wfψ]} ⊆ pi_framing_patterns
pf: ML_proof_system Γ (ϕ₁ ---> ϕ₂)
Hpf1: gset_to_coGset (uses_of_ex_gen Γ (ϕ₁ ---> ϕ₂) pf) ⊆ pi_generalized_evars
Hpf2: gset_to_coGset (uses_of_svar_subst Γ (ϕ₁ ---> ϕ₂) pf) ⊆ pi_substituted_svars
Hpf3: uses_kt pf ==> pi_uses_kt
Hpf4: gset_to_coGset (framing_patterns Γ (ϕ₁ ---> ϕ₂) pf) ⊆ pi_framing_patterns

gset_to_coGset ({[ψ ↾ wfψ]} ∪ framing_patterns Γ (ϕ₁ ---> ϕ₂) pf) ⊆ pi_framing_patterns
Σ: Signature
Γ: Theory
ϕ₁, ϕ₂, ψ: Pattern
pi_generalized_evars: coEVarSet
pi_substituted_svars: coSVarSet
pi_uses_kt: bool
pi_framing_patterns: coWfpSet
wfψ: well_formed ψ
H: ∅ ⊆ pi_generalized_evars
H1: ∅ ⊆ pi_substituted_svars
H0: false ==> pi_uses_kt
H3: {[ψ ↾ wfψ]} ⊆ pi_framing_patterns
pf: ML_proof_system Γ (ϕ₁ ---> ϕ₂)
Hpf1: gset_to_coGset (uses_of_ex_gen Γ (ϕ₁ ---> ϕ₂) pf) ⊆ pi_generalized_evars
Hpf2: gset_to_coGset (uses_of_svar_subst Γ (ϕ₁ ---> ϕ₂) pf) ⊆ pi_substituted_svars
Hpf3: uses_kt pf ==> pi_uses_kt
Hpf4: gset_to_coGset (framing_patterns Γ (ϕ₁ ---> ϕ₂) pf) ⊆ pi_framing_patterns

gset_to_coGset ({[ψ ↾ wfψ]} ∪ framing_patterns Γ (ϕ₁ ---> ϕ₂) pf) ⊆ pi_framing_patterns
Σ: Signature
Γ: Theory
ϕ₁, ϕ₂, ψ: Pattern
pi_generalized_evars: coEVarSet
pi_substituted_svars: coSVarSet
pi_uses_kt: bool
pi_framing_patterns: coWfpSet
wfψ: well_formed ψ
H3: {[ψ ↾ wfψ]} ⊆ pi_framing_patterns
pf: ML_proof_system Γ (ϕ₁ ---> ϕ₂)
Hpf1: gset_to_coGset (uses_of_ex_gen Γ (ϕ₁ ---> ϕ₂) pf) ⊆ pi_generalized_evars
Hpf2: gset_to_coGset (uses_of_svar_subst Γ (ϕ₁ ---> ϕ₂) pf) ⊆ pi_substituted_svars
Hpf3: uses_kt pf ==> pi_uses_kt
Hpf4: gset_to_coGset (framing_patterns Γ (ϕ₁ ---> ϕ₂) pf) ⊆ pi_framing_patterns

gset_to_coGset ({[ψ ↾ wfψ]} ∪ framing_patterns Γ (ϕ₁ ---> ϕ₂) pf) ⊆ pi_framing_patterns
Σ: Signature
Γ: Theory
ϕ₁, ϕ₂, ψ: Pattern
pi_generalized_evars: coEVarSet
pi_substituted_svars: coSVarSet
pi_uses_kt: bool
pi_framing_patterns: coWfpSet
wfψ: well_formed ψ
H3: {[ψ ↾ wfψ]} ⊆ pi_framing_patterns
pf: ML_proof_system Γ (ϕ₁ ---> ϕ₂)
Hpf1: gset_to_coGset (uses_of_ex_gen Γ (ϕ₁ ---> ϕ₂) pf) ⊆ pi_generalized_evars
Hpf2: gset_to_coGset (uses_of_svar_subst Γ (ϕ₁ ---> ϕ₂) pf) ⊆ pi_substituted_svars
Hpf3: uses_kt pf ==> pi_uses_kt
Hpf4: gset_to_coGset (framing_patterns Γ (ϕ₁ ---> ϕ₂) pf) ⊆ pi_framing_patterns

x : wfPattern, x ∈ gset_to_coGset ({[ψ ↾ wfψ]} ∪ framing_patterns Γ (ϕ₁ ---> ϕ₂) pf) → x ∈ pi_framing_patterns
Σ: Signature
Γ: Theory
ϕ₁, ϕ₂, ψ: Pattern
pi_generalized_evars: coEVarSet
pi_substituted_svars: coSVarSet
pi_uses_kt: bool
pi_framing_patterns: coWfpSet
wfψ: well_formed ψ
H3: {[ψ ↾ wfψ]} ⊆ pi_framing_patterns
pf: ML_proof_system Γ (ϕ₁ ---> ϕ₂)
Hpf1: gset_to_coGset (uses_of_ex_gen Γ (ϕ₁ ---> ϕ₂) pf) ⊆ pi_generalized_evars
Hpf2: gset_to_coGset (uses_of_svar_subst Γ (ϕ₁ ---> ϕ₂) pf) ⊆ pi_substituted_svars
Hpf3: uses_kt pf ==> pi_uses_kt
Hpf4: gset_to_coGset (framing_patterns Γ (ϕ₁ ---> ϕ₂) pf) ⊆ pi_framing_patterns
p0: wfPattern
Hp0: p0 ∈ gset_to_coGset ({[ψ ↾ wfψ]} ∪ framing_patterns Γ (ϕ₁ ---> ϕ₂) pf)

p0 ∈ pi_framing_patterns
Σ: Signature
Γ: Theory
ϕ₁, ϕ₂, ψ: Pattern
pi_generalized_evars: coEVarSet
pi_substituted_svars: coSVarSet
pi_uses_kt: bool
pi_framing_patterns: coWfpSet
wfψ: well_formed ψ
H3: {[ψ ↾ wfψ]} ⊆ pi_framing_patterns
pf: ML_proof_system Γ (ϕ₁ ---> ϕ₂)
Hpf1: gset_to_coGset (uses_of_ex_gen Γ (ϕ₁ ---> ϕ₂) pf) ⊆ pi_generalized_evars
Hpf2: gset_to_coGset (uses_of_svar_subst Γ (ϕ₁ ---> ϕ₂) pf) ⊆ pi_substituted_svars
Hpf3: uses_kt pf ==> pi_uses_kt
Hpf4: gset_to_coGset (framing_patterns Γ (ϕ₁ ---> ϕ₂) pf) ⊆ pi_framing_patterns
p0: wfPattern
Hp0: p0 ∈ {[ψ ↾ wfψ]} ∪ framing_patterns Γ (ϕ₁ ---> ϕ₂) pf

p0 ∈ pi_framing_patterns
Σ: Signature
Γ: Theory
ϕ₁, ϕ₂, ψ: Pattern
pi_generalized_evars: coEVarSet
pi_substituted_svars: coSVarSet
pi_uses_kt: bool
pi_framing_patterns: coWfpSet
wfψ: well_formed ψ
H3: {[ψ ↾ wfψ]} ⊆ pi_framing_patterns
pf: ML_proof_system Γ (ϕ₁ ---> ϕ₂)
Hpf1: gset_to_coGset (uses_of_ex_gen Γ (ϕ₁ ---> ϕ₂) pf) ⊆ pi_generalized_evars
Hpf2: gset_to_coGset (uses_of_svar_subst Γ (ϕ₁ ---> ϕ₂) pf) ⊆ pi_substituted_svars
Hpf3: uses_kt pf ==> pi_uses_kt
Hpf4: gset_to_coGset (framing_patterns Γ (ϕ₁ ---> ϕ₂) pf) ⊆ pi_framing_patterns
p0: wfPattern
Hp0: p0 ∈ {[ψ ↾ wfψ]} ∨ p0 ∈ framing_patterns Γ (ϕ₁ ---> ϕ₂) pf

p0 ∈ pi_framing_patterns
Σ: Signature
Γ: Theory
ϕ₁, ϕ₂, ψ: Pattern
pi_generalized_evars: coEVarSet
pi_substituted_svars: coSVarSet
pi_uses_kt: bool
pi_framing_patterns: coWfpSet
wfψ: well_formed ψ
H3: {[ψ ↾ wfψ]} ⊆ pi_framing_patterns
pf: ML_proof_system Γ (ϕ₁ ---> ϕ₂)
Hpf1: gset_to_coGset (uses_of_ex_gen Γ (ϕ₁ ---> ϕ₂) pf) ⊆ pi_generalized_evars
Hpf2: gset_to_coGset (uses_of_svar_subst Γ (ϕ₁ ---> ϕ₂) pf) ⊆ pi_substituted_svars
Hpf3: uses_kt pf ==> pi_uses_kt
Hpf4: gset_to_coGset (framing_patterns Γ (ϕ₁ ---> ϕ₂) pf) ⊆ pi_framing_patterns
p0: wfPattern
Hp0: p0 ∈ {[ψ ↾ wfψ]}

p0 ∈ pi_framing_patterns
Σ: Signature
Γ: Theory
ϕ₁, ϕ₂, ψ: Pattern
pi_generalized_evars: coEVarSet
pi_substituted_svars: coSVarSet
pi_uses_kt: bool
pi_framing_patterns: coWfpSet
wfψ: well_formed ψ
H3: {[ψ ↾ wfψ]} ⊆ pi_framing_patterns
pf: ML_proof_system Γ (ϕ₁ ---> ϕ₂)
Hpf1: gset_to_coGset (uses_of_ex_gen Γ (ϕ₁ ---> ϕ₂) pf) ⊆ pi_generalized_evars
Hpf2: gset_to_coGset (uses_of_svar_subst Γ (ϕ₁ ---> ϕ₂) pf) ⊆ pi_substituted_svars
Hpf3: uses_kt pf ==> pi_uses_kt
Hpf4: gset_to_coGset (framing_patterns Γ (ϕ₁ ---> ϕ₂) pf) ⊆ pi_framing_patterns
p0: wfPattern
Hp0: p0 ∈ framing_patterns Γ (ϕ₁ ---> ϕ₂) pf
p0 ∈ pi_framing_patterns
Σ: Signature
Γ: Theory
ϕ₁, ϕ₂, ψ: Pattern
pi_generalized_evars: coEVarSet
pi_substituted_svars: coSVarSet
pi_uses_kt: bool
pi_framing_patterns: coWfpSet
wfψ: well_formed ψ
H3: {[ψ ↾ wfψ]} ⊆ pi_framing_patterns
pf: ML_proof_system Γ (ϕ₁ ---> ϕ₂)
Hpf1: gset_to_coGset (uses_of_ex_gen Γ (ϕ₁ ---> ϕ₂) pf) ⊆ pi_generalized_evars
Hpf2: gset_to_coGset (uses_of_svar_subst Γ (ϕ₁ ---> ϕ₂) pf) ⊆ pi_substituted_svars
Hpf3: uses_kt pf ==> pi_uses_kt
Hpf4: gset_to_coGset (framing_patterns Γ (ϕ₁ ---> ϕ₂) pf) ⊆ pi_framing_patterns
p0: wfPattern
Hp0: p0 ∈ {[ψ ↾ wfψ]}

p0 ∈ pi_framing_patterns
Σ: Signature
Γ: Theory
ϕ₁, ϕ₂, ψ: Pattern
pi_generalized_evars: coEVarSet
pi_substituted_svars: coSVarSet
pi_uses_kt: bool
pi_framing_patterns: coWfpSet
wfψ: well_formed ψ
H3: {[ψ ↾ wfψ]} ⊆ pi_framing_patterns
pf: ML_proof_system Γ (ϕ₁ ---> ϕ₂)
Hpf1: gset_to_coGset (uses_of_ex_gen Γ (ϕ₁ ---> ϕ₂) pf) ⊆ pi_generalized_evars
Hpf2: gset_to_coGset (uses_of_svar_subst Γ (ϕ₁ ---> ϕ₂) pf) ⊆ pi_substituted_svars
Hpf3: uses_kt pf ==> pi_uses_kt
Hpf4: gset_to_coGset (framing_patterns Γ (ϕ₁ ---> ϕ₂) pf) ⊆ pi_framing_patterns
p0: wfPattern
Hp0: p0 ∈ {[ψ ↾ wfψ]}

p0 ∈ pi_framing_patterns
Σ: Signature
Γ: Theory
ϕ₁, ϕ₂, ψ: Pattern
pi_generalized_evars: coEVarSet
pi_substituted_svars: coSVarSet
pi_uses_kt: bool
pi_framing_patterns: coWfpSet
wfψ: well_formed ψ
H3: {[ψ ↾ wfψ]} ⊆ pi_framing_patterns
pf: ML_proof_system Γ (ϕ₁ ---> ϕ₂)
Hpf1: gset_to_coGset (uses_of_ex_gen Γ (ϕ₁ ---> ϕ₂) pf) ⊆ pi_generalized_evars
Hpf2: gset_to_coGset (uses_of_svar_subst Γ (ϕ₁ ---> ϕ₂) pf) ⊆ pi_substituted_svars
Hpf3: uses_kt pf ==> pi_uses_kt
Hpf4: gset_to_coGset (framing_patterns Γ (ϕ₁ ---> ϕ₂) pf) ⊆ pi_framing_patterns
p0: wfPattern
Hp0: p0 ∈ {[ψ ↾ wfψ]}
F: {p : Pattern | well_formed p = true} → Pattern
HeqF: F = (@sval) Pattern (λ p : Pattern, well_formed p = true)

p0 ∈ pi_framing_patterns
Σ: Signature
Γ: Theory
ϕ₁, ϕ₂, ψ: Pattern
pi_generalized_evars: coEVarSet
pi_substituted_svars: coSVarSet
pi_uses_kt: bool
pi_framing_patterns: coWfpSet
wfψ: well_formed ψ
pf: ML_proof_system Γ (ϕ₁ ---> ϕ₂)
Hpf1: gset_to_coGset (uses_of_ex_gen Γ (ϕ₁ ---> ϕ₂) pf) ⊆ pi_generalized_evars
Hpf2: gset_to_coGset (uses_of_svar_subst Γ (ϕ₁ ---> ϕ₂) pf) ⊆ pi_substituted_svars
Hpf3: uses_kt pf ==> pi_uses_kt
Hpf4: gset_to_coGset (framing_patterns Γ (ϕ₁ ---> ϕ₂) pf) ⊆ pi_framing_patterns
p0: wfPattern
Hp0: p0 ∈ {[ψ ↾ wfψ]}
F: {p : Pattern | well_formed p = true} → Pattern
HeqF: F = (@sval) Pattern (λ p : Pattern, well_formed p = true)
H3: x : wfPattern, x ∈ {[ψ ↾ wfψ]} → x ∈ pi_framing_patterns

p0 ∈ pi_framing_patterns
Σ: Signature
Γ: Theory
ϕ₁, ϕ₂, ψ: Pattern
pi_generalized_evars: coEVarSet
pi_substituted_svars: coSVarSet
pi_uses_kt: bool
pi_framing_patterns: coWfpSet
wfψ: well_formed ψ
pf: ML_proof_system Γ (ϕ₁ ---> ϕ₂)
Hpf1: gset_to_coGset (uses_of_ex_gen Γ (ϕ₁ ---> ϕ₂) pf) ⊆ pi_generalized_evars
Hpf2: gset_to_coGset (uses_of_svar_subst Γ (ϕ₁ ---> ϕ₂) pf) ⊆ pi_substituted_svars
Hpf3: uses_kt pf ==> pi_uses_kt
Hpf4: gset_to_coGset (framing_patterns Γ (ϕ₁ ---> ϕ₂) pf) ⊆ pi_framing_patterns
p0: wfPattern
Hp0: p0 ∈ {[ψ ↾ wfψ]}
F: {p : Pattern | well_formed p = true} → Pattern
HeqF: F = (@sval) Pattern (λ p : Pattern, well_formed p = true)
H3: ψ ↾ wfψ ∈ {[ψ ↾ wfψ]} → ψ ↾ wfψ ∈ pi_framing_patterns

p0 ∈ pi_framing_patterns
Σ: Signature
Γ: Theory
ϕ₁, ϕ₂, ψ: Pattern
pi_generalized_evars: coEVarSet
pi_substituted_svars: coSVarSet
pi_uses_kt: bool
pi_framing_patterns: coWfpSet
wfψ: well_formed ψ
pf: ML_proof_system Γ (ϕ₁ ---> ϕ₂)
Hpf1: gset_to_coGset (uses_of_ex_gen Γ (ϕ₁ ---> ϕ₂) pf) ⊆ pi_generalized_evars
Hpf2: gset_to_coGset (uses_of_svar_subst Γ (ϕ₁ ---> ϕ₂) pf) ⊆ pi_substituted_svars
Hpf3: uses_kt pf ==> pi_uses_kt
Hpf4: gset_to_coGset (framing_patterns Γ (ϕ₁ ---> ϕ₂) pf) ⊆ pi_framing_patterns
p0: wfPattern
Hp0: p0 ∈ {[ψ ↾ wfψ]}
F: {p : Pattern | well_formed p = true} → Pattern
HeqF: F = (@sval) Pattern (λ p : Pattern, well_formed p = true)
H3: ψ ↾ wfψ ∈ {[ψ ↾ wfψ]} → ψ ↾ wfψ ∈ pi_framing_patterns

ψ ↾ wfψ ∈ {[ψ ↾ wfψ]}
Σ: Signature
Γ: Theory
ϕ₁, ϕ₂, ψ: Pattern
pi_generalized_evars: coEVarSet
pi_substituted_svars: coSVarSet
pi_uses_kt: bool
pi_framing_patterns: coWfpSet
wfψ: well_formed ψ
pf: ML_proof_system Γ (ϕ₁ ---> ϕ₂)
Hpf1: gset_to_coGset (uses_of_ex_gen Γ (ϕ₁ ---> ϕ₂) pf) ⊆ pi_generalized_evars
Hpf2: gset_to_coGset (uses_of_svar_subst Γ (ϕ₁ ---> ϕ₂) pf) ⊆ pi_substituted_svars
Hpf3: uses_kt pf ==> pi_uses_kt
Hpf4: gset_to_coGset (framing_patterns Γ (ϕ₁ ---> ϕ₂) pf) ⊆ pi_framing_patterns
p0: wfPattern
Hp0: p0 ∈ {[ψ ↾ wfψ]}
F: {p : Pattern | well_formed p = true} → Pattern
HeqF: F = (@sval) Pattern (λ p : Pattern, well_formed p = true)
H3: ψ ↾ wfψ ∈ pi_framing_patterns
p0 ∈ pi_framing_patterns
Σ: Signature
Γ: Theory
ϕ₁, ϕ₂, ψ: Pattern
pi_generalized_evars: coEVarSet
pi_substituted_svars: coSVarSet
pi_uses_kt: bool
pi_framing_patterns: coWfpSet
wfψ: well_formed ψ
pf: ML_proof_system Γ (ϕ₁ ---> ϕ₂)
Hpf1: gset_to_coGset (uses_of_ex_gen Γ (ϕ₁ ---> ϕ₂) pf) ⊆ pi_generalized_evars
Hpf2: gset_to_coGset (uses_of_svar_subst Γ (ϕ₁ ---> ϕ₂) pf) ⊆ pi_substituted_svars
Hpf3: uses_kt pf ==> pi_uses_kt
Hpf4: gset_to_coGset (framing_patterns Γ (ϕ₁ ---> ϕ₂) pf) ⊆ pi_framing_patterns
p0: wfPattern
Hp0: p0 ∈ {[ψ ↾ wfψ]}
F: {p : Pattern | well_formed p = true} → Pattern
HeqF: F = (@sval) Pattern (λ p : Pattern, well_formed p = true)
H3: ψ ↾ wfψ ∈ {[ψ ↾ wfψ]} → ψ ↾ wfψ ∈ pi_framing_patterns

ψ ↾ wfψ ∈ {[ψ ↾ wfψ]}
Σ: Signature
ψ: Pattern
wfψ: well_formed ψ

ψ ↾ wfψ ∈ {[ψ ↾ wfψ]}
set_solver.
Σ: Signature
Γ: Theory
ϕ₁, ϕ₂, ψ: Pattern
pi_generalized_evars: coEVarSet
pi_substituted_svars: coSVarSet
pi_uses_kt: bool
pi_framing_patterns: coWfpSet
wfψ: well_formed ψ
pf: ML_proof_system Γ (ϕ₁ ---> ϕ₂)
Hpf1: gset_to_coGset (uses_of_ex_gen Γ (ϕ₁ ---> ϕ₂) pf) ⊆ pi_generalized_evars
Hpf2: gset_to_coGset (uses_of_svar_subst Γ (ϕ₁ ---> ϕ₂) pf) ⊆ pi_substituted_svars
Hpf3: uses_kt pf ==> pi_uses_kt
Hpf4: gset_to_coGset (framing_patterns Γ (ϕ₁ ---> ϕ₂) pf) ⊆ pi_framing_patterns
p0: wfPattern
Hp0: p0 ∈ {[ψ ↾ wfψ]}
F: {p : Pattern | well_formed p = true} → Pattern
HeqF: F = (@sval) Pattern (λ p : Pattern, well_formed p = true)
H3: ψ ↾ wfψ ∈ pi_framing_patterns

p0 ∈ pi_framing_patterns
Σ: Signature
Γ: Theory
ϕ₁, ϕ₂, ψ: Pattern
pi_generalized_evars: coEVarSet
pi_substituted_svars: coSVarSet
pi_uses_kt: bool
pi_framing_patterns: coWfpSet
wfψ: well_formed ψ
pf: ML_proof_system Γ (ϕ₁ ---> ϕ₂)
Hpf1: gset_to_coGset (uses_of_ex_gen Γ (ϕ₁ ---> ϕ₂) pf) ⊆ pi_generalized_evars
Hpf2: gset_to_coGset (uses_of_svar_subst Γ (ϕ₁ ---> ϕ₂) pf) ⊆ pi_substituted_svars
Hpf3: uses_kt pf ==> pi_uses_kt
Hpf4: gset_to_coGset (framing_patterns Γ (ϕ₁ ---> ϕ₂) pf) ⊆ pi_framing_patterns
p0: wfPattern
Hp0: p0 ∈ {[ψ ↾ wfψ]}
H3: ψ ↾ wfψ ∈ pi_framing_patterns

p0 ∈ pi_framing_patterns
Σ: Signature
ψ: Pattern
pi_framing_patterns: coWfpSet
wfψ: well_formed ψ
p0: wfPattern
Hp0: p0 ∈ {[ψ ↾ wfψ]}
H3: ψ ↾ wfψ ∈ pi_framing_patterns

p0 ∈ pi_framing_patterns
set_solver.
Σ: Signature
Γ: Theory
ϕ₁, ϕ₂, ψ: Pattern
pi_generalized_evars: coEVarSet
pi_substituted_svars: coSVarSet
pi_uses_kt: bool
pi_framing_patterns: coWfpSet
wfψ: well_formed ψ
H3: {[ψ ↾ wfψ]} ⊆ pi_framing_patterns
pf: ML_proof_system Γ (ϕ₁ ---> ϕ₂)
Hpf1: gset_to_coGset (uses_of_ex_gen Γ (ϕ₁ ---> ϕ₂) pf) ⊆ pi_generalized_evars
Hpf2: gset_to_coGset (uses_of_svar_subst Γ (ϕ₁ ---> ϕ₂) pf) ⊆ pi_substituted_svars
Hpf3: uses_kt pf ==> pi_uses_kt
Hpf4: gset_to_coGset (framing_patterns Γ (ϕ₁ ---> ϕ₂) pf) ⊆ pi_framing_patterns
p0: wfPattern
Hp0: p0 ∈ framing_patterns Γ (ϕ₁ ---> ϕ₂) pf

p0 ∈ pi_framing_patterns
Σ: Signature
Γ: Theory
ϕ₁, ϕ₂, ψ: Pattern
pi_generalized_evars: coEVarSet
pi_substituted_svars: coSVarSet
pi_uses_kt: bool
pi_framing_patterns: coWfpSet
wfψ: well_formed ψ
H3: {[ψ ↾ wfψ]} ⊆ pi_framing_patterns
pf: ML_proof_system Γ (ϕ₁ ---> ϕ₂)
Hpf1: gset_to_coGset (uses_of_ex_gen Γ (ϕ₁ ---> ϕ₂) pf) ⊆ pi_generalized_evars
Hpf2: gset_to_coGset (uses_of_svar_subst Γ (ϕ₁ ---> ϕ₂) pf) ⊆ pi_substituted_svars
Hpf3: uses_kt pf ==> pi_uses_kt
Hpf4: gset_to_coGset (framing_patterns Γ (ϕ₁ ---> ϕ₂) pf) ⊆ pi_framing_patterns
p0: wfPattern
Hp0: p0 ∈ framing_patterns Γ (ϕ₁ ---> ϕ₂) pf

p0 ∈ pi_framing_patterns
set_solver. } } } Defined.
Σ: Signature
Γ: Theory
ϕ: Pattern

well_formed ϕ → Γ ⊢i ⊥ $ ϕ ---> ⊥ using BasicReasoning
Σ: Signature
Γ: Theory
ϕ: Pattern

well_formed ϕ → Γ ⊢i ⊥ $ ϕ ---> ⊥ using BasicReasoning
Σ: Signature
Γ: Theory
ϕ: Pattern
wfϕ: well_formed ϕ

Γ ⊢i ⊥ $ ϕ ---> ⊥ using BasicReasoning
Σ: Signature
Γ: Theory
ϕ: Pattern
wfϕ: well_formed ϕ

ML_proof_system Γ (⊥ $ ϕ ---> ⊥)
Σ: Signature
Γ: Theory
ϕ: Pattern
wfϕ: well_formed ϕ
ProofInfoMeaning Γ (⊥ $ ϕ ---> ⊥) ?pf BasicReasoning
Σ: Signature
Γ: Theory
ϕ: Pattern
wfϕ: well_formed ϕ

ML_proof_system Γ (⊥ $ ϕ ---> ⊥)
Σ: Signature
Γ: Theory
ϕ: Pattern
wfϕ: well_formed ϕ

well_formed ϕ
exact wfϕ.
Σ: Signature
Γ: Theory
ϕ: Pattern
wfϕ: well_formed ϕ

ProofInfoMeaning Γ (⊥ $ ϕ ---> ⊥) (Prop_bott_left Γ ϕ wfϕ) BasicReasoning
Σ: Signature
Γ: Theory
ϕ: Pattern
wfϕ: well_formed ϕ

ProofInfoMeaning Γ (⊥ $ ϕ ---> ⊥) (Prop_bott_left Γ ϕ wfϕ) BasicReasoning
Σ: Signature
Γ: Theory
ϕ: Pattern
wfϕ: well_formed ϕ

gset_to_coGset ∅ ⊆ ∅
Σ: Signature
Γ: Theory
ϕ: Pattern
wfϕ: well_formed ϕ
gset_to_coGset ∅ ⊆ ∅
Σ: Signature
Γ: Theory
ϕ: Pattern
wfϕ: well_formed ϕ
true
Σ: Signature
Γ: Theory
ϕ: Pattern
wfϕ: well_formed ϕ
gset_to_coGset ∅ ⊆ ∅
Σ: Signature
Γ: Theory
ϕ: Pattern
wfϕ: well_formed ϕ

gset_to_coGset ∅ ⊆ ∅
set_solver.
Σ: Signature
Γ: Theory
ϕ: Pattern
wfϕ: well_formed ϕ

gset_to_coGset ∅ ⊆ ∅
Σ: Signature
Γ: Theory
ϕ: Pattern
wfϕ: well_formed ϕ
true
Σ: Signature
Γ: Theory
ϕ: Pattern
wfϕ: well_formed ϕ
gset_to_coGset ∅ ⊆ ∅
Σ: Signature
Γ: Theory
ϕ: Pattern
wfϕ: well_formed ϕ

gset_to_coGset ∅ ⊆ ∅
set_solver.
Σ: Signature
Γ: Theory
ϕ: Pattern
wfϕ: well_formed ϕ

true
Σ: Signature
Γ: Theory
ϕ: Pattern
wfϕ: well_formed ϕ
gset_to_coGset ∅ ⊆ ∅
Σ: Signature
Γ: Theory
ϕ: Pattern
wfϕ: well_formed ϕ

true
reflexivity.
Σ: Signature
Γ: Theory
ϕ: Pattern
wfϕ: well_formed ϕ

gset_to_coGset ∅ ⊆ ∅
Σ: Signature
Γ: Theory
ϕ: Pattern
wfϕ: well_formed ϕ

gset_to_coGset ∅ ⊆ ∅
apply reflexivity. } } Defined.
Σ: Signature
Γ: Theory
ϕ: Pattern

well_formed ϕ → Γ ⊢i ϕ $ ⊥ ---> ⊥ using BasicReasoning
Σ: Signature
Γ: Theory
ϕ: Pattern

well_formed ϕ → Γ ⊢i ϕ $ ⊥ ---> ⊥ using BasicReasoning
Σ: Signature
Γ: Theory
ϕ: Pattern
wfϕ: well_formed ϕ

Γ ⊢i ϕ $ ⊥ ---> ⊥ using BasicReasoning
Σ: Signature
Γ: Theory
ϕ: Pattern
wfϕ: well_formed ϕ

ML_proof_system Γ (ϕ $ ⊥ ---> ⊥)
Σ: Signature
Γ: Theory
ϕ: Pattern
wfϕ: well_formed ϕ
ProofInfoMeaning Γ (ϕ $ ⊥ ---> ⊥) ?pf BasicReasoning
Σ: Signature
Γ: Theory
ϕ: Pattern
wfϕ: well_formed ϕ

ML_proof_system Γ (ϕ $ ⊥ ---> ⊥)
Σ: Signature
Γ: Theory
ϕ: Pattern
wfϕ: well_formed ϕ

well_formed ϕ
exact wfϕ.
Σ: Signature
Γ: Theory
ϕ: Pattern
wfϕ: well_formed ϕ

ProofInfoMeaning Γ (ϕ $ ⊥ ---> ⊥) (Prop_bott_right Γ ϕ wfϕ) BasicReasoning
Σ: Signature
Γ: Theory
ϕ: Pattern
wfϕ: well_formed ϕ

ProofInfoMeaning Γ (ϕ $ ⊥ ---> ⊥) (Prop_bott_right Γ ϕ wfϕ) BasicReasoning
Σ: Signature
Γ: Theory
ϕ: Pattern
wfϕ: well_formed ϕ

gset_to_coGset ∅ ⊆ ∅
Σ: Signature
Γ: Theory
ϕ: Pattern
wfϕ: well_formed ϕ
gset_to_coGset ∅ ⊆ ∅
Σ: Signature
Γ: Theory
ϕ: Pattern
wfϕ: well_formed ϕ
true
Σ: Signature
Γ: Theory
ϕ: Pattern
wfϕ: well_formed ϕ
gset_to_coGset ∅ ⊆ ∅
Σ: Signature
Γ: Theory
ϕ: Pattern
wfϕ: well_formed ϕ

gset_to_coGset ∅ ⊆ ∅
set_solver.
Σ: Signature
Γ: Theory
ϕ: Pattern
wfϕ: well_formed ϕ

gset_to_coGset ∅ ⊆ ∅
Σ: Signature
Γ: Theory
ϕ: Pattern
wfϕ: well_formed ϕ
true
Σ: Signature
Γ: Theory
ϕ: Pattern
wfϕ: well_formed ϕ
gset_to_coGset ∅ ⊆ ∅
Σ: Signature
Γ: Theory
ϕ: Pattern
wfϕ: well_formed ϕ

gset_to_coGset ∅ ⊆ ∅
set_solver.
Σ: Signature
Γ: Theory
ϕ: Pattern
wfϕ: well_formed ϕ

true
Σ: Signature
Γ: Theory
ϕ: Pattern
wfϕ: well_formed ϕ
gset_to_coGset ∅ ⊆ ∅
Σ: Signature
Γ: Theory
ϕ: Pattern
wfϕ: well_formed ϕ

true
reflexivity.
Σ: Signature
Γ: Theory
ϕ: Pattern
wfϕ: well_formed ϕ

gset_to_coGset ∅ ⊆ ∅
Σ: Signature
Γ: Theory
ϕ: Pattern
wfϕ: well_formed ϕ

gset_to_coGset ∅ ⊆ ∅
apply reflexivity. } } Defined. Arguments Prop_bott_left _ (_%ml) _ : clear implicits. Arguments Prop_bott_right _ (_%ml) _ : clear implicits. Fixpoint frames_of_AC (C : Application_context) : coWfpSet := match C with | box => ∅ | ctx_app_l C' p wfp => {[(exist _ p wfp)]} ∪ (frames_of_AC C') | ctx_app_r p C' wfp => {[(exist _ p wfp)]} ∪ (frames_of_AC C') end. (* TODO rename into Prop_bot_ctx *)
Σ: Signature
Γ: Theory
C: Application_context

Γ ⊢i C.[□↦⊥] ---> ⊥ using (ExGen := ∅, SVSubst := ∅, KT := false, FP := frames_of_AC C)
Σ: Signature
Γ: Theory
C: Application_context

Γ ⊢i C.[□↦⊥] ---> ⊥ using (ExGen := ∅, SVSubst := ∅, KT := false, FP := frames_of_AC C)
Σ: Signature
Γ: Theory
C: Application_context
foC: coWfpSet
HeqfoC: foC = frames_of_AC C

Γ ⊢i C.[□↦⊥] ---> ⊥ using (ExGen := ∅, SVSubst := ∅, KT := false, FP := foC)
Σ: Signature
Γ: Theory
C: Application_context

foC : coWfpSet, foC = frames_of_AC C → Γ ⊢i C.[□↦⊥] ---> ⊥ using (ExGen := ∅, SVSubst := ∅, KT := false, FP := foC)
Σ: Signature
Γ: Theory
foC: coWfpSet
HeqfoC: foC = ∅

Γ ⊢i ⊥ ---> ⊥ using (ExGen := ∅, SVSubst := ∅, KT := false, FP := foC)
Σ: Signature
Γ: Theory
C: Application_context
p: Pattern
Prf: well_formed p
IHC: foC : coWfpSet, foC = frames_of_AC C → Γ ⊢i C.[□↦⊥] ---> ⊥ using (ExGen := ∅, SVSubst := ∅, KT := false, FP := foC)
foC: coWfpSet
HeqfoC: foC = {[p ↾ Prf]} ∪ frames_of_AC C
Γ ⊢i C.[□↦⊥] $ p ---> ⊥ using (ExGen := ∅, SVSubst := ∅, KT := false, FP := foC)
Σ: Signature
Γ: Theory
p: Pattern
C: Application_context
Prf: well_formed p
IHC: foC : coWfpSet, foC = frames_of_AC C → Γ ⊢i C.[□↦⊥] ---> ⊥ using (ExGen := ∅, SVSubst := ∅, KT := false, FP := foC)
foC: coWfpSet
HeqfoC: foC = {[p ↾ Prf]} ∪ frames_of_AC C
Γ ⊢i p $ C.[□↦⊥] ---> ⊥ using (ExGen := ∅, SVSubst := ∅, KT := false, FP := foC)
Σ: Signature
Γ: Theory
foC: coWfpSet
HeqfoC: foC = ∅

Γ ⊢i ⊥ ---> ⊥ using (ExGen := ∅, SVSubst := ∅, KT := false, FP := foC)
Σ: Signature
Γ: Theory
foC: coWfpSet
HeqfoC: foC = ∅

Γ ⊢i ⊥ ---> ⊥ using BasicReasoning
Σ: Signature
Γ: Theory
foC: coWfpSet
HeqfoC: foC = ∅

well_formed ⊥
wf_auto2.
Σ: Signature
Γ: Theory
C: Application_context
p: Pattern
Prf: well_formed p
IHC: foC : coWfpSet, foC = frames_of_AC C → Γ ⊢i C.[□↦⊥] ---> ⊥ using (ExGen := ∅, SVSubst := ∅, KT := false, FP := foC)
foC: coWfpSet
HeqfoC: foC = {[p ↾ Prf]} ∪ frames_of_AC C

Γ ⊢i C.[□↦⊥] $ p ---> ⊥ using (ExGen := ∅, SVSubst := ∅, KT := false, FP := foC)
Σ: Signature
Γ: Theory
C: Application_context
p: Pattern
Prf: well_formed p
IHC: foC : coWfpSet, foC = frames_of_AC C → Γ ⊢i C.[□↦⊥] ---> ⊥ using (ExGen := ∅, SVSubst := ∅, KT := false, FP := foC)
foC: coWfpSet
HeqfoC: foC = {[p ↾ Prf]} ∪ frames_of_AC C

well_formed (C.[□↦⊥] $ p)
Σ: Signature
Γ: Theory
C: Application_context
p: Pattern
Prf: well_formed p
IHC: foC : coWfpSet, foC = frames_of_AC C → Γ ⊢i C.[□↦⊥] ---> ⊥ using (ExGen := ∅, SVSubst := ∅, KT := false, FP := foC)
foC: coWfpSet
HeqfoC: foC = {[p ↾ Prf]} ∪ frames_of_AC C
well_formed ?B
Σ: Signature
Γ: Theory
C: Application_context
p: Pattern
Prf: well_formed p
IHC: foC : coWfpSet, foC = frames_of_AC C → Γ ⊢i C.[□↦⊥] ---> ⊥ using (ExGen := ∅, SVSubst := ∅, KT := false, FP := foC)
foC: coWfpSet
HeqfoC: foC = {[p ↾ Prf]} ∪ frames_of_AC C
well_formed ⊥
Σ: Signature
Γ: Theory
C: Application_context
p: Pattern
Prf: well_formed p
IHC: foC : coWfpSet, foC = frames_of_AC C → Γ ⊢i C.[□↦⊥] ---> ⊥ using (ExGen := ∅, SVSubst := ∅, KT := false, FP := foC)
foC: coWfpSet
HeqfoC: foC = {[p ↾ Prf]} ∪ frames_of_AC C
Γ ⊢i C.[□↦⊥] $ p ---> ?B using (ExGen := ∅, SVSubst := ∅, KT := false, FP := foC)
Σ: Signature
Γ: Theory
C: Application_context
p: Pattern
Prf: well_formed p
IHC: foC : coWfpSet, foC = frames_of_AC C → Γ ⊢i C.[□↦⊥] ---> ⊥ using (ExGen := ∅, SVSubst := ∅, KT := false, FP := foC)
foC: coWfpSet
HeqfoC: foC = {[p ↾ Prf]} ∪ frames_of_AC C
Γ ⊢i ?B ---> ⊥ using (ExGen := ∅, SVSubst := ∅, KT := false, FP := foC)
Σ: Signature
Γ: Theory
C: Application_context
p: Pattern
Prf: well_formed p
IHC: foC : coWfpSet, foC = frames_of_AC C → Γ ⊢i C.[□↦⊥] ---> ⊥ using (ExGen := ∅, SVSubst := ∅, KT := false, FP := foC)
foC: coWfpSet
HeqfoC: foC = {[p ↾ Prf]} ∪ frames_of_AC C

Γ ⊢i ?B ---> ⊥ using (ExGen := ∅, SVSubst := ∅, KT := false, FP := foC)
Σ: Signature
Γ: Theory
C: Application_context
p: Pattern
Prf: well_formed p
IHC: foC : coWfpSet, foC = frames_of_AC C → Γ ⊢i C.[□↦⊥] ---> ⊥ using (ExGen := ∅, SVSubst := ∅, KT := false, FP := foC)
foC: coWfpSet
HeqfoC: foC = {[p ↾ Prf]} ∪ frames_of_AC C

Γ ⊢i ?B ---> ⊥ using BasicReasoning
apply (Prop_bott_left Γ p ltac:(wf_auto2)).
Σ: Signature
Γ: Theory
C: Application_context
p: Pattern
Prf: well_formed p
IHC: foC : coWfpSet, foC = frames_of_AC C → Γ ⊢i C.[□↦⊥] ---> ⊥ using (ExGen := ∅, SVSubst := ∅, KT := false, FP := foC)
foC: coWfpSet
HeqfoC: foC = {[p ↾ Prf]} ∪ frames_of_AC C

well_formed (C.[□↦⊥] $ p)
Σ: Signature
Γ: Theory
C: Application_context
p: Pattern
Prf: well_formed p
IHC: foC : coWfpSet, foC = frames_of_AC C → Γ ⊢i C.[□↦⊥] ---> ⊥ using (ExGen := ∅, SVSubst := ∅, KT := false, FP := foC)
foC: coWfpSet
HeqfoC: foC = {[p ↾ Prf]} ∪ frames_of_AC C
well_formed (⊥ $ p)
Σ: Signature
Γ: Theory
C: Application_context
p: Pattern
Prf: well_formed p
IHC: foC : coWfpSet, foC = frames_of_AC C → Γ ⊢i C.[□↦⊥] ---> ⊥ using (ExGen := ∅, SVSubst := ∅, KT := false, FP := foC)
foC: coWfpSet
HeqfoC: foC = {[p ↾ Prf]} ∪ frames_of_AC C
well_formed ⊥
Σ: Signature
Γ: Theory
C: Application_context
p: Pattern
Prf: well_formed p
IHC: foC : coWfpSet, foC = frames_of_AC C → Γ ⊢i C.[□↦⊥] ---> ⊥ using (ExGen := ∅, SVSubst := ∅, KT := false, FP := foC)
foC: coWfpSet
HeqfoC: foC = {[p ↾ Prf]} ∪ frames_of_AC C
Γ ⊢i C.[□↦⊥] $ p ---> ⊥ $ p using (ExGen := ∅, SVSubst := ∅, KT := false, FP := foC)
Σ: Signature
Γ: Theory
C: Application_context
p: Pattern
Prf: well_formed p
IHC: foC : coWfpSet, foC = frames_of_AC C → Γ ⊢i C.[□↦⊥] ---> ⊥ using (ExGen := ∅, SVSubst := ∅, KT := false, FP := foC)
foC: coWfpSet
HeqfoC: foC = {[p ↾ Prf]} ∪ frames_of_AC C

Γ ⊢i C.[□↦⊥] $ p ---> ⊥ $ p using (ExGen := ∅, SVSubst := ∅, KT := false, FP := foC)
Σ: Signature
Γ: Theory
C: Application_context
p: Pattern
Prf: well_formed p
IHC: foC : coWfpSet, foC = frames_of_AC C → Γ ⊢i C.[□↦⊥] ---> ⊥ using (ExGen := ∅, SVSubst := ∅, KT := false, FP := foC)
foC: coWfpSet
HeqfoC: foC = {[p ↾ Prf]} ∪ frames_of_AC C

Γ ⊢i C.[□↦⊥] $ p ---> ⊥ $ p using (ExGen := ∅, SVSubst := ∅, KT := false, FP := foC)
Σ: Signature
Γ: Theory
C: Application_context
p: Pattern
Prf: well_formed p
IHC: foC : coWfpSet, foC = frames_of_AC C → Γ ⊢i C.[□↦⊥] ---> ⊥ using (ExGen := ∅, SVSubst := ∅, KT := false, FP := foC)

Γ ⊢i C.[□↦⊥] $ p ---> ⊥ $ p using (ExGen := ∅, SVSubst := ∅, KT := false, FP := {[p ↾ Prf]} ∪ frames_of_AC C)
Σ: Signature
Γ: Theory
C: Application_context
p: Pattern
Prf: well_formed p
IHC: foC : coWfpSet, foC = frames_of_AC C → Γ ⊢i C.[□↦⊥] ---> ⊥ using (ExGen := ∅, SVSubst := ∅, KT := false, FP := foC)

ProofInfoLe (ExGen := ?evs, SVSubst := ?svs, KT := ?kt, FP := ?fp) (ExGen := ∅, SVSubst := ∅, KT := false, FP := {[p ↾ Prf]} ∪ frames_of_AC C)
Σ: Signature
Γ: Theory
C: Application_context
p: Pattern
Prf: well_formed p
IHC: foC : coWfpSet, foC = frames_of_AC C → Γ ⊢i C.[□↦⊥] ---> ⊥ using (ExGen := ∅, SVSubst := ∅, KT := false, FP := foC)
Γ ⊢i C.[□↦⊥] $ p ---> ⊥ $ p using (ExGen := ?evs, SVSubst := ?svs, KT := ?kt, FP := ?fp)
Σ: Signature
Γ: Theory
C: Application_context
p: Pattern
Prf: well_formed p
IHC: foC : coWfpSet, foC = frames_of_AC C → Γ ⊢i C.[□↦⊥] ---> ⊥ using (ExGen := ∅, SVSubst := ∅, KT := false, FP := foC)

ProofInfoLe (ExGen := ?evs, SVSubst := ?svs, KT := ?kt, FP := ?fp) (ExGen := ∅, SVSubst := ∅, KT := false, FP := {[p ↾ Prf]} ∪ frames_of_AC C)
Σ: Signature
Γ: Theory
C: Application_context
p: Pattern
Prf: well_formed p
IHC: foC : coWfpSet, foC = frames_of_AC C → Γ ⊢i C.[□↦⊥] ---> ⊥ using (ExGen := ∅, SVSubst := ∅, KT := false, FP := foC)
ProofInfoLe (ExGen := ∅, SVSubst := ∅, KT := false, FP := {[p ↾ Prf]}) (ExGen := ?evs, SVSubst := ?svs, KT := ?kt, FP := ?fp)
Σ: Signature
Γ: Theory
C: Application_context
p: Pattern
Prf: well_formed p
IHC: foC : coWfpSet, foC = frames_of_AC C → Γ ⊢i C.[□↦⊥] ---> ⊥ using (ExGen := ∅, SVSubst := ∅, KT := false, FP := foC)
Γ ⊢i C.[□↦⊥] ---> ⊥ using (ExGen := ?evs, SVSubst := ?svs, KT := ?kt, FP := ?fp)
Σ: Signature
Γ: Theory
C: Application_context
p: Pattern
Prf: well_formed p
IHC: foC : coWfpSet, foC = frames_of_AC C → Γ ⊢i C.[□↦⊥] ---> ⊥ using (ExGen := ∅, SVSubst := ∅, KT := false, FP := foC)

ProofInfoLe (ExGen := ∅, SVSubst := ∅, KT := false, FP := {[p ↾ Prf]}) (ExGen := ∅, SVSubst := ∅, KT := false, FP := {[p ↾ Prf]} ∪ frames_of_AC C)
Σ: Signature
Γ: Theory
C: Application_context
p: Pattern
Prf: well_formed p
IHC: foC : coWfpSet, foC = frames_of_AC C → Γ ⊢i C.[□↦⊥] ---> ⊥ using (ExGen := ∅, SVSubst := ∅, KT := false, FP := foC)
Γ ⊢i C.[□↦⊥] ---> ⊥ using (ExGen := ∅, SVSubst := ∅, KT := false, FP := {[p ↾ Prf]} ∪ frames_of_AC C)
Σ: Signature
Γ: Theory
C: Application_context
p: Pattern
Prf: well_formed p
IHC: foC : coWfpSet, foC = frames_of_AC C → Γ ⊢i C.[□↦⊥] ---> ⊥ using (ExGen := ∅, SVSubst := ∅, KT := false, FP := foC)

ProofInfoLe (ExGen := ∅, SVSubst := ∅, KT := false, FP := {[p ↾ Prf]}) (ExGen := ∅, SVSubst := ∅, KT := false, FP := {[p ↾ Prf]} ∪ frames_of_AC C)
Σ: Signature
Γ: Theory
C: Application_context
p: Pattern
Prf: well_formed p
IHC: foC : coWfpSet, foC = frames_of_AC C → Γ ⊢i C.[□↦⊥] ---> ⊥ using (ExGen := ∅, SVSubst := ∅, KT := false, FP := foC)

∅ ⊆ ∅
Σ: Signature
Γ: Theory
C: Application_context
p: Pattern
Prf: well_formed p
IHC: foC : coWfpSet, foC = frames_of_AC C → Γ ⊢i C.[□↦⊥] ---> ⊥ using (ExGen := ∅, SVSubst := ∅, KT := false, FP := foC)
∅ ⊆ ∅
Σ: Signature
Γ: Theory
C: Application_context
p: Pattern
Prf: well_formed p
IHC: foC : coWfpSet, foC = frames_of_AC C → Γ ⊢i C.[□↦⊥] ---> ⊥ using (ExGen := ∅, SVSubst := ∅, KT := false, FP := foC)
false ==> false
Σ: Signature
Γ: Theory
C: Application_context
p: Pattern
Prf: well_formed p
IHC: foC : coWfpSet, foC = frames_of_AC C → Γ ⊢i C.[□↦⊥] ---> ⊥ using (ExGen := ∅, SVSubst := ∅, KT := false, FP := foC)
{[p ↾ Prf]} ⊆ {[p ↾ Prf]} ∪ frames_of_AC C
Σ: Signature
Γ: Theory
C: Application_context
p: Pattern
Prf: well_formed p
IHC: foC : coWfpSet, foC = frames_of_AC C → Γ ⊢i C.[□↦⊥] ---> ⊥ using (ExGen := ∅, SVSubst := ∅, KT := false, FP := foC)

∅ ⊆ ∅
apply reflexivity.
Σ: Signature
Γ: Theory
C: Application_context
p: Pattern
Prf: well_formed p
IHC: foC : coWfpSet, foC = frames_of_AC C → Γ ⊢i C.[□↦⊥] ---> ⊥ using (ExGen := ∅, SVSubst := ∅, KT := false, FP := foC)

∅ ⊆ ∅
Σ: Signature
Γ: Theory
C: Application_context
p: Pattern
Prf: well_formed p
IHC: foC : coWfpSet, foC = frames_of_AC C → Γ ⊢i C.[□↦⊥] ---> ⊥ using (ExGen := ∅, SVSubst := ∅, KT := false, FP := foC)
false ==> false
Σ: Signature
Γ: Theory
C: Application_context
p: Pattern
Prf: well_formed p
IHC: foC : coWfpSet, foC = frames_of_AC C → Γ ⊢i C.[□↦⊥] ---> ⊥ using (ExGen := ∅, SVSubst := ∅, KT := false, FP := foC)
{[p ↾ Prf]} ⊆ {[p ↾ Prf]} ∪ frames_of_AC C
Σ: Signature
Γ: Theory
C: Application_context
p: Pattern
Prf: well_formed p
IHC: foC : coWfpSet, foC = frames_of_AC C → Γ ⊢i C.[□↦⊥] ---> ⊥ using (ExGen := ∅, SVSubst := ∅, KT := false, FP := foC)

∅ ⊆ ∅
apply reflexivity.
Σ: Signature
Γ: Theory
C: Application_context
p: Pattern
Prf: well_formed p
IHC: foC : coWfpSet, foC = frames_of_AC C → Γ ⊢i C.[□↦⊥] ---> ⊥ using (ExGen := ∅, SVSubst := ∅, KT := false, FP := foC)

false ==> false
Σ: Signature
Γ: Theory
C: Application_context
p: Pattern
Prf: well_formed p
IHC: foC : coWfpSet, foC = frames_of_AC C → Γ ⊢i C.[□↦⊥] ---> ⊥ using (ExGen := ∅, SVSubst := ∅, KT := false, FP := foC)
{[p ↾ Prf]} ⊆ {[p ↾ Prf]} ∪ frames_of_AC C
Σ: Signature
Γ: Theory
C: Application_context
p: Pattern
Prf: well_formed p
IHC: foC : coWfpSet, foC = frames_of_AC C → Γ ⊢i C.[□↦⊥] ---> ⊥ using (ExGen := ∅, SVSubst := ∅, KT := false, FP := foC)

false ==> false
reflexivity.
Σ: Signature
Γ: Theory
C: Application_context
p: Pattern
Prf: well_formed p
IHC: foC : coWfpSet, foC = frames_of_AC C → Γ ⊢i C.[□↦⊥] ---> ⊥ using (ExGen := ∅, SVSubst := ∅, KT := false, FP := foC)

{[p ↾ Prf]} ⊆ {[p ↾ Prf]} ∪ frames_of_AC C
Σ: Signature
Γ: Theory
C: Application_context
p: Pattern
Prf: well_formed p
IHC: foC : coWfpSet, foC = frames_of_AC C → Γ ⊢i C.[□↦⊥] ---> ⊥ using (ExGen := ∅, SVSubst := ∅, KT := false, FP := foC)

{[p ↾ Prf]} ⊆ {[p ↾ Prf]} ∪ frames_of_AC C
Σ: Signature
C: Application_context
p: Pattern
Prf: well_formed p

{[p ↾ Prf]} ⊆ {[p ↾ Prf]} ∪ frames_of_AC C
set_solver. }
Σ: Signature
Γ: Theory
C: Application_context
p: Pattern
Prf: well_formed p
IHC: foC : coWfpSet, foC = frames_of_AC C → Γ ⊢i C.[□↦⊥] ---> ⊥ using (ExGen := ∅, SVSubst := ∅, KT := false, FP := foC)

Γ ⊢i C.[□↦⊥] ---> ⊥ using (ExGen := ∅, SVSubst := ∅, KT := false, FP := {[p ↾ Prf]} ∪ frames_of_AC C)
Σ: Signature
Γ: Theory
C: Application_context
p: Pattern
Prf: well_formed p
IHC: foC : coWfpSet, foC = frames_of_AC C → Γ ⊢i C.[□↦⊥] ---> ⊥ using (ExGen := ∅, SVSubst := ∅, KT := false, FP := foC)

ProofInfoLe (ExGen := ?evs, SVSubst := ?svs, KT := ?kt, FP := ?fp) (ExGen := ∅, SVSubst := ∅, KT := false, FP := {[p ↾ Prf]} ∪ frames_of_AC C)
Σ: Signature
Γ: Theory
C: Application_context
p: Pattern
Prf: well_formed p
IHC: foC : coWfpSet, foC = frames_of_AC C → Γ ⊢i C.[□↦⊥] ---> ⊥ using (ExGen := ∅, SVSubst := ∅, KT := false, FP := foC)
Γ ⊢i C.[□↦⊥] ---> ⊥ using (ExGen := ?evs, SVSubst := ?svs, KT := ?kt, FP := ?fp)
Σ: Signature
Γ: Theory
C: Application_context
p: Pattern
Prf: well_formed p
IHC: foC : coWfpSet, foC = frames_of_AC C → Γ ⊢i C.[□↦⊥] ---> ⊥ using (ExGen := ∅, SVSubst := ∅, KT := false, FP := foC)

ProofInfoLe (ExGen := ∅, SVSubst := ∅, KT := false, FP := ?fp) (ExGen := ∅, SVSubst := ∅, KT := false, FP := {[p ↾ Prf]} ∪ frames_of_AC C)
Σ: Signature
Γ: Theory
C: Application_context
p: Pattern
Prf: well_formed p
IHC: foC : coWfpSet, foC = frames_of_AC C → Γ ⊢i C.[□↦⊥] ---> ⊥ using (ExGen := ∅, SVSubst := ∅, KT := false, FP := foC)
?fp = frames_of_AC C
Σ: Signature
Γ: Theory
C: Application_context
p: Pattern
Prf: well_formed p
IHC: foC : coWfpSet, foC = frames_of_AC C → Γ ⊢i C.[□↦⊥] ---> ⊥ using (ExGen := ∅, SVSubst := ∅, KT := false, FP := foC)

ProofInfoLe (ExGen := ∅, SVSubst := ∅, KT := false, FP := frames_of_AC C) (ExGen := ∅, SVSubst := ∅, KT := false, FP := {[p ↾ Prf]} ∪ frames_of_AC C)
Σ: Signature
Γ: Theory
C: Application_context
p: Pattern
Prf: well_formed p
IHC: foC : coWfpSet, foC = frames_of_AC C → Γ ⊢i C.[□↦⊥] ---> ⊥ using (ExGen := ∅, SVSubst := ∅, KT := false, FP := foC)

∅ ⊆ ∅
Σ: Signature
Γ: Theory
C: Application_context
p: Pattern
Prf: well_formed p
IHC: foC : coWfpSet, foC = frames_of_AC C → Γ ⊢i C.[□↦⊥] ---> ⊥ using (ExGen := ∅, SVSubst := ∅, KT := false, FP := foC)
∅ ⊆ ∅
Σ: Signature
Γ: Theory
C: Application_context
p: Pattern
Prf: well_formed p
IHC: foC : coWfpSet, foC = frames_of_AC C → Γ ⊢i C.[□↦⊥] ---> ⊥ using (ExGen := ∅, SVSubst := ∅, KT := false, FP := foC)
false ==> false
Σ: Signature
Γ: Theory
C: Application_context
p: Pattern
Prf: well_formed p
IHC: foC : coWfpSet, foC = frames_of_AC C → Γ ⊢i C.[□↦⊥] ---> ⊥ using (ExGen := ∅, SVSubst := ∅, KT := false, FP := foC)
frames_of_AC C ⊆ {[p ↾ Prf]} ∪ frames_of_AC C
Σ: Signature
Γ: Theory
C: Application_context
p: Pattern
Prf: well_formed p
IHC: foC : coWfpSet, foC = frames_of_AC C → Γ ⊢i C.[□↦⊥] ---> ⊥ using (ExGen := ∅, SVSubst := ∅, KT := false, FP := foC)

∅ ⊆ ∅
apply reflexivity.
Σ: Signature
Γ: Theory
C: Application_context
p: Pattern
Prf: well_formed p
IHC: foC : coWfpSet, foC = frames_of_AC C → Γ ⊢i C.[□↦⊥] ---> ⊥ using (ExGen := ∅, SVSubst := ∅, KT := false, FP := foC)

∅ ⊆ ∅
Σ: Signature
Γ: Theory
C: Application_context
p: Pattern
Prf: well_formed p
IHC: foC : coWfpSet, foC = frames_of_AC C → Γ ⊢i C.[□↦⊥] ---> ⊥ using (ExGen := ∅, SVSubst := ∅, KT := false, FP := foC)
false ==> false
Σ: Signature
Γ: Theory
C: Application_context
p: Pattern
Prf: well_formed p
IHC: foC : coWfpSet, foC = frames_of_AC C → Γ ⊢i C.[□↦⊥] ---> ⊥ using (ExGen := ∅, SVSubst := ∅, KT := false, FP := foC)
frames_of_AC C ⊆ {[p ↾ Prf]} ∪ frames_of_AC C
Σ: Signature
Γ: Theory
C: Application_context
p: Pattern
Prf: well_formed p
IHC: foC : coWfpSet, foC = frames_of_AC C → Γ ⊢i C.[□↦⊥] ---> ⊥ using (ExGen := ∅, SVSubst := ∅, KT := false, FP := foC)

∅ ⊆ ∅
apply reflexivity.
Σ: Signature
Γ: Theory
C: Application_context
p: Pattern
Prf: well_formed p
IHC: foC : coWfpSet, foC = frames_of_AC C → Γ ⊢i C.[□↦⊥] ---> ⊥ using (ExGen := ∅, SVSubst := ∅, KT := false, FP := foC)

false ==> false
Σ: Signature
Γ: Theory
C: Application_context
p: Pattern
Prf: well_formed p
IHC: foC : coWfpSet, foC = frames_of_AC C → Γ ⊢i C.[□↦⊥] ---> ⊥ using (ExGen := ∅, SVSubst := ∅, KT := false, FP := foC)
frames_of_AC C ⊆ {[p ↾ Prf]} ∪ frames_of_AC C
Σ: Signature
Γ: Theory
C: Application_context
p: Pattern
Prf: well_formed p
IHC: foC : coWfpSet, foC = frames_of_AC C → Γ ⊢i C.[□↦⊥] ---> ⊥ using (ExGen := ∅, SVSubst := ∅, KT := false, FP := foC)

false ==> false
reflexivity.
Σ: Signature
Γ: Theory
C: Application_context
p: Pattern
Prf: well_formed p
IHC: foC : coWfpSet, foC = frames_of_AC C → Γ ⊢i C.[□↦⊥] ---> ⊥ using (ExGen := ∅, SVSubst := ∅, KT := false, FP := foC)

frames_of_AC C ⊆ {[p ↾ Prf]} ∪ frames_of_AC C
Σ: Signature
Γ: Theory
C: Application_context
p: Pattern
Prf: well_formed p
IHC: foC : coWfpSet, foC = frames_of_AC C → Γ ⊢i C.[□↦⊥] ---> ⊥ using (ExGen := ∅, SVSubst := ∅, KT := false, FP := foC)

frames_of_AC C ⊆ {[p ↾ Prf]} ∪ frames_of_AC C
Σ: Signature
C: Application_context
p: Pattern
Prf: well_formed p

frames_of_AC C ⊆ {[p ↾ Prf]} ∪ frames_of_AC C
set_solver. }
Σ: Signature
Γ: Theory
C: Application_context
p: Pattern
Prf: well_formed p
IHC: foC : coWfpSet, foC = frames_of_AC C → Γ ⊢i C.[□↦⊥] ---> ⊥ using (ExGen := ∅, SVSubst := ∅, KT := false, FP := foC)
foC: coWfpSet
HeqfoC: foC = {[p ↾ Prf]} ∪ frames_of_AC C

well_formed (C.[□↦⊥] $ p)
Σ: Signature
Γ: Theory
C: Application_context
p: Pattern
Prf: well_formed p
IHC: foC : coWfpSet, foC = frames_of_AC C → Γ ⊢i C.[□↦⊥] ---> ⊥ using (ExGen := ∅, SVSubst := ∅, KT := false, FP := foC)
foC: coWfpSet
HeqfoC: foC = {[p ↾ Prf]} ∪ frames_of_AC C
well_formed (⊥ $ p)
Σ: Signature
Γ: Theory
C: Application_context
p: Pattern
Prf: well_formed p
IHC: foC : coWfpSet, foC = frames_of_AC C → Γ ⊢i C.[□↦⊥] ---> ⊥ using (ExGen := ∅, SVSubst := ∅, KT := false, FP := foC)
foC: coWfpSet
HeqfoC: foC = {[p ↾ Prf]} ∪ frames_of_AC C
well_formed ⊥
Falling back on (well_formed_xy 0 0 C.[□↦⊥] = true)
Σ: Signature
Γ: Theory
p: Pattern
C: Application_context
Prf: well_formed p
IHC: foC : coWfpSet, foC = frames_of_AC C → Γ ⊢i C.[□↦⊥] ---> ⊥ using (ExGen := ∅, SVSubst := ∅, KT := false, FP := foC)
foC: coWfpSet
HeqfoC: foC = {[p ↾ Prf]} ∪ frames_of_AC C

Γ ⊢i p $ C.[□↦⊥] ---> ⊥ using (ExGen := ∅, SVSubst := ∅, KT := false, FP := foC)
Σ: Signature
Γ: Theory
p: Pattern
C: Application_context
Prf: well_formed p
IHC: foC : coWfpSet, foC = frames_of_AC C → Γ ⊢i C.[□↦⊥] ---> ⊥ using (ExGen := ∅, SVSubst := ∅, KT := false, FP := foC)
foC: coWfpSet
HeqfoC: foC = {[p ↾ Prf]} ∪ frames_of_AC C

well_formed (p $ C.[□↦⊥])
Σ: Signature
Γ: Theory
p: Pattern
C: Application_context
Prf: well_formed p
IHC: foC : coWfpSet, foC = frames_of_AC C → Γ ⊢i C.[□↦⊥] ---> ⊥ using (ExGen := ∅, SVSubst := ∅, KT := false, FP := foC)
foC: coWfpSet
HeqfoC: foC = {[p ↾ Prf]} ∪ frames_of_AC C
well_formed ?B
Σ: Signature
Γ: Theory
p: Pattern
C: Application_context
Prf: well_formed p
IHC: foC : coWfpSet, foC = frames_of_AC C → Γ ⊢i C.[□↦⊥] ---> ⊥ using (ExGen := ∅, SVSubst := ∅, KT := false, FP := foC)
foC: coWfpSet
HeqfoC: foC = {[p ↾ Prf]} ∪ frames_of_AC C
well_formed ⊥
Σ: Signature
Γ: Theory
p: Pattern
C: Application_context
Prf: well_formed p
IHC: foC : coWfpSet, foC = frames_of_AC C → Γ ⊢i C.[□↦⊥] ---> ⊥ using (ExGen := ∅, SVSubst := ∅, KT := false, FP := foC)
foC: coWfpSet
HeqfoC: foC = {[p ↾ Prf]} ∪ frames_of_AC C
Γ ⊢i p $ C.[□↦⊥] ---> ?B using (ExGen := ∅, SVSubst := ∅, KT := false, FP := foC)
Σ: Signature
Γ: Theory
p: Pattern
C: Application_context
Prf: well_formed p
IHC: foC : coWfpSet, foC = frames_of_AC C → Γ ⊢i C.[□↦⊥] ---> ⊥ using (ExGen := ∅, SVSubst := ∅, KT := false, FP := foC)
foC: coWfpSet
HeqfoC: foC = {[p ↾ Prf]} ∪ frames_of_AC C
Γ ⊢i ?B ---> ⊥ using (ExGen := ∅, SVSubst := ∅, KT := false, FP := foC)
Σ: Signature
Γ: Theory
p: Pattern
C: Application_context
Prf: well_formed p
IHC: foC : coWfpSet, foC = frames_of_AC C → Γ ⊢i C.[□↦⊥] ---> ⊥ using (ExGen := ∅, SVSubst := ∅, KT := false, FP := foC)
foC: coWfpSet
HeqfoC: foC = {[p ↾ Prf]} ∪ frames_of_AC C

Γ ⊢i ?B ---> ⊥ using (ExGen := ∅, SVSubst := ∅, KT := false, FP := foC)
Σ: Signature
Γ: Theory
p: Pattern
C: Application_context
Prf: well_formed p
IHC: foC : coWfpSet, foC = frames_of_AC C → Γ ⊢i C.[□↦⊥] ---> ⊥ using (ExGen := ∅, SVSubst := ∅, KT := false, FP := foC)
foC: coWfpSet
HeqfoC: foC = {[p ↾ Prf]} ∪ frames_of_AC C

Γ ⊢i ?B ---> ⊥ using BasicReasoning
apply (Prop_bott_right Γ p ltac:(wf_auto2)).
Σ: Signature
Γ: Theory
p: Pattern
C: Application_context
Prf: well_formed p
IHC: foC : coWfpSet, foC = frames_of_AC C → Γ ⊢i C.[□↦⊥] ---> ⊥ using (ExGen := ∅, SVSubst := ∅, KT := false, FP := foC)
foC: coWfpSet
HeqfoC: foC = {[p ↾ Prf]} ∪ frames_of_AC C

well_formed (p $ C.[□↦⊥])
Σ: Signature
Γ: Theory
p: Pattern
C: Application_context
Prf: well_formed p
IHC: foC : coWfpSet, foC = frames_of_AC C → Γ ⊢i C.[□↦⊥] ---> ⊥ using (ExGen := ∅, SVSubst := ∅, KT := false, FP := foC)
foC: coWfpSet
HeqfoC: foC = {[p ↾ Prf]} ∪ frames_of_AC C
well_formed (p $ ⊥)
Σ: Signature
Γ: Theory
p: Pattern
C: Application_context
Prf: well_formed p
IHC: foC : coWfpSet, foC = frames_of_AC C → Γ ⊢i C.[□↦⊥] ---> ⊥ using (ExGen := ∅, SVSubst := ∅, KT := false, FP := foC)
foC: coWfpSet
HeqfoC: foC = {[p ↾ Prf]} ∪ frames_of_AC C
well_formed ⊥
Σ: Signature
Γ: Theory
p: Pattern
C: Application_context
Prf: well_formed p
IHC: foC : coWfpSet, foC = frames_of_AC C → Γ ⊢i C.[□↦⊥] ---> ⊥ using (ExGen := ∅, SVSubst := ∅, KT := false, FP := foC)
foC: coWfpSet
HeqfoC: foC = {[p ↾ Prf]} ∪ frames_of_AC C
Γ ⊢i p $ C.[□↦⊥] ---> p $ ⊥ using (ExGen := ∅, SVSubst := ∅, KT := false, FP := foC)
Σ: Signature
Γ: Theory
p: Pattern
C: Application_context
Prf: well_formed p
IHC: foC : coWfpSet, foC = frames_of_AC C → Γ ⊢i C.[□↦⊥] ---> ⊥ using (ExGen := ∅, SVSubst := ∅, KT := false, FP := foC)
foC: coWfpSet
HeqfoC: foC = {[p ↾ Prf]} ∪ frames_of_AC C

Γ ⊢i p $ C.[□↦⊥] ---> p $ ⊥ using (ExGen := ∅, SVSubst := ∅, KT := false, FP := foC)
Σ: Signature
Γ: Theory
p: Pattern
C: Application_context
Prf: well_formed p
IHC: foC : coWfpSet, foC = frames_of_AC C → Γ ⊢i C.[□↦⊥] ---> ⊥ using (ExGen := ∅, SVSubst := ∅, KT := false, FP := foC)
foC: coWfpSet
HeqfoC: foC = {[p ↾ Prf]} ∪ frames_of_AC C

Γ ⊢i p $ C.[□↦⊥] ---> p $ ⊥ using (ExGen := ∅, SVSubst := ∅, KT := false, FP := foC)
Σ: Signature
Γ: Theory
p: Pattern
C: Application_context
Prf: well_formed p
IHC: foC : coWfpSet, foC = frames_of_AC C → Γ ⊢i C.[□↦⊥] ---> ⊥ using (ExGen := ∅, SVSubst := ∅, KT := false, FP := foC)

Γ ⊢i p $ C.[□↦⊥] ---> p $ ⊥ using (ExGen := ∅, SVSubst := ∅, KT := false, FP := {[p ↾ Prf]} ∪ frames_of_AC C)
Σ: Signature
Γ: Theory
p: Pattern
C: Application_context
Prf: well_formed p
IHC: foC : coWfpSet, foC = frames_of_AC C → Γ ⊢i C.[□↦⊥] ---> ⊥ using (ExGen := ∅, SVSubst := ∅, KT := false, FP := foC)

ProofInfoLe (ExGen := ?evs, SVSubst := ?svs, KT := ?kt, FP := ?fp) (ExGen := ∅, SVSubst := ∅, KT := false, FP := {[p ↾ Prf]} ∪ frames_of_AC C)
Σ: Signature
Γ: Theory
p: Pattern
C: Application_context
Prf: well_formed p
IHC: foC : coWfpSet, foC = frames_of_AC C → Γ ⊢i C.[□↦⊥] ---> ⊥ using (ExGen := ∅, SVSubst := ∅, KT := false, FP := foC)
Γ ⊢i p $ C.[□↦⊥] ---> p $ ⊥ using (ExGen := ?evs, SVSubst := ?svs, KT := ?kt, FP := ?fp)
Σ: Signature
Γ: Theory
p: Pattern
C: Application_context
Prf: well_formed p
IHC: foC : coWfpSet, foC = frames_of_AC C → Γ ⊢i C.[□↦⊥] ---> ⊥ using (ExGen := ∅, SVSubst := ∅, KT := false, FP := foC)

ProofInfoLe (ExGen := ?evs, SVSubst := ?svs, KT := ?kt, FP := ?fp) (ExGen := ∅, SVSubst := ∅, KT := false, FP := {[p ↾ Prf]} ∪ frames_of_AC C)
Σ: Signature
Γ: Theory
p: Pattern
C: Application_context
Prf: well_formed p
IHC: foC : coWfpSet, foC = frames_of_AC C → Γ ⊢i C.[□↦⊥] ---> ⊥ using (ExGen := ∅, SVSubst := ∅, KT := false, FP := foC)
ProofInfoLe (ExGen := ∅, SVSubst := ∅, KT := false, FP := {[p ↾ Prf]}) (ExGen := ?evs, SVSubst := ?svs, KT := ?kt, FP := ?fp)
Σ: Signature
Γ: Theory
p: Pattern
C: Application_context
Prf: well_formed p
IHC: foC : coWfpSet, foC = frames_of_AC C → Γ ⊢i C.[□↦⊥] ---> ⊥ using (ExGen := ∅, SVSubst := ∅, KT := false, FP := foC)
Γ ⊢i C.[□↦⊥] ---> ⊥ using (ExGen := ?evs, SVSubst := ?svs, KT := ?kt, FP := ?fp)
Σ: Signature
Γ: Theory
p: Pattern
C: Application_context
Prf: well_formed p
IHC: foC : coWfpSet, foC = frames_of_AC C → Γ ⊢i C.[□↦⊥] ---> ⊥ using (ExGen := ∅, SVSubst := ∅, KT := false, FP := foC)

ProofInfoLe (ExGen := ∅, SVSubst := ∅, KT := false, FP := {[p ↾ Prf]}) (ExGen := ∅, SVSubst := ∅, KT := false, FP := {[p ↾ Prf]} ∪ frames_of_AC C)
Σ: Signature
Γ: Theory
p: Pattern
C: Application_context
Prf: well_formed p
IHC: foC : coWfpSet, foC = frames_of_AC C → Γ ⊢i C.[□↦⊥] ---> ⊥ using (ExGen := ∅, SVSubst := ∅, KT := false, FP := foC)
Γ ⊢i C.[□↦⊥] ---> ⊥ using (ExGen := ∅, SVSubst := ∅, KT := false, FP := {[p ↾ Prf]} ∪ frames_of_AC C)
Σ: Signature
Γ: Theory
p: Pattern
C: Application_context
Prf: well_formed p
IHC: foC : coWfpSet, foC = frames_of_AC C → Γ ⊢i C.[□↦⊥] ---> ⊥ using (ExGen := ∅, SVSubst := ∅, KT := false, FP := foC)

ProofInfoLe (ExGen := ∅, SVSubst := ∅, KT := false, FP := {[p ↾ Prf]}) (ExGen := ∅, SVSubst := ∅, KT := false, FP := {[p ↾ Prf]} ∪ frames_of_AC C)
Σ: Signature
Γ: Theory
p: Pattern
C: Application_context
Prf: well_formed p
IHC: foC : coWfpSet, foC = frames_of_AC C → Γ ⊢i C.[□↦⊥] ---> ⊥ using (ExGen := ∅, SVSubst := ∅, KT := false, FP := foC)

∅ ⊆ ∅
Σ: Signature
Γ: Theory
p: Pattern
C: Application_context
Prf: well_formed p
IHC: foC : coWfpSet, foC = frames_of_AC C → Γ ⊢i C.[□↦⊥] ---> ⊥ using (ExGen := ∅, SVSubst := ∅, KT := false, FP := foC)
∅ ⊆ ∅
Σ: Signature
Γ: Theory
p: Pattern
C: Application_context
Prf: well_formed p
IHC: foC : coWfpSet, foC = frames_of_AC C → Γ ⊢i C.[□↦⊥] ---> ⊥ using (ExGen := ∅, SVSubst := ∅, KT := false, FP := foC)
false ==> false
Σ: Signature
Γ: Theory
p: Pattern
C: Application_context
Prf: well_formed p
IHC: foC : coWfpSet, foC = frames_of_AC C → Γ ⊢i C.[□↦⊥] ---> ⊥ using (ExGen := ∅, SVSubst := ∅, KT := false, FP := foC)
{[p ↾ Prf]} ⊆ {[p ↾ Prf]} ∪ frames_of_AC C
Σ: Signature
Γ: Theory
p: Pattern
C: Application_context
Prf: well_formed p
IHC: foC : coWfpSet, foC = frames_of_AC C → Γ ⊢i C.[□↦⊥] ---> ⊥ using (ExGen := ∅, SVSubst := ∅, KT := false, FP := foC)

∅ ⊆ ∅
apply reflexivity.
Σ: Signature
Γ: Theory
p: Pattern
C: Application_context
Prf: well_formed p
IHC: foC : coWfpSet, foC = frames_of_AC C → Γ ⊢i C.[□↦⊥] ---> ⊥ using (ExGen := ∅, SVSubst := ∅, KT := false, FP := foC)

∅ ⊆ ∅
Σ: Signature
Γ: Theory
p: Pattern
C: Application_context
Prf: well_formed p
IHC: foC : coWfpSet, foC = frames_of_AC C → Γ ⊢i C.[□↦⊥] ---> ⊥ using (ExGen := ∅, SVSubst := ∅, KT := false, FP := foC)
false ==> false
Σ: Signature
Γ: Theory
p: Pattern
C: Application_context
Prf: well_formed p
IHC: foC : coWfpSet, foC = frames_of_AC C → Γ ⊢i C.[□↦⊥] ---> ⊥ using (ExGen := ∅, SVSubst := ∅, KT := false, FP := foC)
{[p ↾ Prf]} ⊆ {[p ↾ Prf]} ∪ frames_of_AC C
Σ: Signature
Γ: Theory
p: Pattern
C: Application_context
Prf: well_formed p
IHC: foC : coWfpSet, foC = frames_of_AC C → Γ ⊢i C.[□↦⊥] ---> ⊥ using (ExGen := ∅, SVSubst := ∅, KT := false, FP := foC)

∅ ⊆ ∅
apply reflexivity.
Σ: Signature
Γ: Theory
p: Pattern
C: Application_context
Prf: well_formed p
IHC: foC : coWfpSet, foC = frames_of_AC C → Γ ⊢i C.[□↦⊥] ---> ⊥ using (ExGen := ∅, SVSubst := ∅, KT := false, FP := foC)

false ==> false
Σ: Signature
Γ: Theory
p: Pattern
C: Application_context
Prf: well_formed p
IHC: foC : coWfpSet, foC = frames_of_AC C → Γ ⊢i C.[□↦⊥] ---> ⊥ using (ExGen := ∅, SVSubst := ∅, KT := false, FP := foC)
{[p ↾ Prf]} ⊆ {[p ↾ Prf]} ∪ frames_of_AC C
Σ: Signature
Γ: Theory
p: Pattern
C: Application_context
Prf: well_formed p
IHC: foC : coWfpSet, foC = frames_of_AC C → Γ ⊢i C.[□↦⊥] ---> ⊥ using (ExGen := ∅, SVSubst := ∅, KT := false, FP := foC)

false ==> false
reflexivity.
Σ: Signature
Γ: Theory
p: Pattern
C: Application_context
Prf: well_formed p
IHC: foC : coWfpSet, foC = frames_of_AC C → Γ ⊢i C.[□↦⊥] ---> ⊥ using (ExGen := ∅, SVSubst := ∅, KT := false, FP := foC)

{[p ↾ Prf]} ⊆ {[p ↾ Prf]} ∪ frames_of_AC C
Σ: Signature
Γ: Theory
p: Pattern
C: Application_context
Prf: well_formed p
IHC: foC : coWfpSet, foC = frames_of_AC C → Γ ⊢i C.[□↦⊥] ---> ⊥ using (ExGen := ∅, SVSubst := ∅, KT := false, FP := foC)

{[p ↾ Prf]} ⊆ {[p ↾ Prf]} ∪ frames_of_AC C
Σ: Signature
p: Pattern
C: Application_context
Prf: well_formed p

{[p ↾ Prf]} ⊆ {[p ↾ Prf]} ∪ frames_of_AC C
set_solver. }
Σ: Signature
Γ: Theory
p: Pattern
C: Application_context
Prf: well_formed p
IHC: foC : coWfpSet, foC = frames_of_AC C → Γ ⊢i C.[□↦⊥] ---> ⊥ using (ExGen := ∅, SVSubst := ∅, KT := false, FP := foC)

Γ ⊢i C.[□↦⊥] ---> ⊥ using (ExGen := ∅, SVSubst := ∅, KT := false, FP := {[p ↾ Prf]} ∪ frames_of_AC C)
Σ: Signature
Γ: Theory
p: Pattern
C: Application_context
Prf: well_formed p
IHC: foC : coWfpSet, foC = frames_of_AC C → Γ ⊢i C.[□↦⊥] ---> ⊥ using (ExGen := ∅, SVSubst := ∅, KT := false, FP := foC)

ProofInfoLe (ExGen := ?evs, SVSubst := ?svs, KT := ?kt, FP := ?fp) (ExGen := ∅, SVSubst := ∅, KT := false, FP := {[p ↾ Prf]} ∪ frames_of_AC C)
Σ: Signature
Γ: Theory
p: Pattern
C: Application_context
Prf: well_formed p
IHC: foC : coWfpSet, foC = frames_of_AC C → Γ ⊢i C.[□↦⊥] ---> ⊥ using (ExGen := ∅, SVSubst := ∅, KT := false, FP := foC)
Γ ⊢i C.[□↦⊥] ---> ⊥ using (ExGen := ?evs, SVSubst := ?svs, KT := ?kt, FP := ?fp)
Σ: Signature
Γ: Theory
p: Pattern
C: Application_context
Prf: well_formed p
IHC: foC : coWfpSet, foC = frames_of_AC C → Γ ⊢i C.[□↦⊥] ---> ⊥ using (ExGen := ∅, SVSubst := ∅, KT := false, FP := foC)

ProofInfoLe (ExGen := ∅, SVSubst := ∅, KT := false, FP := ?fp) (ExGen := ∅, SVSubst := ∅, KT := false, FP := {[p ↾ Prf]} ∪ frames_of_AC C)
Σ: Signature
Γ: Theory
p: Pattern
C: Application_context
Prf: well_formed p
IHC: foC : coWfpSet, foC = frames_of_AC C → Γ ⊢i C.[□↦⊥] ---> ⊥ using (ExGen := ∅, SVSubst := ∅, KT := false, FP := foC)
?fp = frames_of_AC C
Σ: Signature
Γ: Theory
p: Pattern
C: Application_context
Prf: well_formed p
IHC: foC : coWfpSet, foC = frames_of_AC C → Γ ⊢i C.[□↦⊥] ---> ⊥ using (ExGen := ∅, SVSubst := ∅, KT := false, FP := foC)

ProofInfoLe (ExGen := ∅, SVSubst := ∅, KT := false, FP := frames_of_AC C) (ExGen := ∅, SVSubst := ∅, KT := false, FP := {[p ↾ Prf]} ∪ frames_of_AC C)
Σ: Signature
Γ: Theory
p: Pattern
C: Application_context
Prf: well_formed p
IHC: foC : coWfpSet, foC = frames_of_AC C → Γ ⊢i C.[□↦⊥] ---> ⊥ using (ExGen := ∅, SVSubst := ∅, KT := false, FP := foC)

∅ ⊆ ∅
Σ: Signature
Γ: Theory
p: Pattern
C: Application_context
Prf: well_formed p
IHC: foC : coWfpSet, foC = frames_of_AC C → Γ ⊢i C.[□↦⊥] ---> ⊥ using (ExGen := ∅, SVSubst := ∅, KT := false, FP := foC)
∅ ⊆ ∅
Σ: Signature
Γ: Theory
p: Pattern
C: Application_context
Prf: well_formed p
IHC: foC : coWfpSet, foC = frames_of_AC C → Γ ⊢i C.[□↦⊥] ---> ⊥ using (ExGen := ∅, SVSubst := ∅, KT := false, FP := foC)
false ==> false
Σ: Signature
Γ: Theory
p: Pattern
C: Application_context
Prf: well_formed p
IHC: foC : coWfpSet, foC = frames_of_AC C → Γ ⊢i C.[□↦⊥] ---> ⊥ using (ExGen := ∅, SVSubst := ∅, KT := false, FP := foC)
frames_of_AC C ⊆ {[p ↾ Prf]} ∪ frames_of_AC C
Σ: Signature
Γ: Theory
p: Pattern
C: Application_context
Prf: well_formed p
IHC: foC : coWfpSet, foC = frames_of_AC C → Γ ⊢i C.[□↦⊥] ---> ⊥ using (ExGen := ∅, SVSubst := ∅, KT := false, FP := foC)

∅ ⊆ ∅
apply reflexivity.
Σ: Signature
Γ: Theory
p: Pattern
C: Application_context
Prf: well_formed p
IHC: foC : coWfpSet, foC = frames_of_AC C → Γ ⊢i C.[□↦⊥] ---> ⊥ using (ExGen := ∅, SVSubst := ∅, KT := false, FP := foC)

∅ ⊆ ∅
Σ: Signature
Γ: Theory
p: Pattern
C: Application_context
Prf: well_formed p
IHC: foC : coWfpSet, foC = frames_of_AC C → Γ ⊢i C.[□↦⊥] ---> ⊥ using (ExGen := ∅, SVSubst := ∅, KT := false, FP := foC)
false ==> false
Σ: Signature
Γ: Theory
p: Pattern
C: Application_context
Prf: well_formed p
IHC: foC : coWfpSet, foC = frames_of_AC C → Γ ⊢i C.[□↦⊥] ---> ⊥ using (ExGen := ∅, SVSubst := ∅, KT := false, FP := foC)
frames_of_AC C ⊆ {[p ↾ Prf]} ∪ frames_of_AC C
Σ: Signature
Γ: Theory
p: Pattern
C: Application_context
Prf: well_formed p
IHC: foC : coWfpSet, foC = frames_of_AC C → Γ ⊢i C.[□↦⊥] ---> ⊥ using (ExGen := ∅, SVSubst := ∅, KT := false, FP := foC)

∅ ⊆ ∅
apply reflexivity.
Σ: Signature
Γ: Theory
p: Pattern
C: Application_context
Prf: well_formed p
IHC: foC : coWfpSet, foC = frames_of_AC C → Γ ⊢i C.[□↦⊥] ---> ⊥ using (ExGen := ∅, SVSubst := ∅, KT := false, FP := foC)

false ==> false
Σ: Signature
Γ: Theory
p: Pattern
C: Application_context
Prf: well_formed p
IHC: foC : coWfpSet, foC = frames_of_AC C → Γ ⊢i C.[□↦⊥] ---> ⊥ using (ExGen := ∅, SVSubst := ∅, KT := false, FP := foC)
frames_of_AC C ⊆ {[p ↾ Prf]} ∪ frames_of_AC C
Σ: Signature
Γ: Theory
p: Pattern
C: Application_context
Prf: well_formed p
IHC: foC : coWfpSet, foC = frames_of_AC C → Γ ⊢i C.[□↦⊥] ---> ⊥ using (ExGen := ∅, SVSubst := ∅, KT := false, FP := foC)

false ==> false
reflexivity.
Σ: Signature
Γ: Theory
p: Pattern
C: Application_context
Prf: well_formed p
IHC: foC : coWfpSet, foC = frames_of_AC C → Γ ⊢i C.[□↦⊥] ---> ⊥ using (ExGen := ∅, SVSubst := ∅, KT := false, FP := foC)

frames_of_AC C ⊆ {[p ↾ Prf]} ∪ frames_of_AC C
Σ: Signature
Γ: Theory
p: Pattern
C: Application_context
Prf: well_formed p
IHC: foC : coWfpSet, foC = frames_of_AC C → Γ ⊢i C.[□↦⊥] ---> ⊥ using (ExGen := ∅, SVSubst := ∅, KT := false, FP := foC)

frames_of_AC C ⊆ {[p ↾ Prf]} ∪ frames_of_AC C
Σ: Signature
p: Pattern
C: Application_context
Prf: well_formed p

frames_of_AC C ⊆ {[p ↾ Prf]} ∪ frames_of_AC C
set_solver. }
Σ: Signature
Γ: Theory
p: Pattern
C: Application_context
Prf: well_formed p
IHC: foC : coWfpSet, foC = frames_of_AC C → Γ ⊢i C.[□↦⊥] ---> ⊥ using (ExGen := ∅, SVSubst := ∅, KT := false, FP := foC)
foC: coWfpSet
HeqfoC: foC = {[p ↾ Prf]} ∪ frames_of_AC C

well_formed (p $ C.[□↦⊥])
Σ: Signature
Γ: Theory
p: Pattern
C: Application_context
Prf: well_formed p
IHC: foC : coWfpSet, foC = frames_of_AC C → Γ ⊢i C.[□↦⊥] ---> ⊥ using (ExGen := ∅, SVSubst := ∅, KT := false, FP := foC)
foC: coWfpSet
HeqfoC: foC = {[p ↾ Prf]} ∪ frames_of_AC C
well_formed (p $ ⊥)
Σ: Signature
Γ: Theory
p: Pattern
C: Application_context
Prf: well_formed p
IHC: foC : coWfpSet, foC = frames_of_AC C → Γ ⊢i C.[□↦⊥] ---> ⊥ using (ExGen := ∅, SVSubst := ∅, KT := false, FP := foC)
foC: coWfpSet
HeqfoC: foC = {[p ↾ Prf]} ∪ frames_of_AC C
well_formed ⊥
Falling back on (well_formed_xy 0 0 C.[□↦⊥] = true)
Defined.
Σ: Signature
Γ: Theory
C: Application_context
A, B: Pattern
i: ProofInfo
pile: ProofInfoLe (ExGen := ∅, SVSubst := ∅, KT := false, FP := frames_of_AC C) i

Γ ⊢i A ---> B using i → Γ ⊢i C.[□↦A] ---> C.[□↦B] using i
Σ: Signature
Γ: Theory
C: Application_context
A, B: Pattern
i: ProofInfo
pile: ProofInfoLe (ExGen := ∅, SVSubst := ∅, KT := false, FP := frames_of_AC C) i

Γ ⊢i A ---> B using i → Γ ⊢i C.[□↦A] ---> C.[□↦B] using i
Σ: Signature
Γ: Theory
C: Application_context
A, B: Pattern
i: ProofInfo
pile: ProofInfoLe (ExGen := ∅, SVSubst := ∅, KT := false, FP := frames_of_AC C) i
H: Γ ⊢i A ---> B using i

Γ ⊢i C.[□↦A] ---> C.[□↦B] using i
Σ: Signature
Γ: Theory
C: Application_context
A, B: Pattern
i: ProofInfo
pile: ProofInfoLe (ExGen := ∅, SVSubst := ∅, KT := false, FP := frames_of_AC C) i
H: Γ ⊢i A ---> B using i
pf: ML_proof_system Γ (A ---> B)

Γ ⊢i C.[□↦A] ---> C.[□↦B] using i
Σ: Signature
Γ: Theory
C: Application_context
A, B: Pattern
i: ProofInfo
pile: ProofInfoLe (ExGen := ∅, SVSubst := ∅, KT := false, FP := frames_of_AC C) i
H: Γ ⊢i A ---> B using i
pf: ML_proof_system Γ (A ---> B)
HWF: well_formed (A ---> B)

Γ ⊢i C.[□↦A] ---> C.[□↦B] using i
Σ: Signature
Γ: Theory
C: Application_context
A, B: Pattern
i: ProofInfo
pile: ProofInfoLe (ExGen := ∅, SVSubst := ∅, KT := false, FP := frames_of_AC C) i
H: Γ ⊢i A ---> B using i
pf: ML_proof_system Γ (A ---> B)
HWF: well_formed (A ---> B)
wfA: well_formed A

Γ ⊢i C.[□↦A] ---> C.[□↦B] using i
Σ: Signature
Γ: Theory
C: Application_context
A, B: Pattern
i: ProofInfo
pile: ProofInfoLe (ExGen := ∅, SVSubst := ∅, KT := false, FP := frames_of_AC C) i
H: Γ ⊢i A ---> B using i
pf: ML_proof_system Γ (A ---> B)
HWF: well_formed (A ---> B)
wfA: well_formed A
wfB: well_formed B

Γ ⊢i C.[□↦A] ---> C.[□↦B] using i
Σ: Signature
Γ: Theory
C: Application_context
A, B: Pattern
i: ProofInfo
pile: ProofInfoLe (ExGen := ∅, SVSubst := ∅, KT := false, FP := frames_of_AC C) i
H: Γ ⊢i A ---> B using i
wfA: well_formed A
wfB: well_formed B

Γ ⊢i C.[□↦A] ---> C.[□↦B] using i
Σ: Signature
Γ: Theory
C: Application_context
A, B: Pattern
i: ProofInfo
pile: ProofInfoLe (ExGen := ∅, SVSubst := ∅, KT := false, FP := frames_of_AC C) i

well_formed A → well_formed B → Γ ⊢i A ---> B using i → Γ ⊢i C.[□↦A] ---> C.[□↦B] using i
Σ: Signature
Γ: Theory
A, B: Pattern
i: ProofInfo
pile: ProofInfoLe (ExGen := ∅, SVSubst := ∅, KT := false, FP := ∅) i
WFA: well_formed A
WFB: well_formed B
H: Γ ⊢i A ---> B using i

Γ ⊢i A ---> B using i
Σ: Signature
Γ: Theory
C: Application_context
p: Pattern
Prf: well_formed p
A, B: Pattern
i: ProofInfo
pile: ProofInfoLe (ExGen := ∅, SVSubst := ∅, KT := false, FP := {[p ↾ Prf]} ∪ frames_of_AC C) i
IHC: ProofInfoLe (ExGen := ∅, SVSubst := ∅, KT := false, FP := frames_of_AC C) i → well_formed A → well_formed B → Γ ⊢i A ---> B using i → Γ ⊢i C.[□↦A] ---> C.[□↦B] using i
WFA: well_formed A
WFB: well_formed B
H: Γ ⊢i A ---> B using i
Γ ⊢i C.[□↦A] $ p ---> C.[□↦B] $ p using i
Σ: Signature
Γ: Theory
p: Pattern
C: Application_context
Prf: well_formed p
A, B: Pattern
i: ProofInfo
pile: ProofInfoLe (ExGen := ∅, SVSubst := ∅, KT := false, FP := {[p ↾ Prf]} ∪ frames_of_AC C) i
IHC: ProofInfoLe (ExGen := ∅, SVSubst := ∅, KT := false, FP := frames_of_AC C) i → well_formed A → well_formed B → Γ ⊢i A ---> B using i → Γ ⊢i C.[□↦A] ---> C.[□↦B] using i
WFA: well_formed A
WFB: well_formed B
H: Γ ⊢i A ---> B using i
Γ ⊢i p $ C.[□↦A] ---> p $ C.[□↦B] using i
Σ: Signature
Γ: Theory
A, B: Pattern
i: ProofInfo
pile: ProofInfoLe (ExGen := ∅, SVSubst := ∅, KT := false, FP := ∅) i
WFA: well_formed A
WFB: well_formed B
H: Γ ⊢i A ---> B using i

Γ ⊢i A ---> B using i
exact H.
Σ: Signature
Γ: Theory
C: Application_context
p: Pattern
Prf: well_formed p
A, B: Pattern
i: ProofInfo
pile: ProofInfoLe (ExGen := ∅, SVSubst := ∅, KT := false, FP := {[p ↾ Prf]} ∪ frames_of_AC C) i
IHC: ProofInfoLe (ExGen := ∅, SVSubst := ∅, KT := false, FP := frames_of_AC C) i → well_formed A → well_formed B → Γ ⊢i A ---> B using i → Γ ⊢i C.[□↦A] ---> C.[□↦B] using i
WFA: well_formed A
WFB: well_formed B
H: Γ ⊢i A ---> B using i

Γ ⊢i C.[□↦A] $ p ---> C.[□↦B] $ p using i
Σ: Signature
Γ: Theory
C: Application_context
p: Pattern
Prf: well_formed p
A, B: Pattern
pi_generalized_evars: coEVarSet
pi_substituted_svars: coSVarSet
pi_uses_kt: bool
pi_framing_patterns: coWfpSet
pile: ProofInfoLe (ExGen := ∅, SVSubst := ∅, KT := false, FP := {[p ↾ Prf]} ∪ frames_of_AC C) (ExGen := pi_generalized_evars, SVSubst := pi_substituted_svars, KT := pi_uses_kt, FP := pi_framing_patterns)
IHC: ProofInfoLe (ExGen := ∅, SVSubst := ∅, KT := false, FP := frames_of_AC C) (ExGen := pi_generalized_evars, SVSubst := pi_substituted_svars, KT := pi_uses_kt, FP := pi_framing_patterns) → well_formed A → well_formed B → Γ ⊢i A ---> B using (ExGen := pi_generalized_evars, SVSubst := pi_substituted_svars, KT := pi_uses_kt, FP := pi_framing_patterns) → Γ ⊢i C.[□↦A] ---> C.[□↦B] using (ExGen := pi_generalized_evars, SVSubst := pi_substituted_svars, KT := pi_uses_kt, FP := pi_framing_patterns)
WFA: well_formed A
WFB: well_formed B
H: Γ ⊢i A ---> B using (ExGen := pi_generalized_evars, SVSubst := pi_substituted_svars, KT := pi_uses_kt, FP := pi_framing_patterns)

Γ ⊢i C.[□↦A] $ p ---> C.[□↦B] $ p using (ExGen := pi_generalized_evars, SVSubst := pi_substituted_svars, KT := pi_uses_kt, FP := pi_framing_patterns)
Σ: Signature
Γ: Theory
C: Application_context
p: Pattern
Prf: well_formed p
A, B: Pattern
pi_generalized_evars: coEVarSet
pi_substituted_svars: coSVarSet
pi_uses_kt: bool
pi_framing_patterns: coWfpSet
pile: ∅ ⊆ pi_generalized_evars ∧ ∅ ⊆ pi_substituted_svars ∧ false ==> pi_uses_kt ∧ {[p ↾ Prf]} ∪ frames_of_AC C ⊆ pi_framing_patterns
IHC: ProofInfoLe (ExGen := ∅, SVSubst := ∅, KT := false, FP := frames_of_AC C) (ExGen := pi_generalized_evars, SVSubst := pi_substituted_svars, KT := pi_uses_kt, FP := pi_framing_patterns) → well_formed A → well_formed B → Γ ⊢i A ---> B using (ExGen := pi_generalized_evars, SVSubst := pi_substituted_svars, KT := pi_uses_kt, FP := pi_framing_patterns) → Γ ⊢i C.[□↦A] ---> C.[□↦B] using (ExGen := pi_generalized_evars, SVSubst := pi_substituted_svars, KT := pi_uses_kt, FP := pi_framing_patterns)
WFA: well_formed A
WFB: well_formed B
H: Γ ⊢i A ---> B using (ExGen := pi_generalized_evars, SVSubst := pi_substituted_svars, KT := pi_uses_kt, FP := pi_framing_patterns)

Γ ⊢i C.[□↦A] $ p ---> C.[□↦B] $ p using (ExGen := pi_generalized_evars, SVSubst := pi_substituted_svars, KT := pi_uses_kt, FP := pi_framing_patterns)
Σ: Signature
Γ: Theory
C: Application_context
p: Pattern
Prf: well_formed p
A, B: Pattern
pi_generalized_evars: coEVarSet
pi_substituted_svars: coSVarSet
pi_uses_kt: bool
pi_framing_patterns: coWfpSet
H0: ∅ ⊆ pi_generalized_evars
H2: ∅ ⊆ pi_substituted_svars
H1: false ==> pi_uses_kt
H4: {[p ↾ Prf]} ∪ frames_of_AC C ⊆ pi_framing_patterns
IHC: ProofInfoLe (ExGen := ∅, SVSubst := ∅, KT := false, FP := frames_of_AC C) (ExGen := pi_generalized_evars, SVSubst := pi_substituted_svars, KT := pi_uses_kt, FP := pi_framing_patterns) → well_formed A → well_formed B → Γ ⊢i A ---> B using (ExGen := pi_generalized_evars, SVSubst := pi_substituted_svars, KT := pi_uses_kt, FP := pi_framing_patterns) → Γ ⊢i C.[□↦A] ---> C.[□↦B] using (ExGen := pi_generalized_evars, SVSubst := pi_substituted_svars, KT := pi_uses_kt, FP := pi_framing_patterns)
WFA: well_formed A
WFB: well_formed B
H: Γ ⊢i A ---> B using (ExGen := pi_generalized_evars, SVSubst := pi_substituted_svars, KT := pi_uses_kt, FP := pi_framing_patterns)

Γ ⊢i C.[□↦A] $ p ---> C.[□↦B] $ p using (ExGen := pi_generalized_evars, SVSubst := pi_substituted_svars, KT := pi_uses_kt, FP := pi_framing_patterns)
Σ: Signature
Γ: Theory
C: Application_context
p: Pattern
Prf: well_formed p
A, B: Pattern
pi_generalized_evars: coEVarSet
pi_substituted_svars: coSVarSet
pi_uses_kt: bool
pi_framing_patterns: coWfpSet
H0: ∅ ⊆ pi_generalized_evars
H2: ∅ ⊆ pi_substituted_svars
H1: true
H4: {[p ↾ Prf]} ∪ frames_of_AC C ⊆ pi_framing_patterns
IHC: ProofInfoLe (ExGen := ∅, SVSubst := ∅, KT := false, FP := frames_of_AC C) (ExGen := pi_generalized_evars, SVSubst := pi_substituted_svars, KT := pi_uses_kt, FP := pi_framing_patterns) → well_formed A → well_formed B → Γ ⊢i A ---> B using (ExGen := pi_generalized_evars, SVSubst := pi_substituted_svars, KT := pi_uses_kt, FP := pi_framing_patterns) → Γ ⊢i C.[□↦A] ---> C.[□↦B] using (ExGen := pi_generalized_evars, SVSubst := pi_substituted_svars, KT := pi_uses_kt, FP := pi_framing_patterns)
WFA: well_formed A
WFB: well_formed B
H: Γ ⊢i A ---> B using (ExGen := pi_generalized_evars, SVSubst := pi_substituted_svars, KT := pi_uses_kt, FP := pi_framing_patterns)

Γ ⊢i C.[□↦A] $ p ---> C.[□↦B] $ p using (ExGen := pi_generalized_evars, SVSubst := pi_substituted_svars, KT := pi_uses_kt, FP := pi_framing_patterns)
Σ: Signature
Γ: Theory
C: Application_context
p: Pattern
Prf: well_formed p
A, B: Pattern
pi_generalized_evars: coEVarSet
pi_substituted_svars: coSVarSet
pi_uses_kt: bool
pi_framing_patterns: coWfpSet
H0: ∅ ⊆ pi_generalized_evars
H2: ∅ ⊆ pi_substituted_svars
H1: true
H4: {[p ↾ Prf]} ∪ frames_of_AC C ⊆ pi_framing_patterns
IHC: ProofInfoLe (ExGen := ∅, SVSubst := ∅, KT := false, FP := frames_of_AC C) (ExGen := pi_generalized_evars, SVSubst := pi_substituted_svars, KT := pi_uses_kt, FP := pi_framing_patterns) → well_formed A → well_formed B → Γ ⊢i A ---> B using (ExGen := pi_generalized_evars, SVSubst := pi_substituted_svars, KT := pi_uses_kt, FP := pi_framing_patterns) → Γ ⊢i C.[□↦A] ---> C.[□↦B] using (ExGen := pi_generalized_evars, SVSubst := pi_substituted_svars, KT := pi_uses_kt, FP := pi_framing_patterns)
WFA: well_formed A
WFB: well_formed B
H: Γ ⊢i A ---> B using (ExGen := pi_generalized_evars, SVSubst := pi_substituted_svars, KT := pi_uses_kt, FP := pi_framing_patterns)

ProofInfoLe (ExGen := ∅, SVSubst := ∅, KT := false, FP := {[p ↾ Prf]}) (ExGen := pi_generalized_evars, SVSubst := pi_substituted_svars, KT := pi_uses_kt, FP := pi_framing_patterns)
Σ: Signature
Γ: Theory
C: Application_context
p: Pattern
Prf: well_formed p
A, B: Pattern
pi_generalized_evars: coEVarSet
pi_substituted_svars: coSVarSet
pi_uses_kt: bool
pi_framing_patterns: coWfpSet
H0: ∅ ⊆ pi_generalized_evars
H2: ∅ ⊆ pi_substituted_svars
H1: true
H4: {[p ↾ Prf]} ∪ frames_of_AC C ⊆ pi_framing_patterns
IHC: ProofInfoLe (ExGen := ∅, SVSubst := ∅, KT := false, FP := frames_of_AC C) (ExGen := pi_generalized_evars, SVSubst := pi_substituted_svars, KT := pi_uses_kt, FP := pi_framing_patterns) → well_formed A → well_formed B → Γ ⊢i A ---> B using (ExGen := pi_generalized_evars, SVSubst := pi_substituted_svars, KT := pi_uses_kt, FP := pi_framing_patterns) → Γ ⊢i C.[□↦A] ---> C.[□↦B] using (ExGen := pi_generalized_evars, SVSubst := pi_substituted_svars, KT := pi_uses_kt, FP := pi_framing_patterns)
WFA: well_formed A
WFB: well_formed B
H: Γ ⊢i A ---> B using (ExGen := pi_generalized_evars, SVSubst := pi_substituted_svars, KT := pi_uses_kt, FP := pi_framing_patterns)
Γ ⊢i C.[□↦A] ---> C.[□↦B] using (ExGen := pi_generalized_evars, SVSubst := pi_substituted_svars, KT := pi_uses_kt, FP := pi_framing_patterns)
Σ: Signature
Γ: Theory
C: Application_context
p: Pattern
Prf: well_formed p
A, B: Pattern
pi_generalized_evars: coEVarSet
pi_substituted_svars: coSVarSet
pi_uses_kt: bool
pi_framing_patterns: coWfpSet
H0: ∅ ⊆ pi_generalized_evars
H2: ∅ ⊆ pi_substituted_svars
H1: true
H4: {[p ↾ Prf]} ∪ frames_of_AC C ⊆ pi_framing_patterns
IHC: ProofInfoLe (ExGen := ∅, SVSubst := ∅, KT := false, FP := frames_of_AC C) (ExGen := pi_generalized_evars, SVSubst := pi_substituted_svars, KT := pi_uses_kt, FP := pi_framing_patterns) → well_formed A → well_formed B → Γ ⊢i A ---> B using (ExGen := pi_generalized_evars, SVSubst := pi_substituted_svars, KT := pi_uses_kt, FP := pi_framing_patterns) → Γ ⊢i C.[□↦A] ---> C.[□↦B] using (ExGen := pi_generalized_evars, SVSubst := pi_substituted_svars, KT := pi_uses_kt, FP := pi_framing_patterns)
WFA: well_formed A
WFB: well_formed B
H: Γ ⊢i A ---> B using (ExGen := pi_generalized_evars, SVSubst := pi_substituted_svars, KT := pi_uses_kt, FP := pi_framing_patterns)

ProofInfoLe (ExGen := ∅, SVSubst := ∅, KT := false, FP := {[p ↾ Prf]}) (ExGen := pi_generalized_evars, SVSubst := pi_substituted_svars, KT := pi_uses_kt, FP := pi_framing_patterns)
Σ: Signature
Γ: Theory
C: Application_context
p: Pattern
Prf: well_formed p
A, B: Pattern
pi_generalized_evars: coEVarSet
pi_substituted_svars: coSVarSet
pi_uses_kt: bool
pi_framing_patterns: coWfpSet
H0: ∅ ⊆ pi_generalized_evars
H2: ∅ ⊆ pi_substituted_svars
H1: true
H4: {[p ↾ Prf]} ∪ frames_of_AC C ⊆ pi_framing_patterns
IHC: ProofInfoLe (ExGen := ∅, SVSubst := ∅, KT := false, FP := frames_of_AC C) (ExGen := pi_generalized_evars, SVSubst := pi_substituted_svars, KT := pi_uses_kt, FP := pi_framing_patterns) → well_formed A → well_formed B → Γ ⊢i A ---> B using (ExGen := pi_generalized_evars, SVSubst := pi_substituted_svars, KT := pi_uses_kt, FP := pi_framing_patterns) → Γ ⊢i C.[□↦A] ---> C.[□↦B] using (ExGen := pi_generalized_evars, SVSubst := pi_substituted_svars, KT := pi_uses_kt, FP := pi_framing_patterns)
WFA: well_formed A
WFB: well_formed B
H: Γ ⊢i A ---> B using (ExGen := pi_generalized_evars, SVSubst := pi_substituted_svars, KT := pi_uses_kt, FP := pi_framing_patterns)

{[p ↾ Prf]} ⊆ pi_framing_patterns
set_solver.
Σ: Signature
Γ: Theory
C: Application_context
p: Pattern
Prf: well_formed p
A, B: Pattern
pi_generalized_evars: coEVarSet
pi_substituted_svars: coSVarSet
pi_uses_kt: bool
pi_framing_patterns: coWfpSet
H0: ∅ ⊆ pi_generalized_evars
H2: ∅ ⊆ pi_substituted_svars
H1: true
H4: {[p ↾ Prf]} ∪ frames_of_AC C ⊆ pi_framing_patterns
IHC: ProofInfoLe (ExGen := ∅, SVSubst := ∅, KT := false, FP := frames_of_AC C) (ExGen := pi_generalized_evars, SVSubst := pi_substituted_svars, KT := pi_uses_kt, FP := pi_framing_patterns) → well_formed A → well_formed B → Γ ⊢i A ---> B using (ExGen := pi_generalized_evars, SVSubst := pi_substituted_svars, KT := pi_uses_kt, FP := pi_framing_patterns) → Γ ⊢i C.[□↦A] ---> C.[□↦B] using (ExGen := pi_generalized_evars, SVSubst := pi_substituted_svars, KT := pi_uses_kt, FP := pi_framing_patterns)
WFA: well_formed A
WFB: well_formed B
H: Γ ⊢i A ---> B using (ExGen := pi_generalized_evars, SVSubst := pi_substituted_svars, KT := pi_uses_kt, FP := pi_framing_patterns)

Γ ⊢i C.[□↦A] ---> C.[□↦B] using (ExGen := pi_generalized_evars, SVSubst := pi_substituted_svars, KT := pi_uses_kt, FP := pi_framing_patterns)
Σ: Signature
Γ: Theory
C: Application_context
p: Pattern
Prf: well_formed p
A, B: Pattern
pi_generalized_evars: coEVarSet
pi_substituted_svars: coSVarSet
pi_uses_kt: bool
pi_framing_patterns: coWfpSet
H0: ∅ ⊆ pi_generalized_evars
H2: ∅ ⊆ pi_substituted_svars
H1: true
H4: {[p ↾ Prf]} ∪ frames_of_AC C ⊆ pi_framing_patterns
IHC: ProofInfoLe (ExGen := ∅, SVSubst := ∅, KT := false, FP := frames_of_AC C) (ExGen := pi_generalized_evars, SVSubst := pi_substituted_svars, KT := pi_uses_kt, FP := pi_framing_patterns) → well_formed A → well_formed B → Γ ⊢i A ---> B using (ExGen := pi_generalized_evars, SVSubst := pi_substituted_svars, KT := pi_uses_kt, FP := pi_framing_patterns) → Γ ⊢i C.[□↦A] ---> C.[□↦B] using (ExGen := pi_generalized_evars, SVSubst := pi_substituted_svars, KT := pi_uses_kt, FP := pi_framing_patterns)
WFA: well_formed A
WFB: well_formed B
H: Γ ⊢i A ---> B using (ExGen := pi_generalized_evars, SVSubst := pi_substituted_svars, KT := pi_uses_kt, FP := pi_framing_patterns)

ProofInfoLe (ExGen := ∅, SVSubst := ∅, KT := false, FP := frames_of_AC C) (ExGen := pi_generalized_evars, SVSubst := pi_substituted_svars, KT := pi_uses_kt, FP := pi_framing_patterns)
Σ: Signature
Γ: Theory
C: Application_context
p: Pattern
Prf: well_formed p
A, B: Pattern
pi_generalized_evars: coEVarSet
pi_substituted_svars: coSVarSet
pi_uses_kt: bool
pi_framing_patterns: coWfpSet
H0: ∅ ⊆ pi_generalized_evars
H2: ∅ ⊆ pi_substituted_svars
H1: true
H4: {[p ↾ Prf]} ∪ frames_of_AC C ⊆ pi_framing_patterns
IHC: ProofInfoLe (ExGen := ∅, SVSubst := ∅, KT := false, FP := frames_of_AC C) (ExGen := pi_generalized_evars, SVSubst := pi_substituted_svars, KT := pi_uses_kt, FP := pi_framing_patterns) → well_formed A → well_formed B → Γ ⊢i A ---> B using (ExGen := pi_generalized_evars, SVSubst := pi_substituted_svars, KT := pi_uses_kt, FP := pi_framing_patterns) → Γ ⊢i C.[□↦A] ---> C.[□↦B] using (ExGen := pi_generalized_evars, SVSubst := pi_substituted_svars, KT := pi_uses_kt, FP := pi_framing_patterns)
WFA: well_formed A
WFB: well_formed B
H: Γ ⊢i A ---> B using (ExGen := pi_generalized_evars, SVSubst := pi_substituted_svars, KT := pi_uses_kt, FP := pi_framing_patterns)
well_formed A
Σ: Signature
Γ: Theory
C: Application_context
p: Pattern
Prf: well_formed p
A, B: Pattern
pi_generalized_evars: coEVarSet
pi_substituted_svars: coSVarSet
pi_uses_kt: bool
pi_framing_patterns: coWfpSet
H0: ∅ ⊆ pi_generalized_evars
H2: ∅ ⊆ pi_substituted_svars
H1: true
H4: {[p ↾ Prf]} ∪ frames_of_AC C ⊆ pi_framing_patterns
IHC: ProofInfoLe (ExGen := ∅, SVSubst := ∅, KT := false, FP := frames_of_AC C) (ExGen := pi_generalized_evars, SVSubst := pi_substituted_svars, KT := pi_uses_kt, FP := pi_framing_patterns) → well_formed A → well_formed B → Γ ⊢i A ---> B using (ExGen := pi_generalized_evars, SVSubst := pi_substituted_svars, KT := pi_uses_kt, FP := pi_framing_patterns) → Γ ⊢i C.[□↦A] ---> C.[□↦B] using (ExGen := pi_generalized_evars, SVSubst := pi_substituted_svars, KT := pi_uses_kt, FP := pi_framing_patterns)
WFA: well_formed A
WFB: well_formed B
H: Γ ⊢i A ---> B using (ExGen := pi_generalized_evars, SVSubst := pi_substituted_svars, KT := pi_uses_kt, FP := pi_framing_patterns)
well_formed B
Σ: Signature
Γ: Theory
C: Application_context
p: Pattern
Prf: well_formed p
A, B: Pattern
pi_generalized_evars: coEVarSet
pi_substituted_svars: coSVarSet
pi_uses_kt: bool
pi_framing_patterns: coWfpSet
H0: ∅ ⊆ pi_generalized_evars
H2: ∅ ⊆ pi_substituted_svars
H1: true
H4: {[p ↾ Prf]} ∪ frames_of_AC C ⊆ pi_framing_patterns
IHC: ProofInfoLe (ExGen := ∅, SVSubst := ∅, KT := false, FP := frames_of_AC C) (ExGen := pi_generalized_evars, SVSubst := pi_substituted_svars, KT := pi_uses_kt, FP := pi_framing_patterns) → well_formed A → well_formed B → Γ ⊢i A ---> B using (ExGen := pi_generalized_evars, SVSubst := pi_substituted_svars, KT := pi_uses_kt, FP := pi_framing_patterns) → Γ ⊢i C.[□↦A] ---> C.[□↦B] using (ExGen := pi_generalized_evars, SVSubst := pi_substituted_svars, KT := pi_uses_kt, FP := pi_framing_patterns)
WFA: well_formed A
WFB: well_formed B
H: Γ ⊢i A ---> B using (ExGen := pi_generalized_evars, SVSubst := pi_substituted_svars, KT := pi_uses_kt, FP := pi_framing_patterns)
Γ ⊢i A ---> B using (ExGen := pi_generalized_evars, SVSubst := pi_substituted_svars, KT := pi_uses_kt, FP := pi_framing_patterns)
Σ: Signature
Γ: Theory
C: Application_context
p: Pattern
Prf: well_formed p
A, B: Pattern
pi_generalized_evars: coEVarSet
pi_substituted_svars: coSVarSet
pi_uses_kt: bool
pi_framing_patterns: coWfpSet
H0: ∅ ⊆ pi_generalized_evars
H2: ∅ ⊆ pi_substituted_svars
H1: true
H4: {[p ↾ Prf]} ∪ frames_of_AC C ⊆ pi_framing_patterns
IHC: ProofInfoLe (ExGen := ∅, SVSubst := ∅, KT := false, FP := frames_of_AC C) (ExGen := pi_generalized_evars, SVSubst := pi_substituted_svars, KT := pi_uses_kt, FP := pi_framing_patterns) → well_formed A → well_formed B → Γ ⊢i A ---> B using (ExGen := pi_generalized_evars, SVSubst := pi_substituted_svars, KT := pi_uses_kt, FP := pi_framing_patterns) → Γ ⊢i C.[□↦A] ---> C.[□↦B] using (ExGen := pi_generalized_evars, SVSubst := pi_substituted_svars, KT := pi_uses_kt, FP := pi_framing_patterns)
WFA: well_formed A
WFB: well_formed B
H: Γ ⊢i A ---> B using (ExGen := pi_generalized_evars, SVSubst := pi_substituted_svars, KT := pi_uses_kt, FP := pi_framing_patterns)

ProofInfoLe (ExGen := ∅, SVSubst := ∅, KT := false, FP := frames_of_AC C) (ExGen := pi_generalized_evars, SVSubst := pi_substituted_svars, KT := pi_uses_kt, FP := pi_framing_patterns)
Σ: Signature
Γ: Theory
C: Application_context
p: Pattern
Prf: well_formed p
A, B: Pattern
pi_generalized_evars: coEVarSet
pi_substituted_svars: coSVarSet
pi_uses_kt: bool
pi_framing_patterns: coWfpSet
H0: ∅ ⊆ pi_generalized_evars
H2: ∅ ⊆ pi_substituted_svars
H1: true
H4: {[p ↾ Prf]} ∪ frames_of_AC C ⊆ pi_framing_patterns
IHC: ProofInfoLe (ExGen := ∅, SVSubst := ∅, KT := false, FP := frames_of_AC C) (ExGen := pi_generalized_evars, SVSubst := pi_substituted_svars, KT := pi_uses_kt, FP := pi_framing_patterns) → well_formed A → well_formed B → Γ ⊢i A ---> B using (ExGen := pi_generalized_evars, SVSubst := pi_substituted_svars, KT := pi_uses_kt, FP := pi_framing_patterns) → Γ ⊢i C.[□↦A] ---> C.[□↦B] using (ExGen := pi_generalized_evars, SVSubst := pi_substituted_svars, KT := pi_uses_kt, FP := pi_framing_patterns)
WFA: well_formed A
WFB: well_formed B
H: Γ ⊢i A ---> B using (ExGen := pi_generalized_evars, SVSubst := pi_substituted_svars, KT := pi_uses_kt, FP := pi_framing_patterns)
Γ ⊢i A ---> B using (ExGen := pi_generalized_evars, SVSubst := pi_substituted_svars, KT := pi_uses_kt, FP := pi_framing_patterns)
Σ: Signature
Γ: Theory
C: Application_context
p: Pattern
Prf: well_formed p
A, B: Pattern
pi_generalized_evars: coEVarSet
pi_substituted_svars: coSVarSet
pi_uses_kt: bool
pi_framing_patterns: coWfpSet
H0: ∅ ⊆ pi_generalized_evars
H2: ∅ ⊆ pi_substituted_svars
H1: true
H4: {[p ↾ Prf]} ∪ frames_of_AC C ⊆ pi_framing_patterns
IHC: ProofInfoLe (ExGen := ∅, SVSubst := ∅, KT := false, FP := frames_of_AC C) (ExGen := pi_generalized_evars, SVSubst := pi_substituted_svars, KT := pi_uses_kt, FP := pi_framing_patterns) → well_formed A → well_formed B → Γ ⊢i A ---> B using (ExGen := pi_generalized_evars, SVSubst := pi_substituted_svars, KT := pi_uses_kt, FP := pi_framing_patterns) → Γ ⊢i C.[□↦A] ---> C.[□↦B] using (ExGen := pi_generalized_evars, SVSubst := pi_substituted_svars, KT := pi_uses_kt, FP := pi_framing_patterns)
WFA: well_formed A
WFB: well_formed B
H: Γ ⊢i A ---> B using (ExGen := pi_generalized_evars, SVSubst := pi_substituted_svars, KT := pi_uses_kt, FP := pi_framing_patterns)

ProofInfoLe (ExGen := ∅, SVSubst := ∅, KT := false, FP := frames_of_AC C) (ExGen := pi_generalized_evars, SVSubst := pi_substituted_svars, KT := pi_uses_kt, FP := pi_framing_patterns)
Σ: Signature
Γ: Theory
C: Application_context
p: Pattern
Prf: well_formed p
A, B: Pattern
pi_generalized_evars: coEVarSet
pi_substituted_svars: coSVarSet
pi_uses_kt: bool
pi_framing_patterns: coWfpSet
H0: ∅ ⊆ pi_generalized_evars
H2: ∅ ⊆ pi_substituted_svars
H1: true
H4: {[p ↾ Prf]} ∪ frames_of_AC C ⊆ pi_framing_patterns
IHC: ProofInfoLe (ExGen := ∅, SVSubst := ∅, KT := false, FP := frames_of_AC C) (ExGen := pi_generalized_evars, SVSubst := pi_substituted_svars, KT := pi_uses_kt, FP := pi_framing_patterns) → well_formed A → well_formed B → Γ ⊢i A ---> B using (ExGen := pi_generalized_evars, SVSubst := pi_substituted_svars, KT := pi_uses_kt, FP := pi_framing_patterns) → Γ ⊢i C.[□↦A] ---> C.[□↦B] using (ExGen := pi_generalized_evars, SVSubst := pi_substituted_svars, KT := pi_uses_kt, FP := pi_framing_patterns)
WFA: well_formed A
WFB: well_formed B
H: Γ ⊢i A ---> B using (ExGen := pi_generalized_evars, SVSubst := pi_substituted_svars, KT := pi_uses_kt, FP := pi_framing_patterns)

frames_of_AC C ⊆ pi_framing_patterns
set_solver.
Σ: Signature
Γ: Theory
p: Pattern
C: Application_context
Prf: well_formed p
A, B: Pattern
i: ProofInfo
pile: ProofInfoLe (ExGen := ∅, SVSubst := ∅, KT := false, FP := {[p ↾ Prf]} ∪ frames_of_AC C) i
IHC: ProofInfoLe (ExGen := ∅, SVSubst := ∅, KT := false, FP := frames_of_AC C) i → well_formed A → well_formed B → Γ ⊢i A ---> B using i → Γ ⊢i C.[□↦A] ---> C.[□↦B] using i
WFA: well_formed A
WFB: well_formed B
H: Γ ⊢i A ---> B using i

Γ ⊢i p $ C.[□↦A] ---> p $ C.[□↦B] using i
Σ: Signature
Γ: Theory
p: Pattern
C: Application_context
Prf: well_formed p
A, B: Pattern
pi_generalized_evars: coEVarSet
pi_substituted_svars: coSVarSet
pi_uses_kt: bool
pi_framing_patterns: coWfpSet
pile: ProofInfoLe (ExGen := ∅, SVSubst := ∅, KT := false, FP := {[p ↾ Prf]} ∪ frames_of_AC C) (ExGen := pi_generalized_evars, SVSubst := pi_substituted_svars, KT := pi_uses_kt, FP := pi_framing_patterns)
IHC: ProofInfoLe (ExGen := ∅, SVSubst := ∅, KT := false, FP := frames_of_AC C) (ExGen := pi_generalized_evars, SVSubst := pi_substituted_svars, KT := pi_uses_kt, FP := pi_framing_patterns) → well_formed A → well_formed B → Γ ⊢i A ---> B using (ExGen := pi_generalized_evars, SVSubst := pi_substituted_svars, KT := pi_uses_kt, FP := pi_framing_patterns) → Γ ⊢i C.[□↦A] ---> C.[□↦B] using (ExGen := pi_generalized_evars, SVSubst := pi_substituted_svars, KT := pi_uses_kt, FP := pi_framing_patterns)
WFA: well_formed A
WFB: well_formed B
H: Γ ⊢i A ---> B using (ExGen := pi_generalized_evars, SVSubst := pi_substituted_svars, KT := pi_uses_kt, FP := pi_framing_patterns)

Γ ⊢i p $ C.[□↦A] ---> p $ C.[□↦B] using (ExGen := pi_generalized_evars, SVSubst := pi_substituted_svars, KT := pi_uses_kt, FP := pi_framing_patterns)
Σ: Signature
Γ: Theory
p: Pattern
C: Application_context
Prf: well_formed p
A, B: Pattern
pi_generalized_evars: coEVarSet
pi_substituted_svars: coSVarSet
pi_uses_kt: bool
pi_framing_patterns: coWfpSet
pile: ∅ ⊆ pi_generalized_evars ∧ ∅ ⊆ pi_substituted_svars ∧ false ==> pi_uses_kt ∧ {[p ↾ Prf]} ∪ frames_of_AC C ⊆ pi_framing_patterns
IHC: ProofInfoLe (ExGen := ∅, SVSubst := ∅, KT := false, FP := frames_of_AC C) (ExGen := pi_generalized_evars, SVSubst := pi_substituted_svars, KT := pi_uses_kt, FP := pi_framing_patterns) → well_formed A → well_formed B → Γ ⊢i A ---> B using (ExGen := pi_generalized_evars, SVSubst := pi_substituted_svars, KT := pi_uses_kt, FP := pi_framing_patterns) → Γ ⊢i C.[□↦A] ---> C.[□↦B] using (ExGen := pi_generalized_evars, SVSubst := pi_substituted_svars, KT := pi_uses_kt, FP := pi_framing_patterns)
WFA: well_formed A
WFB: well_formed B
H: Γ ⊢i A ---> B using (ExGen := pi_generalized_evars, SVSubst := pi_substituted_svars, KT := pi_uses_kt, FP := pi_framing_patterns)

Γ ⊢i p $ C.[□↦A] ---> p $ C.[□↦B] using (ExGen := pi_generalized_evars, SVSubst := pi_substituted_svars, KT := pi_uses_kt, FP := pi_framing_patterns)
Σ: Signature
Γ: Theory
p: Pattern
C: Application_context
Prf: well_formed p
A, B: Pattern
pi_generalized_evars: coEVarSet
pi_substituted_svars: coSVarSet
pi_uses_kt: bool
pi_framing_patterns: coWfpSet
H0: ∅ ⊆ pi_generalized_evars
H2: ∅ ⊆ pi_substituted_svars
H1: false ==> pi_uses_kt
H4: {[p ↾ Prf]} ∪ frames_of_AC C ⊆ pi_framing_patterns
IHC: ProofInfoLe (ExGen := ∅, SVSubst := ∅, KT := false, FP := frames_of_AC C) (ExGen := pi_generalized_evars, SVSubst := pi_substituted_svars, KT := pi_uses_kt, FP := pi_framing_patterns) → well_formed A → well_formed B → Γ ⊢i A ---> B using (ExGen := pi_generalized_evars, SVSubst := pi_substituted_svars, KT := pi_uses_kt, FP := pi_framing_patterns) → Γ ⊢i C.[□↦A] ---> C.[□↦B] using (ExGen := pi_generalized_evars, SVSubst := pi_substituted_svars, KT := pi_uses_kt, FP := pi_framing_patterns)
WFA: well_formed A
WFB: well_formed B
H: Γ ⊢i A ---> B using (ExGen := pi_generalized_evars, SVSubst := pi_substituted_svars, KT := pi_uses_kt, FP := pi_framing_patterns)

Γ ⊢i p $ C.[□↦A] ---> p $ C.[□↦B] using (ExGen := pi_generalized_evars, SVSubst := pi_substituted_svars, KT := pi_uses_kt, FP := pi_framing_patterns)
Σ: Signature
Γ: Theory
p: Pattern
C: Application_context
Prf: well_formed p
A, B: Pattern
pi_generalized_evars: coEVarSet
pi_substituted_svars: coSVarSet
pi_uses_kt: bool
pi_framing_patterns: coWfpSet
H0: ∅ ⊆ pi_generalized_evars
H2: ∅ ⊆ pi_substituted_svars
H1: true
H4: {[p ↾ Prf]} ∪ frames_of_AC C ⊆ pi_framing_patterns
IHC: ProofInfoLe (ExGen := ∅, SVSubst := ∅, KT := false, FP := frames_of_AC C) (ExGen := pi_generalized_evars, SVSubst := pi_substituted_svars, KT := pi_uses_kt, FP := pi_framing_patterns) → well_formed A → well_formed B → Γ ⊢i A ---> B using (ExGen := pi_generalized_evars, SVSubst := pi_substituted_svars, KT := pi_uses_kt, FP := pi_framing_patterns) → Γ ⊢i C.[□↦A] ---> C.[□↦B] using (ExGen := pi_generalized_evars, SVSubst := pi_substituted_svars, KT := pi_uses_kt, FP := pi_framing_patterns)
WFA: well_formed A
WFB: well_formed B
H: Γ ⊢i A ---> B using (ExGen := pi_generalized_evars, SVSubst := pi_substituted_svars, KT := pi_uses_kt, FP := pi_framing_patterns)

Γ ⊢i p $ C.[□↦A] ---> p $ C.[□↦B] using (ExGen := pi_generalized_evars, SVSubst := pi_substituted_svars, KT := pi_uses_kt, FP := pi_framing_patterns)
Σ: Signature
Γ: Theory
p: Pattern
C: Application_context
Prf: well_formed p
A, B: Pattern
pi_generalized_evars: coEVarSet
pi_substituted_svars: coSVarSet
pi_uses_kt: bool
pi_framing_patterns: coWfpSet
H0: ∅ ⊆ pi_generalized_evars
H2: ∅ ⊆ pi_substituted_svars
H1: true
H4: {[p ↾ Prf]} ∪ frames_of_AC C ⊆ pi_framing_patterns
IHC: ProofInfoLe (ExGen := ∅, SVSubst := ∅, KT := false, FP := frames_of_AC C) (ExGen := pi_generalized_evars, SVSubst := pi_substituted_svars, KT := pi_uses_kt, FP := pi_framing_patterns) → well_formed A → well_formed B → Γ ⊢i A ---> B using (ExGen := pi_generalized_evars, SVSubst := pi_substituted_svars, KT := pi_uses_kt, FP := pi_framing_patterns) → Γ ⊢i C.[□↦A] ---> C.[□↦B] using (ExGen := pi_generalized_evars, SVSubst := pi_substituted_svars, KT := pi_uses_kt, FP := pi_framing_patterns)
WFA: well_formed A
WFB: well_formed B
H: Γ ⊢i A ---> B using (ExGen := pi_generalized_evars, SVSubst := pi_substituted_svars, KT := pi_uses_kt, FP := pi_framing_patterns)

ProofInfoLe (ExGen := ∅, SVSubst := ∅, KT := false, FP := {[p ↾ Prf]}) (ExGen := pi_generalized_evars, SVSubst := pi_substituted_svars, KT := pi_uses_kt, FP := pi_framing_patterns)
Σ: Signature
Γ: Theory
p: Pattern
C: Application_context
Prf: well_formed p
A, B: Pattern
pi_generalized_evars: coEVarSet
pi_substituted_svars: coSVarSet
pi_uses_kt: bool
pi_framing_patterns: coWfpSet
H0: ∅ ⊆ pi_generalized_evars
H2: ∅ ⊆ pi_substituted_svars
H1: true
H4: {[p ↾ Prf]} ∪ frames_of_AC C ⊆ pi_framing_patterns
IHC: ProofInfoLe (ExGen := ∅, SVSubst := ∅, KT := false, FP := frames_of_AC C) (ExGen := pi_generalized_evars, SVSubst := pi_substituted_svars, KT := pi_uses_kt, FP := pi_framing_patterns) → well_formed A → well_formed B → Γ ⊢i A ---> B using (ExGen := pi_generalized_evars, SVSubst := pi_substituted_svars, KT := pi_uses_kt, FP := pi_framing_patterns) → Γ ⊢i C.[□↦A] ---> C.[□↦B] using (ExGen := pi_generalized_evars, SVSubst := pi_substituted_svars, KT := pi_uses_kt, FP := pi_framing_patterns)
WFA: well_formed A
WFB: well_formed B
H: Γ ⊢i A ---> B using (ExGen := pi_generalized_evars, SVSubst := pi_substituted_svars, KT := pi_uses_kt, FP := pi_framing_patterns)
Γ ⊢i C.[□↦A] ---> C.[□↦B] using (ExGen := pi_generalized_evars, SVSubst := pi_substituted_svars, KT := pi_uses_kt, FP := pi_framing_patterns)
Σ: Signature
Γ: Theory
p: Pattern
C: Application_context
Prf: well_formed p
A, B: Pattern
pi_generalized_evars: coEVarSet
pi_substituted_svars: coSVarSet
pi_uses_kt: bool
pi_framing_patterns: coWfpSet
H0: ∅ ⊆ pi_generalized_evars
H2: ∅ ⊆ pi_substituted_svars
H1: true
H4: {[p ↾ Prf]} ∪ frames_of_AC C ⊆ pi_framing_patterns
IHC: ProofInfoLe (ExGen := ∅, SVSubst := ∅, KT := false, FP := frames_of_AC C) (ExGen := pi_generalized_evars, SVSubst := pi_substituted_svars, KT := pi_uses_kt, FP := pi_framing_patterns) → well_formed A → well_formed B → Γ ⊢i A ---> B using (ExGen := pi_generalized_evars, SVSubst := pi_substituted_svars, KT := pi_uses_kt, FP := pi_framing_patterns) → Γ ⊢i C.[□↦A] ---> C.[□↦B] using (ExGen := pi_generalized_evars, SVSubst := pi_substituted_svars, KT := pi_uses_kt, FP := pi_framing_patterns)
WFA: well_formed A
WFB: well_formed B
H: Γ ⊢i A ---> B using (ExGen := pi_generalized_evars, SVSubst := pi_substituted_svars, KT := pi_uses_kt, FP := pi_framing_patterns)

ProofInfoLe (ExGen := ∅, SVSubst := ∅, KT := false, FP := {[p ↾ Prf]}) (ExGen := pi_generalized_evars, SVSubst := pi_substituted_svars, KT := pi_uses_kt, FP := pi_framing_patterns)
Σ: Signature
Γ: Theory
p: Pattern
C: Application_context
Prf: well_formed p
A, B: Pattern
pi_generalized_evars: coEVarSet
pi_substituted_svars: coSVarSet
pi_uses_kt: bool
pi_framing_patterns: coWfpSet
H0: ∅ ⊆ pi_generalized_evars
H2: ∅ ⊆ pi_substituted_svars
H1: true
H4: {[p ↾ Prf]} ∪ frames_of_AC C ⊆ pi_framing_patterns
IHC: ProofInfoLe (ExGen := ∅, SVSubst := ∅, KT := false, FP := frames_of_AC C) (ExGen := pi_generalized_evars, SVSubst := pi_substituted_svars, KT := pi_uses_kt, FP := pi_framing_patterns) → well_formed A → well_formed B → Γ ⊢i A ---> B using (ExGen := pi_generalized_evars, SVSubst := pi_substituted_svars, KT := pi_uses_kt, FP := pi_framing_patterns) → Γ ⊢i C.[□↦A] ---> C.[□↦B] using (ExGen := pi_generalized_evars, SVSubst := pi_substituted_svars, KT := pi_uses_kt, FP := pi_framing_patterns)
WFA: well_formed A
WFB: well_formed B
H: Γ ⊢i A ---> B using (ExGen := pi_generalized_evars, SVSubst := pi_substituted_svars, KT := pi_uses_kt, FP := pi_framing_patterns)

{[p ↾ Prf]} ⊆ pi_framing_patterns
set_solver.
Σ: Signature
Γ: Theory
p: Pattern
C: Application_context
Prf: well_formed p
A, B: Pattern
pi_generalized_evars: coEVarSet
pi_substituted_svars: coSVarSet
pi_uses_kt: bool
pi_framing_patterns: coWfpSet
H0: ∅ ⊆ pi_generalized_evars
H2: ∅ ⊆ pi_substituted_svars
H1: true
H4: {[p ↾ Prf]} ∪ frames_of_AC C ⊆ pi_framing_patterns
IHC: ProofInfoLe (ExGen := ∅, SVSubst := ∅, KT := false, FP := frames_of_AC C) (ExGen := pi_generalized_evars, SVSubst := pi_substituted_svars, KT := pi_uses_kt, FP := pi_framing_patterns) → well_formed A → well_formed B → Γ ⊢i A ---> B using (ExGen := pi_generalized_evars, SVSubst := pi_substituted_svars, KT := pi_uses_kt, FP := pi_framing_patterns) → Γ ⊢i C.[□↦A] ---> C.[□↦B] using (ExGen := pi_generalized_evars, SVSubst := pi_substituted_svars, KT := pi_uses_kt, FP := pi_framing_patterns)
WFA: well_formed A
WFB: well_formed B
H: Γ ⊢i A ---> B using (ExGen := pi_generalized_evars, SVSubst := pi_substituted_svars, KT := pi_uses_kt, FP := pi_framing_patterns)

Γ ⊢i C.[□↦A] ---> C.[□↦B] using (ExGen := pi_generalized_evars, SVSubst := pi_substituted_svars, KT := pi_uses_kt, FP := pi_framing_patterns)
Σ: Signature
Γ: Theory
p: Pattern
C: Application_context
Prf: well_formed p
A, B: Pattern
pi_generalized_evars: coEVarSet
pi_substituted_svars: coSVarSet
pi_uses_kt: bool
pi_framing_patterns: coWfpSet
H0: ∅ ⊆ pi_generalized_evars
H2: ∅ ⊆ pi_substituted_svars
H1: true
H4: {[p ↾ Prf]} ∪ frames_of_AC C ⊆ pi_framing_patterns
IHC: ProofInfoLe (ExGen := ∅, SVSubst := ∅, KT := false, FP := frames_of_AC C) (ExGen := pi_generalized_evars, SVSubst := pi_substituted_svars, KT := pi_uses_kt, FP := pi_framing_patterns) → well_formed A → well_formed B → Γ ⊢i A ---> B using (ExGen := pi_generalized_evars, SVSubst := pi_substituted_svars, KT := pi_uses_kt, FP := pi_framing_patterns) → Γ ⊢i C.[□↦A] ---> C.[□↦B] using (ExGen := pi_generalized_evars, SVSubst := pi_substituted_svars, KT := pi_uses_kt, FP := pi_framing_patterns)
WFA: well_formed A
WFB: well_formed B
H: Γ ⊢i A ---> B using (ExGen := pi_generalized_evars, SVSubst := pi_substituted_svars, KT := pi_uses_kt, FP := pi_framing_patterns)

ProofInfoLe (ExGen := ∅, SVSubst := ∅, KT := false, FP := frames_of_AC C) (ExGen := pi_generalized_evars, SVSubst := pi_substituted_svars, KT := pi_uses_kt, FP := pi_framing_patterns)
Σ: Signature
Γ: Theory
p: Pattern
C: Application_context
Prf: well_formed p
A, B: Pattern
pi_generalized_evars: coEVarSet
pi_substituted_svars: coSVarSet
pi_uses_kt: bool
pi_framing_patterns: coWfpSet
H0: ∅ ⊆ pi_generalized_evars
H2: ∅ ⊆ pi_substituted_svars
H1: true
H4: {[p ↾ Prf]} ∪ frames_of_AC C ⊆ pi_framing_patterns
IHC: ProofInfoLe (ExGen := ∅, SVSubst := ∅, KT := false, FP := frames_of_AC C) (ExGen := pi_generalized_evars, SVSubst := pi_substituted_svars, KT := pi_uses_kt, FP := pi_framing_patterns) → well_formed A → well_formed B → Γ ⊢i A ---> B using (ExGen := pi_generalized_evars, SVSubst := pi_substituted_svars, KT := pi_uses_kt, FP := pi_framing_patterns) → Γ ⊢i C.[□↦A] ---> C.[□↦B] using (ExGen := pi_generalized_evars, SVSubst := pi_substituted_svars, KT := pi_uses_kt, FP := pi_framing_patterns)
WFA: well_formed A
WFB: well_formed B
H: Γ ⊢i A ---> B using (ExGen := pi_generalized_evars, SVSubst := pi_substituted_svars, KT := pi_uses_kt, FP := pi_framing_patterns)
well_formed A
Σ: Signature
Γ: Theory
p: Pattern
C: Application_context
Prf: well_formed p
A, B: Pattern
pi_generalized_evars: coEVarSet
pi_substituted_svars: coSVarSet
pi_uses_kt: bool
pi_framing_patterns: coWfpSet
H0: ∅ ⊆ pi_generalized_evars
H2: ∅ ⊆ pi_substituted_svars
H1: true
H4: {[p ↾ Prf]} ∪ frames_of_AC C ⊆ pi_framing_patterns
IHC: ProofInfoLe (ExGen := ∅, SVSubst := ∅, KT := false, FP := frames_of_AC C) (ExGen := pi_generalized_evars, SVSubst := pi_substituted_svars, KT := pi_uses_kt, FP := pi_framing_patterns) → well_formed A → well_formed B → Γ ⊢i A ---> B using (ExGen := pi_generalized_evars, SVSubst := pi_substituted_svars, KT := pi_uses_kt, FP := pi_framing_patterns) → Γ ⊢i C.[□↦A] ---> C.[□↦B] using (ExGen := pi_generalized_evars, SVSubst := pi_substituted_svars, KT := pi_uses_kt, FP := pi_framing_patterns)
WFA: well_formed A
WFB: well_formed B
H: Γ ⊢i A ---> B using (ExGen := pi_generalized_evars, SVSubst := pi_substituted_svars, KT := pi_uses_kt, FP := pi_framing_patterns)
well_formed B
Σ: Signature
Γ: Theory
p: Pattern
C: Application_context
Prf: well_formed p
A, B: Pattern
pi_generalized_evars: coEVarSet
pi_substituted_svars: coSVarSet
pi_uses_kt: bool
pi_framing_patterns: coWfpSet
H0: ∅ ⊆ pi_generalized_evars
H2: ∅ ⊆ pi_substituted_svars
H1: true
H4: {[p ↾ Prf]} ∪ frames_of_AC C ⊆ pi_framing_patterns
IHC: ProofInfoLe (ExGen := ∅, SVSubst := ∅, KT := false, FP := frames_of_AC C) (ExGen := pi_generalized_evars, SVSubst := pi_substituted_svars, KT := pi_uses_kt, FP := pi_framing_patterns) → well_formed A → well_formed B → Γ ⊢i A ---> B using (ExGen := pi_generalized_evars, SVSubst := pi_substituted_svars, KT := pi_uses_kt, FP := pi_framing_patterns) → Γ ⊢i C.[□↦A] ---> C.[□↦B] using (ExGen := pi_generalized_evars, SVSubst := pi_substituted_svars, KT := pi_uses_kt, FP := pi_framing_patterns)
WFA: well_formed A
WFB: well_formed B
H: Γ ⊢i A ---> B using (ExGen := pi_generalized_evars, SVSubst := pi_substituted_svars, KT := pi_uses_kt, FP := pi_framing_patterns)
Γ ⊢i A ---> B using (ExGen := pi_generalized_evars, SVSubst := pi_substituted_svars, KT := pi_uses_kt, FP := pi_framing_patterns)
Σ: Signature
Γ: Theory
p: Pattern
C: Application_context
Prf: well_formed p
A, B: Pattern
pi_generalized_evars: coEVarSet
pi_substituted_svars: coSVarSet
pi_uses_kt: bool
pi_framing_patterns: coWfpSet
H0: ∅ ⊆ pi_generalized_evars
H2: ∅ ⊆ pi_substituted_svars
H1: true
H4: {[p ↾ Prf]} ∪ frames_of_AC C ⊆ pi_framing_patterns
IHC: ProofInfoLe (ExGen := ∅, SVSubst := ∅, KT := false, FP := frames_of_AC C) (ExGen := pi_generalized_evars, SVSubst := pi_substituted_svars, KT := pi_uses_kt, FP := pi_framing_patterns) → well_formed A → well_formed B → Γ ⊢i A ---> B using (ExGen := pi_generalized_evars, SVSubst := pi_substituted_svars, KT := pi_uses_kt, FP := pi_framing_patterns) → Γ ⊢i C.[□↦A] ---> C.[□↦B] using (ExGen := pi_generalized_evars, SVSubst := pi_substituted_svars, KT := pi_uses_kt, FP := pi_framing_patterns)
WFA: well_formed A
WFB: well_formed B
H: Γ ⊢i A ---> B using (ExGen := pi_generalized_evars, SVSubst := pi_substituted_svars, KT := pi_uses_kt, FP := pi_framing_patterns)

ProofInfoLe (ExGen := ∅, SVSubst := ∅, KT := false, FP := frames_of_AC C) (ExGen := pi_generalized_evars, SVSubst := pi_substituted_svars, KT := pi_uses_kt, FP := pi_framing_patterns)
Σ: Signature
Γ: Theory
p: Pattern
C: Application_context
Prf: well_formed p
A, B: Pattern
pi_generalized_evars: coEVarSet
pi_substituted_svars: coSVarSet
pi_uses_kt: bool
pi_framing_patterns: coWfpSet
H0: ∅ ⊆ pi_generalized_evars
H2: ∅ ⊆ pi_substituted_svars
H1: true
H4: {[p ↾ Prf]} ∪ frames_of_AC C ⊆ pi_framing_patterns
IHC: ProofInfoLe (ExGen := ∅, SVSubst := ∅, KT := false, FP := frames_of_AC C) (ExGen := pi_generalized_evars, SVSubst := pi_substituted_svars, KT := pi_uses_kt, FP := pi_framing_patterns) → well_formed A → well_formed B → Γ ⊢i A ---> B using (ExGen := pi_generalized_evars, SVSubst := pi_substituted_svars, KT := pi_uses_kt, FP := pi_framing_patterns) → Γ ⊢i C.[□↦A] ---> C.[□↦B] using (ExGen := pi_generalized_evars, SVSubst := pi_substituted_svars, KT := pi_uses_kt, FP := pi_framing_patterns)
WFA: well_formed A
WFB: well_formed B
H: Γ ⊢i A ---> B using (ExGen := pi_generalized_evars, SVSubst := pi_substituted_svars, KT := pi_uses_kt, FP := pi_framing_patterns)
Γ ⊢i A ---> B using (ExGen := pi_generalized_evars, SVSubst := pi_substituted_svars, KT := pi_uses_kt, FP := pi_framing_patterns)
Σ: Signature
Γ: Theory
p: Pattern
C: Application_context
Prf: well_formed p
A, B: Pattern
pi_generalized_evars: coEVarSet
pi_substituted_svars: coSVarSet
pi_uses_kt: bool
pi_framing_patterns: coWfpSet
H0: ∅ ⊆ pi_generalized_evars
H2: ∅ ⊆ pi_substituted_svars
H1: true
H4: {[p ↾ Prf]} ∪ frames_of_AC C ⊆ pi_framing_patterns
IHC: ProofInfoLe (ExGen := ∅, SVSubst := ∅, KT := false, FP := frames_of_AC C) (ExGen := pi_generalized_evars, SVSubst := pi_substituted_svars, KT := pi_uses_kt, FP := pi_framing_patterns) → well_formed A → well_formed B → Γ ⊢i A ---> B using (ExGen := pi_generalized_evars, SVSubst := pi_substituted_svars, KT := pi_uses_kt, FP := pi_framing_patterns) → Γ ⊢i C.[□↦A] ---> C.[□↦B] using (ExGen := pi_generalized_evars, SVSubst := pi_substituted_svars, KT := pi_uses_kt, FP := pi_framing_patterns)
WFA: well_formed A
WFB: well_formed B
H: Γ ⊢i A ---> B using (ExGen := pi_generalized_evars, SVSubst := pi_substituted_svars, KT := pi_uses_kt, FP := pi_framing_patterns)

ProofInfoLe (ExGen := ∅, SVSubst := ∅, KT := false, FP := frames_of_AC C) (ExGen := pi_generalized_evars, SVSubst := pi_substituted_svars, KT := pi_uses_kt, FP := pi_framing_patterns)
Σ: Signature
Γ: Theory
p: Pattern
C: Application_context
Prf: well_formed p
A, B: Pattern
pi_generalized_evars: coEVarSet
pi_substituted_svars: coSVarSet
pi_uses_kt: bool
pi_framing_patterns: coWfpSet
H0: ∅ ⊆ pi_generalized_evars
H2: ∅ ⊆ pi_substituted_svars
H1: true
H4: {[p ↾ Prf]} ∪ frames_of_AC C ⊆ pi_framing_patterns
IHC: ProofInfoLe (ExGen := ∅, SVSubst := ∅, KT := false, FP := frames_of_AC C) (ExGen := pi_generalized_evars, SVSubst := pi_substituted_svars, KT := pi_uses_kt, FP := pi_framing_patterns) → well_formed A → well_formed B → Γ ⊢i A ---> B using (ExGen := pi_generalized_evars, SVSubst := pi_substituted_svars, KT := pi_uses_kt, FP := pi_framing_patterns) → Γ ⊢i C.[□↦A] ---> C.[□↦B] using (ExGen := pi_generalized_evars, SVSubst := pi_substituted_svars, KT := pi_uses_kt, FP := pi_framing_patterns)
WFA: well_formed A
WFB: well_formed B
H: Γ ⊢i A ---> B using (ExGen := pi_generalized_evars, SVSubst := pi_substituted_svars, KT := pi_uses_kt, FP := pi_framing_patterns)

frames_of_AC C ⊆ pi_framing_patterns
set_solver. Defined.
Σ: Signature
Γ: Theory
A: Pattern
C: Application_context
i: ProofInfo
pile: ProofInfoLe (ExGen := ∅, SVSubst := ∅, KT := false, FP := frames_of_AC C) i

well_formed A → Γ ⊢i A using i → Γ ⊢i ! C.[□↦! A] using i
Σ: Signature
Γ: Theory
A: Pattern
C: Application_context
i: ProofInfo
pile: ProofInfoLe (ExGen := ∅, SVSubst := ∅, KT := false, FP := frames_of_AC C) i

well_formed A → Γ ⊢i A using i → Γ ⊢i ! C.[□↦! A] using i
Σ: Signature
Γ: Theory
A: Pattern
C: Application_context
i: ProofInfo
pile: ProofInfoLe (ExGen := ∅, SVSubst := ∅, KT := false, FP := frames_of_AC C) i
WFA: well_formed A
H: Γ ⊢i A using i

Γ ⊢i ! C.[□↦! A] using i
Σ: Signature
Γ: Theory
A: Pattern
C: Application_context
i: ProofInfo
pile: ProofInfoLe (ExGen := ∅, SVSubst := ∅, KT := false, FP := frames_of_AC C) i
WFA: well_formed A
H: Γ ⊢i A using i
ANNA: Γ ⊢i ! ! A using i

Γ ⊢i ! C.[□↦! A] using i
Σ: Signature
Γ: Theory
A: Pattern
C: Application_context
i: ProofInfo
pile: ProofInfoLe (ExGen := ∅, SVSubst := ∅, KT := false, FP := frames_of_AC C) i
WFA: well_formed A
H: Γ ⊢i A using i
ANNA: Γ ⊢i ! A ---> ⊥ using i

Γ ⊢i ! C.[□↦! A] using i
Σ: Signature
Γ: Theory
A: Pattern
C: Application_context
i: ProofInfo
pile: ProofInfoLe (ExGen := ∅, SVSubst := ∅, KT := false, FP := frames_of_AC C) i
WFA: well_formed A
H: Γ ⊢i A using i
ANNA: Γ ⊢i ! A ---> ⊥ using i
EF: Γ ⊢i C.[□↦! A] ---> C.[□↦⊥] using i

Γ ⊢i ! C.[□↦! A] using i
Σ: Signature
Γ: Theory
A: Pattern
C: Application_context
i: ProofInfo
pile: ProofInfoLe (ExGen := ∅, SVSubst := ∅, KT := false, FP := frames_of_AC C) i
WFA: well_formed A
H: Γ ⊢i A using i
ANNA: Γ ⊢i ! A ---> ⊥ using i
EF: Γ ⊢i C.[□↦! A] ---> C.[□↦⊥] using i
PB: Γ ⊢i C.[□↦⊥] ---> ⊥ using (ExGen := ∅, SVSubst := ∅, KT := false, FP := frames_of_AC C)

Γ ⊢i ! C.[□↦! A] using i
Σ: Signature
Γ: Theory
A: Pattern
C: Application_context
i: ProofInfo
pile: ProofInfoLe (ExGen := ∅, SVSubst := ∅, KT := false, FP := frames_of_AC C) i
WFA: well_formed A
H: Γ ⊢i A using i
ANNA: Γ ⊢i ! A ---> ⊥ using i
EF: Γ ⊢i C.[□↦! A] ---> C.[□↦⊥] using i
PB: Γ ⊢i C.[□↦⊥] ---> ⊥ using i

Γ ⊢i ! C.[□↦! A] using i
Σ: Signature
Γ: Theory
A: Pattern
C: Application_context
i: ProofInfo
pile: ProofInfoLe (ExGen := ∅, SVSubst := ∅, KT := false, FP := frames_of_AC C) i
WFA: well_formed A
H: Γ ⊢i A using i
ANNA: Γ ⊢i ! A ---> ⊥ using i
EF: Γ ⊢i C.[□↦! A] ---> C.[□↦⊥] using i
PB: Γ ⊢i C.[□↦⊥] ---> ⊥ using (ExGen := ∅, SVSubst := ∅, KT := false, FP := frames_of_AC C)
ProofInfoLe (ExGen := ∅, SVSubst := ∅, KT := false, FP := frames_of_AC C) i
Σ: Signature
Γ: Theory
A: Pattern
C: Application_context
i: ProofInfo
pile: ProofInfoLe (ExGen := ∅, SVSubst := ∅, KT := false, FP := frames_of_AC C) i
WFA: well_formed A
H: Γ ⊢i A using i
ANNA: Γ ⊢i ! A ---> ⊥ using i
EF: Γ ⊢i C.[□↦! A] ---> C.[□↦⊥] using i
PB: Γ ⊢i C.[□↦⊥] ---> ⊥ using i

Γ ⊢i ! C.[□↦! A] using i
Σ: Signature
Γ: Theory
A: Pattern
C: Application_context
i: ProofInfo
pile: ProofInfoLe (ExGen := ∅, SVSubst := ∅, KT := false, FP := frames_of_AC C) i
WFA: well_formed A
H: Γ ⊢i A using i
ANNA: Γ ⊢i ! A ---> ⊥ using i
EF: Γ ⊢i C.[□↦! A] ---> C.[□↦⊥] using i
PB: Γ ⊢i C.[□↦⊥] ---> ⊥ using i
TRANS:= syllogism_meta ?Goal0 ?Goal1 ?Goal2 EF PB: Γ ⊢i C.[□↦! A] ---> ⊥ using i

Γ ⊢i ! C.[□↦! A] using i
apply TRANS.
Σ: Signature
Γ: Theory
A: Pattern
C: Application_context
i: ProofInfo
pile: ProofInfoLe (ExGen := ∅, SVSubst := ∅, KT := false, FP := frames_of_AC C) i
WFA: well_formed A
H: Γ ⊢i A using i

well_formed A
Σ: Signature
Γ: Theory
A: Pattern
C: Application_context
i: ProofInfo
pile: ProofInfoLe (ExGen := ∅, SVSubst := ∅, KT := false, FP := frames_of_AC C) i
WFA: well_formed A
H: Γ ⊢i A using i
ANNA: Γ ⊢i ! A ---> ⊥ using i
EF: Γ ⊢i C.[□↦! A] ---> C.[□↦⊥] using i
PB: Γ ⊢i C.[□↦⊥] ---> ⊥ using i
well_formed C.[□↦! A]
Σ: Signature
Γ: Theory
A: Pattern
C: Application_context
i: ProofInfo
pile: ProofInfoLe (ExGen := ∅, SVSubst := ∅, KT := false, FP := frames_of_AC C) i
WFA: well_formed A
H: Γ ⊢i A using i
ANNA: Γ ⊢i ! A ---> ⊥ using i
EF: Γ ⊢i C.[□↦! A] ---> C.[□↦⊥] using i
PB: Γ ⊢i C.[□↦⊥] ---> ⊥ using i
well_formed C.[□↦⊥]
Σ: Signature
Γ: Theory
A: Pattern
C: Application_context
i: ProofInfo
pile: ProofInfoLe (ExGen := ∅, SVSubst := ∅, KT := false, FP := frames_of_AC C) i
WFA: well_formed A
H: Γ ⊢i A using i
ANNA: Γ ⊢i ! A ---> ⊥ using i
EF: Γ ⊢i C.[□↦! A] ---> C.[□↦⊥] using i
PB: Γ ⊢i C.[□↦⊥] ---> ⊥ using i
well_formed ⊥
all: wf_auto2. Defined.
Σ: Signature
Γ: Theory
C: Application_context
A: Pattern
i: ProofInfo
pile: ProofInfoLe (ExGen := ∅, SVSubst := ∅, KT := false, FP := frames_of_AC C) i

well_formed A → Γ ⊢i A ---> ⊥ using i → Γ ⊢i C.[□↦A] ---> ⊥ using i
Σ: Signature
Γ: Theory
C: Application_context
A: Pattern
i: ProofInfo
pile: ProofInfoLe (ExGen := ∅, SVSubst := ∅, KT := false, FP := frames_of_AC C) i

well_formed A → Γ ⊢i A ---> ⊥ using i → Γ ⊢i C.[□↦A] ---> ⊥ using i
Σ: Signature
Γ: Theory
C: Application_context
A: Pattern
i: ProofInfo
pile: ProofInfoLe (ExGen := ∅, SVSubst := ∅, KT := false, FP := frames_of_AC C) i
WFA: well_formed A
H: Γ ⊢i A ---> ⊥ using i

Γ ⊢i C.[□↦A] ---> ⊥ using i
Σ: Signature
Γ: Theory
C: Application_context
A: Pattern
i: ProofInfo
pile: ProofInfoLe (ExGen := ∅, SVSubst := ∅, KT := false, FP := frames_of_AC C) i
WFA: well_formed A
H: Γ ⊢i A ---> ⊥ using i
FR: Γ ⊢i C.[□↦A] ---> C.[□↦⊥] using i

Γ ⊢i C.[□↦A] ---> ⊥ using i
Σ: Signature
Γ: Theory
C: Application_context
A: Pattern
i: ProofInfo
pile: ProofInfoLe (ExGen := ∅, SVSubst := ∅, KT := false, FP := frames_of_AC C) i
WFA: well_formed A
H: Γ ⊢i A ---> ⊥ using i
FR: Γ ⊢i C.[□↦A] ---> C.[□↦⊥] using i
BPR: Γ ⊢i C.[□↦⊥] ---> ⊥ using (ExGen := ∅, SVSubst := ∅, KT := false, FP := frames_of_AC C)

Γ ⊢i C.[□↦A] ---> ⊥ using i
Σ: Signature
Γ: Theory
C: Application_context
A: Pattern
i: ProofInfo
pile: ProofInfoLe (ExGen := ∅, SVSubst := ∅, KT := false, FP := frames_of_AC C) i
WFA: well_formed A
H: Γ ⊢i A ---> ⊥ using i
FR: Γ ⊢i C.[□↦A] ---> C.[□↦⊥] using i
BPR: Γ ⊢i C.[□↦⊥] ---> ⊥ using i

Γ ⊢i C.[□↦A] ---> ⊥ using i
Σ: Signature
Γ: Theory
C: Application_context
A: Pattern
i: ProofInfo
pile: ProofInfoLe (ExGen := ∅, SVSubst := ∅, KT := false, FP := frames_of_AC C) i
WFA: well_formed A
H: Γ ⊢i A ---> ⊥ using i
FR: Γ ⊢i C.[□↦A] ---> C.[□↦⊥] using i
BPR: Γ ⊢i C.[□↦⊥] ---> ⊥ using (ExGen := ∅, SVSubst := ∅, KT := false, FP := frames_of_AC C)
ProofInfoLe (ExGen := ∅, SVSubst := ∅, KT := false, FP := frames_of_AC C) i
Σ: Signature
Γ: Theory
C: Application_context
A: Pattern
i: ProofInfo
pile: ProofInfoLe (ExGen := ∅, SVSubst := ∅, KT := false, FP := frames_of_AC C) i
WFA: well_formed A
H: Γ ⊢i A ---> ⊥ using i
FR: Γ ⊢i C.[□↦A] ---> C.[□↦⊥] using i
BPR: Γ ⊢i C.[□↦⊥] ---> ⊥ using i

Γ ⊢i C.[□↦A] ---> ⊥ using i
Σ: Signature
Γ: Theory
C: Application_context
A: Pattern
i: ProofInfo
pile: ProofInfoLe (ExGen := ∅, SVSubst := ∅, KT := false, FP := frames_of_AC C) i
WFA: well_formed A
H: Γ ⊢i A ---> ⊥ using i
FR: Γ ⊢i C.[□↦A] ---> C.[□↦⊥] using i
BPR: Γ ⊢i C.[□↦⊥] ---> ⊥ using i
TRANS: Γ ⊢i C.[□↦A] ---> ⊥ using i

Γ ⊢i C.[□↦A] ---> ⊥ using i
exact TRANS.
Σ: Signature
Γ: Theory
C: Application_context
A: Pattern
i: ProofInfo
pile: ProofInfoLe (ExGen := ∅, SVSubst := ∅, KT := false, FP := frames_of_AC C) i
WFA: well_formed A
H: Γ ⊢i A ---> ⊥ using i
FR: Γ ⊢i C.[□↦A] ---> C.[□↦⊥] using i
BPR: Γ ⊢i C.[□↦⊥] ---> ⊥ using i

well_formed C.[□↦A]
Σ: Signature
Γ: Theory
C: Application_context
A: Pattern
i: ProofInfo
pile: ProofInfoLe (ExGen := ∅, SVSubst := ∅, KT := false, FP := frames_of_AC C) i
WFA: well_formed A
H: Γ ⊢i A ---> ⊥ using i
FR: Γ ⊢i C.[□↦A] ---> C.[□↦⊥] using i
BPR: Γ ⊢i C.[□↦⊥] ---> ⊥ using i
well_formed C.[□↦⊥]
Σ: Signature
Γ: Theory
C: Application_context
A: Pattern
i: ProofInfo
pile: ProofInfoLe (ExGen := ∅, SVSubst := ∅, KT := false, FP := frames_of_AC C) i
WFA: well_formed A
H: Γ ⊢i A ---> ⊥ using i
FR: Γ ⊢i C.[□↦A] ---> C.[□↦⊥] using i
BPR: Γ ⊢i C.[□↦⊥] ---> ⊥ using i
well_formed ⊥
all: wf_auto2. Defined. End FOL_helpers.
Σ: Signature
Γ: Theory
AC: Application_context

Γ ⊢i AC.[□↦⊥] <---> ⊥ using (ExGen := ∅, SVSubst := ∅, KT := false, FP := frames_of_AC AC)
Σ: Signature
Γ: Theory
AC: Application_context

Γ ⊢i AC.[□↦⊥] <---> ⊥ using (ExGen := ∅, SVSubst := ∅, KT := false, FP := frames_of_AC AC)
Σ: Signature
Γ: Theory
AC: Application_context

well_formed AC.[□↦⊥]
Σ: Signature
Γ: Theory
AC: Application_context
well_formed ⊥
Σ: Signature
Γ: Theory
AC: Application_context
Γ ⊢i AC.[□↦⊥] ---> ⊥ using (ExGen := ∅, SVSubst := ∅, KT := false, FP := frames_of_AC AC)
Σ: Signature
Γ: Theory
AC: Application_context
Γ ⊢i ⊥ ---> AC.[□↦⊥] using (ExGen := ∅, SVSubst := ∅, KT := false, FP := frames_of_AC AC)
Falling back on (well_formed_xy 0 0 AC.[□↦⊥] = true)
Σ: Signature
Γ: Theory
AC: Application_context

Γ ⊢i AC.[□↦⊥] ---> ⊥ using (ExGen := ∅, SVSubst := ∅, KT := false, FP := frames_of_AC AC)
Σ: Signature
Γ: Theory
AC: Application_context
Γ ⊢i ⊥ ---> AC.[□↦⊥] using (ExGen := ∅, SVSubst := ∅, KT := false, FP := frames_of_AC AC)
Σ: Signature
Γ: Theory
AC: Application_context

ProofInfoLe (ExGen := ∅, SVSubst := ∅, KT := false, FP := frames_of_AC AC) (ExGen := ∅, SVSubst := ∅, KT := false, FP := frames_of_AC AC)
Σ: Signature
Γ: Theory
AC: Application_context
well_formed ⊥
Σ: Signature
Γ: Theory
AC: Application_context
Γ ⊢i ⊥ ---> ⊥ using (ExGen := ∅, SVSubst := ∅, KT := false, FP := frames_of_AC AC)
Σ: Signature
Γ: Theory
AC: Application_context
Γ ⊢i ⊥ ---> AC.[□↦⊥] using (ExGen := ∅, SVSubst := ∅, KT := false, FP := frames_of_AC AC)
Σ: Signature
Γ: Theory
AC: Application_context

well_formed ⊥
Σ: Signature
Γ: Theory
AC: Application_context
Γ ⊢i ⊥ ---> ⊥ using (ExGen := ∅, SVSubst := ∅, KT := false, FP := frames_of_AC AC)
Σ: Signature
Γ: Theory
AC: Application_context
Γ ⊢i ⊥ ---> AC.[□↦⊥] using (ExGen := ∅, SVSubst := ∅, KT := false, FP := frames_of_AC AC)
Σ: Signature
Γ: Theory
AC: Application_context

Γ ⊢i ⊥ ---> ⊥ using (ExGen := ∅, SVSubst := ∅, KT := false, FP := frames_of_AC AC)
Σ: Signature
Γ: Theory
AC: Application_context
Γ ⊢i ⊥ ---> AC.[□↦⊥] using (ExGen := ∅, SVSubst := ∅, KT := false, FP := frames_of_AC AC)
Σ: Signature
Γ: Theory
AC: Application_context

Γ ⊢i ⊥ ---> ⊥ using (ExGen := ∅, SVSubst := ∅, KT := false, FP := frames_of_AC AC)
Σ: Signature
Γ: Theory
AC: Application_context

Γ ⊢i ⊥ ---> ⊥ using BasicReasoning
Σ: Signature
Γ: Theory
AC: Application_context

well_formed ⊥
reflexivity.
Σ: Signature
Γ: Theory
AC: Application_context

Γ ⊢i ⊥ ---> AC.[□↦⊥] using (ExGen := ∅, SVSubst := ∅, KT := false, FP := frames_of_AC AC)
Σ: Signature
Γ: Theory
AC: Application_context

Γ ⊢i ⊥ ---> AC.[□↦⊥] using (ExGen := ∅, SVSubst := ∅, KT := false, FP := frames_of_AC AC)
Σ: Signature
Γ: Theory
AC: Application_context

Γ ⊢i ⊥ ---> AC.[□↦⊥] using BasicReasoning
Σ: Signature
Γ: Theory
AC: Application_context

well_formed AC.[□↦⊥]
Falling back on (well_formed_xy 0 0 AC.[□↦⊥] = true)
} Defined.
Σ: Signature
Γ: Theory
ϕ₁, ϕ₂, ψ: Pattern

well_formed ϕ₁ → well_formed ϕ₂ → well_formed ψ → Γ ⊢i (ϕ₁ or ϕ₂) $ ψ ---> ϕ₁ $ ψ or ϕ₂ $ ψ using BasicReasoning
Σ: Signature
Γ: Theory
ϕ₁, ϕ₂, ψ: Pattern

well_formed ϕ₁ → well_formed ϕ₂ → well_formed ψ → Γ ⊢i (ϕ₁ or ϕ₂) $ ψ ---> ϕ₁ $ ψ or ϕ₂ $ ψ using BasicReasoning
Σ: Signature
Γ: Theory
ϕ₁, ϕ₂, ψ: Pattern
wfϕ₁: well_formed ϕ₁
wfϕ₂: well_formed ϕ₂
wfψ: well_formed ψ

Γ ⊢i (ϕ₁ or ϕ₂) $ ψ ---> ϕ₁ $ ψ or ϕ₂ $ ψ using BasicReasoning
Σ: Signature
Γ: Theory
ϕ₁, ϕ₂, ψ: Pattern
wfϕ₁: well_formed ϕ₁
wfϕ₂: well_formed ϕ₂
wfψ: well_formed ψ

ML_proof_system Γ ((ϕ₁ or ϕ₂) $ ψ ---> ϕ₁ $ ψ or ϕ₂ $ ψ)
Σ: Signature
Γ: Theory
ϕ₁, ϕ₂, ψ: Pattern
wfϕ₁: well_formed ϕ₁
wfϕ₂: well_formed ϕ₂
wfψ: well_formed ψ
ProofInfoMeaning Γ ((ϕ₁ or ϕ₂) $ ψ ---> ϕ₁ $ ψ or ϕ₂ $ ψ) ?pf BasicReasoning
Σ: Signature
Γ: Theory
ϕ₁, ϕ₂, ψ: Pattern
wfϕ₁: well_formed ϕ₁
wfϕ₂: well_formed ϕ₂
wfψ: well_formed ψ

ML_proof_system Γ ((ϕ₁ or ϕ₂) $ ψ ---> ϕ₁ $ ψ or ϕ₂ $ ψ)
apply Prop_disj_left; assumption.
Σ: Signature
Γ: Theory
ϕ₁, ϕ₂, ψ: Pattern
wfϕ₁: well_formed ϕ₁
wfϕ₂: well_formed ϕ₂
wfψ: well_formed ψ

ProofInfoMeaning Γ ((ϕ₁ or ϕ₂) $ ψ ---> ϕ₁ $ ψ or ϕ₂ $ ψ) (Prop_disj_left Γ ϕ₁ ϕ₂ ψ wfϕ₁ wfϕ₂ wfψ) BasicReasoning
Σ: Signature
Γ: Theory
ϕ₁, ϕ₂, ψ: Pattern
wfϕ₁: well_formed ϕ₁
wfϕ₂: well_formed ϕ₂
wfψ: well_formed ψ

ProofInfoMeaning Γ ((ϕ₁ or ϕ₂) $ ψ ---> ϕ₁ $ ψ or ϕ₂ $ ψ) (Prop_disj_left Γ ϕ₁ ϕ₂ ψ wfϕ₁ wfϕ₂ wfψ) BasicReasoning
abstract ( constructor; simpl; [(set_solver)|(set_solver)|(reflexivity)|(set_solver)] ). } Defined.
Σ: Signature
Γ: Theory
ϕ₁, ϕ₂, ψ: Pattern

well_formed ϕ₁ → well_formed ϕ₂ → well_formed ψ → Γ ⊢i ψ $ (ϕ₁ or ϕ₂) ---> ψ $ ϕ₁ or ψ $ ϕ₂ using BasicReasoning
Σ: Signature
Γ: Theory
ϕ₁, ϕ₂, ψ: Pattern

well_formed ϕ₁ → well_formed ϕ₂ → well_formed ψ → Γ ⊢i ψ $ (ϕ₁ or ϕ₂) ---> ψ $ ϕ₁ or ψ $ ϕ₂ using BasicReasoning
Σ: Signature
Γ: Theory
ϕ₁, ϕ₂, ψ: Pattern
wfϕ₁: well_formed ϕ₁
wfϕ₂: well_formed ϕ₂
wfψ: well_formed ψ

Γ ⊢i ψ $ (ϕ₁ or ϕ₂) ---> ψ $ ϕ₁ or ψ $ ϕ₂ using BasicReasoning
Σ: Signature
Γ: Theory
ϕ₁, ϕ₂, ψ: Pattern
wfϕ₁: well_formed ϕ₁
wfϕ₂: well_formed ϕ₂
wfψ: well_formed ψ

ML_proof_system Γ (ψ $ (ϕ₁ or ϕ₂) ---> ψ $ ϕ₁ or ψ $ ϕ₂)
Σ: Signature
Γ: Theory
ϕ₁, ϕ₂, ψ: Pattern
wfϕ₁: well_formed ϕ₁
wfϕ₂: well_formed ϕ₂
wfψ: well_formed ψ
ProofInfoMeaning Γ (ψ $ (ϕ₁ or ϕ₂) ---> ψ $ ϕ₁ or ψ $ ϕ₂) ?pf BasicReasoning
Σ: Signature
Γ: Theory
ϕ₁, ϕ₂, ψ: Pattern
wfϕ₁: well_formed ϕ₁
wfϕ₂: well_formed ϕ₂
wfψ: well_formed ψ

ML_proof_system Γ (ψ $ (ϕ₁ or ϕ₂) ---> ψ $ ϕ₁ or ψ $ ϕ₂)
apply Prop_disj_right; assumption.
Σ: Signature
Γ: Theory
ϕ₁, ϕ₂, ψ: Pattern
wfϕ₁: well_formed ϕ₁
wfϕ₂: well_formed ϕ₂
wfψ: well_formed ψ

ProofInfoMeaning Γ (ψ $ (ϕ₁ or ϕ₂) ---> ψ $ ϕ₁ or ψ $ ϕ₂) (Prop_disj_right Γ ϕ₁ ϕ₂ ψ wfϕ₁ wfϕ₂ wfψ) BasicReasoning
Σ: Signature
Γ: Theory
ϕ₁, ϕ₂, ψ: Pattern
wfϕ₁: well_formed ϕ₁
wfϕ₂: well_formed ϕ₂
wfψ: well_formed ψ

ProofInfoMeaning Γ (ψ $ (ϕ₁ or ϕ₂) ---> ψ $ ϕ₁ or ψ $ ϕ₂) (Prop_disj_right Γ ϕ₁ ϕ₂ ψ wfϕ₁ wfϕ₂ wfψ) BasicReasoning
abstract ( constructor; simpl; [(set_solver)|(set_solver)|(reflexivity)|(set_solver)] ). } Defined.
Σ: Signature
Γ: Theory
AC: Application_context
p, q: Pattern

well_formed p → well_formed q → Γ ⊢i AC.[□↦p or q] <---> AC.[□↦p] or AC.[□↦q] using (ExGen := ∅, SVSubst := ∅, KT := false, FP := frames_of_AC AC)
Σ: Signature
Γ: Theory
AC: Application_context
p, q: Pattern

well_formed p → well_formed q → Γ ⊢i AC.[□↦p or q] <---> AC.[□↦p] or AC.[□↦q] using (ExGen := ∅, SVSubst := ∅, KT := false, FP := frames_of_AC AC)
Σ: Signature
Γ: Theory
AC: Application_context
p, q: Pattern
wfp: well_formed p
wfq: well_formed q

Γ ⊢i AC.[□↦p or q] <---> AC.[□↦p] or AC.[□↦q] using (ExGen := ∅, SVSubst := ∅, KT := false, FP := frames_of_AC AC)
Σ: Signature
Γ: Theory
p, q: Pattern
wfp: well_formed p
wfq: well_formed q

Γ ⊢i p or q <---> p or q using (ExGen := ∅, SVSubst := ∅, KT := false, FP := ∅)
Σ: Signature
Γ: Theory
AC: Application_context
p0: Pattern
Prf: well_formed p0
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
IHAC: Γ ⊢i AC.[□↦p or q] <---> AC.[□↦p] or AC.[□↦q] using (ExGen := ∅, SVSubst := ∅, KT := false, FP := frames_of_AC AC)
Γ ⊢i AC.[□↦p or q] $ p0 <---> AC.[□↦p] $ p0 or AC.[□↦q] $ p0 using (ExGen := ∅, SVSubst := ∅, KT := false, FP := {[p0 ↾ Prf]} ∪ frames_of_AC AC)
Σ: Signature
Γ: Theory
p0: Pattern
AC: Application_context
Prf: well_formed p0
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
IHAC: Γ ⊢i AC.[□↦p or q] <---> AC.[□↦p] or AC.[□↦q] using (ExGen := ∅, SVSubst := ∅, KT := false, FP := frames_of_AC AC)
Γ ⊢i p0 $ AC.[□↦p or q] <---> p0 $ AC.[□↦p] or p0 $ AC.[□↦q] using (ExGen := ∅, SVSubst := ∅, KT := false, FP := {[p0 ↾ Prf]} ∪ frames_of_AC AC)
Σ: Signature
Γ: Theory
p, q: Pattern
wfp: well_formed p
wfq: well_formed q

Γ ⊢i p or q <---> p or q using (ExGen := ∅, SVSubst := ∅, KT := false, FP := ∅)
Σ: Signature
Γ: Theory
p, q: Pattern
wfp: well_formed p
wfq: well_formed q

Γ ⊢i p or q <---> p or q using BasicReasoning
apply pf_iff_equiv_refl; wf_auto2.
Σ: Signature
Γ: Theory
AC: Application_context
p0: Pattern
Prf: well_formed p0
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
IHAC: Γ ⊢i AC.[□↦p or q] <---> AC.[□↦p] or AC.[□↦q] using (ExGen := ∅, SVSubst := ∅, KT := false, FP := frames_of_AC AC)

Γ ⊢i AC.[□↦p or q] $ p0 <---> AC.[□↦p] $ p0 or AC.[□↦q] $ p0 using (ExGen := ∅, SVSubst := ∅, KT := false, FP := {[p0 ↾ Prf]} ∪ frames_of_AC AC)
Σ: Signature
Γ: Theory
AC: Application_context
p0: Pattern
Prf: well_formed p0
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
IHAC: ((Γ ⊢i AC.[□↦p or q] ---> AC.[□↦p] or AC.[□↦q] using (ExGen := ∅, SVSubst := ∅, KT := false, FP := frames_of_AC AC)) * (Γ ⊢i AC.[□↦p] or AC.[□↦q] ---> AC.[□↦p or q] using (ExGen := ∅, SVSubst := ∅, KT := false, FP := frames_of_AC AC)))%type

Γ ⊢i AC.[□↦p or q] $ p0 <---> AC.[□↦p] $ p0 or AC.[□↦q] $ p0 using (ExGen := ∅, SVSubst := ∅, KT := false, FP := {[p0 ↾ Prf]} ∪ frames_of_AC AC)
Σ: Signature
Γ: Theory
AC: Application_context
p0: Pattern
Prf: well_formed p0
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
IH1: Γ ⊢i AC.[□↦p or q] ---> AC.[□↦p] or AC.[□↦q] using (ExGen := ∅, SVSubst := ∅, KT := false, FP := frames_of_AC AC)
IH2: Γ ⊢i AC.[□↦p] or AC.[□↦q] ---> AC.[□↦p or q] using (ExGen := ∅, SVSubst := ∅, KT := false, FP := frames_of_AC AC)

Γ ⊢i AC.[□↦p or q] $ p0 <---> AC.[□↦p] $ p0 or AC.[□↦q] $ p0 using (ExGen := ∅, SVSubst := ∅, KT := false, FP := {[p0 ↾ Prf]} ∪ frames_of_AC AC)
Σ: Signature
Γ: Theory
AC: Application_context
p0: Pattern
Prf: well_formed p0
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
IH1: Γ ⊢i AC.[□↦p or q] ---> AC.[□↦p] or AC.[□↦q] using (ExGen := ∅, SVSubst := ∅, KT := false, FP := frames_of_AC AC)
IH2: Γ ⊢i AC.[□↦p] or AC.[□↦q] ---> AC.[□↦p or q] using (ExGen := ∅, SVSubst := ∅, KT := false, FP := frames_of_AC AC)
i: ProofInfo
Heqi: i = (ExGen := ∅, SVSubst := ∅, KT := false, FP := {[p0 ↾ Prf]} ∪ frames_of_AC AC)

Γ ⊢i AC.[□↦p or q] $ p0 <---> AC.[□↦p] $ p0 or AC.[□↦q] $ p0 using i
Σ: Signature
Γ: Theory
AC: Application_context
p0: Pattern
Prf: well_formed p0
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
IH1: Γ ⊢i AC.[□↦p or q] ---> AC.[□↦p] or AC.[□↦q] using (ExGen := ∅, SVSubst := ∅, KT := false, FP := frames_of_AC AC)
IH2: Γ ⊢i AC.[□↦p] or AC.[□↦q] ---> AC.[□↦p or q] using (ExGen := ∅, SVSubst := ∅, KT := false, FP := frames_of_AC AC)
i: ProofInfo
Heqi: i = (ExGen := ∅, SVSubst := ∅, KT := false, FP := {[p0 ↾ Prf]} ∪ frames_of_AC AC)

Γ ⊢i AC.[□↦p or q] $ p0 ---> AC.[□↦p] $ p0 or AC.[□↦q] $ p0 using i
Σ: Signature
Γ: Theory
AC: Application_context
p0: Pattern
Prf: well_formed p0
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
IH1: Γ ⊢i AC.[□↦p or q] ---> AC.[□↦p] or AC.[□↦q] using (ExGen := ∅, SVSubst := ∅, KT := false, FP := frames_of_AC AC)
IH2: Γ ⊢i AC.[□↦p] or AC.[□↦q] ---> AC.[□↦p or q] using (ExGen := ∅, SVSubst := ∅, KT := false, FP := frames_of_AC AC)
i: ProofInfo
Heqi: i = (ExGen := ∅, SVSubst := ∅, KT := false, FP := {[p0 ↾ Prf]} ∪ frames_of_AC AC)
Γ ⊢i AC.[□↦p] $ p0 or AC.[□↦q] $ p0 ---> AC.[□↦p or q] $ p0 using i
Σ: Signature
Γ: Theory
AC: Application_context
p0: Pattern
Prf: well_formed p0
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
IH1: Γ ⊢i AC.[□↦p or q] ---> AC.[□↦p] or AC.[□↦q] using (ExGen := ∅, SVSubst := ∅, KT := false, FP := frames_of_AC AC)
IH2: Γ ⊢i AC.[□↦p] or AC.[□↦q] ---> AC.[□↦p or q] using (ExGen := ∅, SVSubst := ∅, KT := false, FP := frames_of_AC AC)
i: ProofInfo
Heqi: i = (ExGen := ∅, SVSubst := ∅, KT := false, FP := {[p0 ↾ Prf]} ∪ frames_of_AC AC)

Γ ⊢i AC.[□↦p or q] $ p0 ---> AC.[□↦p] $ p0 or AC.[□↦q] $ p0 using i
Σ: Signature
Γ: Theory
AC: Application_context
p0: Pattern
Prf: well_formed p0
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
IH1: Γ ⊢i AC.[□↦p or q] ---> AC.[□↦p] or AC.[□↦q] using (ExGen := ∅, SVSubst := ∅, KT := false, FP := frames_of_AC AC)
IH2: Γ ⊢i AC.[□↦p] or AC.[□↦q] ---> AC.[□↦p or q] using (ExGen := ∅, SVSubst := ∅, KT := false, FP := frames_of_AC AC)
i: ProofInfo
Heqi: i = (ExGen := ∅, SVSubst := ∅, KT := false, FP := {[p0 ↾ Prf]} ∪ frames_of_AC AC)
H: Γ ⊢i AC.[□↦p or q] ---> AC.[□↦p] or AC.[□↦q] using (ExGen := ∅, SVSubst := ∅, KT := false, FP := frames_of_AC AC)

Γ ⊢i AC.[□↦p or q] $ p0 ---> AC.[□↦p] $ p0 or AC.[□↦q] $ p0 using i
Σ: Signature
Γ: Theory
AC: Application_context
p0: Pattern
Prf: well_formed p0
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
IH1: Γ ⊢i AC.[□↦p or q] ---> AC.[□↦p] or AC.[□↦q] using (ExGen := ∅, SVSubst := ∅, KT := false, FP := frames_of_AC AC)
IH2: Γ ⊢i AC.[□↦p] or AC.[□↦q] ---> AC.[□↦p or q] using (ExGen := ∅, SVSubst := ∅, KT := false, FP := frames_of_AC AC)
i: ProofInfo
Heqi: i = (ExGen := ∅, SVSubst := ∅, KT := false, FP := {[p0 ↾ Prf]} ∪ frames_of_AC AC)
H: Γ ⊢i AC.[□↦p or q] ---> AC.[□↦p] or AC.[□↦q] using i

Γ ⊢i AC.[□↦p or q] $ p0 ---> AC.[□↦p] $ p0 or AC.[□↦q] $ p0 using i
Σ: Signature
Γ: Theory
AC: Application_context
p0: Pattern
Prf: well_formed p0
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
IH1: Γ ⊢i AC.[□↦p or q] ---> AC.[□↦p] or AC.[□↦q] using (ExGen := ∅, SVSubst := ∅, KT := false, FP := frames_of_AC AC)
IH2: Γ ⊢i AC.[□↦p] or AC.[□↦q] ---> AC.[□↦p or q] using (ExGen := ∅, SVSubst := ∅, KT := false, FP := frames_of_AC AC)
i: ProofInfo
Heqi: i = (ExGen := ∅, SVSubst := ∅, KT := false, FP := {[p0 ↾ Prf]} ∪ frames_of_AC AC)
H: Γ ⊢i AC.[□↦p or q] ---> AC.[□↦p] or AC.[□↦q] using (ExGen := ∅, SVSubst := ∅, KT := false, FP := frames_of_AC AC)
ProofInfoLe (ExGen := ∅, SVSubst := ∅, KT := false, FP := frames_of_AC AC) i
Σ: Signature
Γ: Theory
AC: Application_context
p0: Pattern
Prf: well_formed p0
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
IH1: Γ ⊢i AC.[□↦p or q] ---> AC.[□↦p] or AC.[□↦q] using (ExGen := ∅, SVSubst := ∅, KT := false, FP := frames_of_AC AC)
IH2: Γ ⊢i AC.[□↦p] or AC.[□↦q] ---> AC.[□↦p or q] using (ExGen := ∅, SVSubst := ∅, KT := false, FP := frames_of_AC AC)
i: ProofInfo
Heqi: i = (ExGen := ∅, SVSubst := ∅, KT := false, FP := {[p0 ↾ Prf]} ∪ frames_of_AC AC)
H: Γ ⊢i AC.[□↦p or q] ---> AC.[□↦p] or AC.[□↦q] using (ExGen := ∅, SVSubst := ∅, KT := false, FP := frames_of_AC AC)

ProofInfoLe (ExGen := ∅, SVSubst := ∅, KT := false, FP := frames_of_AC AC) i
Σ: Signature
Γ: Theory
AC: Application_context
p0: Pattern
Prf: well_formed p0
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
IH1: Γ ⊢i AC.[□↦p or q] ---> AC.[□↦p] or AC.[□↦q] using (ExGen := ∅, SVSubst := ∅, KT := false, FP := frames_of_AC AC)
IH2: Γ ⊢i AC.[□↦p] or AC.[□↦q] ---> AC.[□↦p or q] using (ExGen := ∅, SVSubst := ∅, KT := false, FP := frames_of_AC AC)
H: Γ ⊢i AC.[□↦p or q] ---> AC.[□↦p] or AC.[□↦q] using (ExGen := ∅, SVSubst := ∅, KT := false, FP := frames_of_AC AC)

ProofInfoLe (ExGen := ∅, SVSubst := ∅, KT := false, FP := frames_of_AC AC) (ExGen := ∅, SVSubst := ∅, KT := false, FP := {[p0 ↾ Prf]} ∪ frames_of_AC AC)
Σ: Signature
Γ: Theory
AC: Application_context
p0: Pattern
Prf: well_formed p0
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
IH1: Γ ⊢i AC.[□↦p or q] ---> AC.[□↦p] or AC.[□↦q] using (ExGen := ∅, SVSubst := ∅, KT := false, FP := frames_of_AC AC)
IH2: Γ ⊢i AC.[□↦p] or AC.[□↦q] ---> AC.[□↦p or q] using (ExGen := ∅, SVSubst := ∅, KT := false, FP := frames_of_AC AC)
H: Γ ⊢i AC.[□↦p or q] ---> AC.[□↦p] or AC.[□↦q] using (ExGen := ∅, SVSubst := ∅, KT := false, FP := frames_of_AC AC)

frames_of_AC AC ⊆ {[p0 ↾ Prf]} ∪ frames_of_AC AC
set_solver.
Σ: Signature
Γ: Theory
AC: Application_context
p0: Pattern
Prf: well_formed p0
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
IH1: Γ ⊢i AC.[□↦p or q] ---> AC.[□↦p] or AC.[□↦q] using (ExGen := ∅, SVSubst := ∅, KT := false, FP := frames_of_AC AC)
IH2: Γ ⊢i AC.[□↦p] or AC.[□↦q] ---> AC.[□↦p or q] using (ExGen := ∅, SVSubst := ∅, KT := false, FP := frames_of_AC AC)
i: ProofInfo
Heqi: i = (ExGen := ∅, SVSubst := ∅, KT := false, FP := {[p0 ↾ Prf]} ∪ frames_of_AC AC)
H: Γ ⊢i AC.[□↦p or q] ---> AC.[□↦p] or AC.[□↦q] using i

Γ ⊢i AC.[□↦p or q] $ p0 ---> AC.[□↦p] $ p0 or AC.[□↦q] $ p0 using i
Σ: Signature
Γ: Theory
AC: Application_context
p0: Pattern
Prf: well_formed p0
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
IH1: Γ ⊢i AC.[□↦p or q] ---> AC.[□↦p] or AC.[□↦q] using (ExGen := ∅, SVSubst := ∅, KT := false, FP := frames_of_AC AC)
IH2: Γ ⊢i AC.[□↦p] or AC.[□↦q] ---> AC.[□↦p or q] using (ExGen := ∅, SVSubst := ∅, KT := false, FP := frames_of_AC AC)
i: ProofInfo
Heqi: i = (ExGen := ∅, SVSubst := ∅, KT := false, FP := {[p0 ↾ Prf]} ∪ frames_of_AC AC)
H: Γ ⊢i AC.[□↦p or q] ---> AC.[□↦p] or AC.[□↦q] using (ExGen := ∅, SVSubst := ∅, KT := false, FP := {[p0 ↾ Prf]} ∪ frames_of_AC AC)

Γ ⊢i AC.[□↦p or q] $ p0 ---> AC.[□↦p] $ p0 or AC.[□↦q] $ p0 using i
Σ: Signature
Γ: Theory
AC: Application_context
p0: Pattern
Prf: well_formed p0
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
IH1: Γ ⊢i AC.[□↦p or q] ---> AC.[□↦p] or AC.[□↦q] using (ExGen := ∅, SVSubst := ∅, KT := false, FP := frames_of_AC AC)
IH2: Γ ⊢i AC.[□↦p] or AC.[□↦q] ---> AC.[□↦p or q] using (ExGen := ∅, SVSubst := ∅, KT := false, FP := frames_of_AC AC)
i: ProofInfo
Heqi: i = (ExGen := ∅, SVSubst := ∅, KT := false, FP := {[p0 ↾ Prf]} ∪ frames_of_AC AC)
H: Γ ⊢i AC.[□↦p or q] $ p0 ---> (AC.[□↦p] or AC.[□↦q]) $ p0 using (ExGen := ∅, SVSubst := ∅, KT := false, FP := {[p0 ↾ Prf]} ∪ frames_of_AC AC)

Γ ⊢i AC.[□↦p or q] $ p0 ---> AC.[□↦p] $ p0 or AC.[□↦q] $ p0 using i
Σ: Signature
Γ: Theory
AC: Application_context
p0: Pattern
Prf: well_formed p0
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
IH1: Γ ⊢i AC.[□↦p or q] ---> AC.[□↦p] or AC.[□↦q] using (ExGen := ∅, SVSubst := ∅, KT := false, FP := frames_of_AC AC)
IH2: Γ ⊢i AC.[□↦p] or AC.[□↦q] ---> AC.[□↦p or q] using (ExGen := ∅, SVSubst := ∅, KT := false, FP := frames_of_AC AC)
i: ProofInfo
Heqi: i = (ExGen := ∅, SVSubst := ∅, KT := false, FP := {[p0 ↾ Prf]} ∪ frames_of_AC AC)
H: Γ ⊢i AC.[□↦p or q] ---> AC.[□↦p] or AC.[□↦q] using (ExGen := ∅, SVSubst := ∅, KT := false, FP := {[p0 ↾ Prf]} ∪ frames_of_AC AC)
ProofInfoLe (ExGen := ∅, SVSubst := ∅, KT := false, FP := {[p0 ↾ Prf]}) (ExGen := ∅, SVSubst := ∅, KT := false, FP := {[p0 ↾ Prf]} ∪ frames_of_AC AC)
Σ: Signature
Γ: Theory
AC: Application_context
p0: Pattern
Prf: well_formed p0
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
IH1: Γ ⊢i AC.[□↦p or q] ---> AC.[□↦p] or AC.[□↦q] using (ExGen := ∅, SVSubst := ∅, KT := false, FP := frames_of_AC AC)
IH2: Γ ⊢i AC.[□↦p] or AC.[□↦q] ---> AC.[□↦p or q] using (ExGen := ∅, SVSubst := ∅, KT := false, FP := frames_of_AC AC)
i: ProofInfo
Heqi: i = (ExGen := ∅, SVSubst := ∅, KT := false, FP := {[p0 ↾ Prf]} ∪ frames_of_AC AC)
H: Γ ⊢i AC.[□↦p or q] ---> AC.[□↦p] or AC.[□↦q] using (ExGen := ∅, SVSubst := ∅, KT := false, FP := {[p0 ↾ Prf]} ∪ frames_of_AC AC)

ProofInfoLe (ExGen := ∅, SVSubst := ∅, KT := false, FP := {[p0 ↾ Prf]}) (ExGen := ∅, SVSubst := ∅, KT := false, FP := {[p0 ↾ Prf]} ∪ frames_of_AC AC)
Σ: Signature
Γ: Theory
AC: Application_context
p0: Pattern
Prf: well_formed p0
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
IH1: Γ ⊢i AC.[□↦p or q] ---> AC.[□↦p] or AC.[□↦q] using (ExGen := ∅, SVSubst := ∅, KT := false, FP := frames_of_AC AC)
IH2: Γ ⊢i AC.[□↦p] or AC.[□↦q] ---> AC.[□↦p or q] using (ExGen := ∅, SVSubst := ∅, KT := false, FP := frames_of_AC AC)
i: ProofInfo
Heqi: i = (ExGen := ∅, SVSubst := ∅, KT := false, FP := {[p0 ↾ Prf]} ∪ frames_of_AC AC)
H: Γ ⊢i AC.[□↦p or q] ---> AC.[□↦p] or AC.[□↦q] using (ExGen := ∅, SVSubst := ∅, KT := false, FP := {[p0 ↾ Prf]} ∪ frames_of_AC AC)

{[p0 ↾ Prf]} ⊆ {[p0 ↾ Prf]} ∪ frames_of_AC AC
set_solver.
Σ: Signature
Γ: Theory
AC: Application_context
p0: Pattern
Prf: well_formed p0
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
IH1: Γ ⊢i AC.[□↦p or q] ---> AC.[□↦p] or AC.[□↦q] using (ExGen := ∅, SVSubst := ∅, KT := false, FP := frames_of_AC AC)
IH2: Γ ⊢i AC.[□↦p] or AC.[□↦q] ---> AC.[□↦p or q] using (ExGen := ∅, SVSubst := ∅, KT := false, FP := frames_of_AC AC)
i: ProofInfo
Heqi: i = (ExGen := ∅, SVSubst := ∅, KT := false, FP := {[p0 ↾ Prf]} ∪ frames_of_AC AC)
H: Γ ⊢i AC.[□↦p or q] $ p0 ---> (AC.[□↦p] or AC.[□↦q]) $ p0 using (ExGen := ∅, SVSubst := ∅, KT := false, FP := {[p0 ↾ Prf]} ∪ frames_of_AC AC)

Γ ⊢i AC.[□↦p or q] $ p0 ---> AC.[□↦p] $ p0 or AC.[□↦q] $ p0 using i
Σ: Signature
Γ: Theory
AC: Application_context
p0: Pattern
Prf: well_formed p0
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
IH1: Γ ⊢i AC.[□↦p or q] ---> AC.[□↦p] or AC.[□↦q] using (ExGen := ∅, SVSubst := ∅, KT := false, FP := frames_of_AC AC)
IH2: Γ ⊢i AC.[□↦p] or AC.[□↦q] ---> AC.[□↦p or q] using (ExGen := ∅, SVSubst := ∅, KT := false, FP := frames_of_AC AC)
i: ProofInfo
Heqi: i = (ExGen := ∅, SVSubst := ∅, KT := false, FP := {[p0 ↾ Prf]} ∪ frames_of_AC AC)
H: Γ ⊢i AC.[□↦p or q] $ p0 ---> (AC.[□↦p] or AC.[□↦q]) $ p0 using (ExGen := ∅, SVSubst := ∅, KT := false, FP := {[p0 ↾ Prf]} ∪ frames_of_AC AC)

well_formed (AC.[□↦p or q] $ p0)
Σ: Signature
Γ: Theory
AC: Application_context
p0: Pattern
Prf: well_formed p0
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
IH1: Γ ⊢i AC.[□↦p or q] ---> AC.[□↦p] or AC.[□↦q] using (ExGen := ∅, SVSubst := ∅, KT := false, FP := frames_of_AC AC)
IH2: Γ ⊢i AC.[□↦p] or AC.[□↦q] ---> AC.[□↦p or q] using (ExGen := ∅, SVSubst := ∅, KT := false, FP := frames_of_AC AC)
i: ProofInfo
Heqi: i = (ExGen := ∅, SVSubst := ∅, KT := false, FP := {[p0 ↾ Prf]} ∪ frames_of_AC AC)
H: Γ ⊢i AC.[□↦p or q] $ p0 ---> (AC.[□↦p] or AC.[□↦q]) $ p0 using (ExGen := ∅, SVSubst := ∅, KT := false, FP := {[p0 ↾ Prf]} ∪ frames_of_AC AC)
well_formed ?B
Σ: Signature
Γ: Theory
AC: Application_context
p0: Pattern
Prf: well_formed p0
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
IH1: Γ ⊢i AC.[□↦p or q] ---> AC.[□↦p] or AC.[□↦q] using (ExGen := ∅, SVSubst := ∅, KT := false, FP := frames_of_AC AC)
IH2: Γ ⊢i AC.[□↦p] or AC.[□↦q] ---> AC.[□↦p or q] using (ExGen := ∅, SVSubst := ∅, KT := false, FP := frames_of_AC AC)
i: ProofInfo
Heqi: i = (ExGen := ∅, SVSubst := ∅, KT := false, FP := {[p0 ↾ Prf]} ∪ frames_of_AC AC)
H: Γ ⊢i AC.[□↦p or q] $ p0 ---> (AC.[□↦p] or AC.[□↦q]) $ p0 using (ExGen := ∅, SVSubst := ∅, KT := false, FP := {[p0 ↾ Prf]} ∪ frames_of_AC AC)
well_formed (AC.[□↦p] $ p0 or AC.[□↦q] $ p0)
Σ: Signature
Γ: Theory
AC: Application_context
p0: Pattern
Prf: well_formed p0
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
IH1: Γ ⊢i AC.[□↦p or q] ---> AC.[□↦p] or AC.[□↦q] using (ExGen := ∅, SVSubst := ∅, KT := false, FP := frames_of_AC AC)
IH2: Γ ⊢i AC.[□↦p] or AC.[□↦q] ---> AC.[□↦p or q] using (ExGen := ∅, SVSubst := ∅, KT := false, FP := frames_of_AC AC)
i: ProofInfo
Heqi: i = (ExGen := ∅, SVSubst := ∅, KT := false, FP := {[p0 ↾ Prf]} ∪ frames_of_AC AC)
H: Γ ⊢i AC.[□↦p or q] $ p0 ---> (AC.[□↦p] or AC.[□↦q]) $ p0 using (ExGen := ∅, SVSubst := ∅, KT := false, FP := {[p0 ↾ Prf]} ∪ frames_of_AC AC)
Γ ⊢i AC.[□↦p or q] $ p0 ---> ?B using i
Σ: Signature
Γ: Theory
AC: Application_context
p0: Pattern
Prf: well_formed p0
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
IH1: Γ ⊢i AC.[□↦p or q] ---> AC.[□↦p] or AC.[□↦q] using (ExGen := ∅, SVSubst := ∅, KT := false, FP := frames_of_AC AC)
IH2: Γ ⊢i AC.[□↦p] or AC.[□↦q] ---> AC.[□↦p or q] using (ExGen := ∅, SVSubst := ∅, KT := false, FP := frames_of_AC AC)
i: ProofInfo
Heqi: i = (ExGen := ∅, SVSubst := ∅, KT := false, FP := {[p0 ↾ Prf]} ∪ frames_of_AC AC)
H: Γ ⊢i AC.[□↦p or q] $ p0 ---> (AC.[□↦p] or AC.[□↦q]) $ p0 using (ExGen := ∅, SVSubst := ∅, KT := false, FP := {[p0 ↾ Prf]} ∪ frames_of_AC AC)
Γ ⊢i ?B ---> AC.[□↦p] $ p0 or AC.[□↦q] $ p0 using i
Σ: Signature
Γ: Theory
AC: Application_context
p0: Pattern
Prf: well_formed p0
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
IH1: Γ ⊢i AC.[□↦p or q] ---> AC.[□↦p] or AC.[□↦q] using (ExGen := ∅, SVSubst := ∅, KT := false, FP := frames_of_AC AC)
IH2: Γ ⊢i AC.[□↦p] or AC.[□↦q] ---> AC.[□↦p or q] using (ExGen := ∅, SVSubst := ∅, KT := false, FP := frames_of_AC AC)
i: ProofInfo
Heqi: i = (ExGen := ∅, SVSubst := ∅, KT := false, FP := {[p0 ↾ Prf]} ∪ frames_of_AC AC)
H: Γ ⊢i AC.[□↦p or q] $ p0 ---> (AC.[□↦p] or AC.[□↦q]) $ p0 using (ExGen := ∅, SVSubst := ∅, KT := false, FP := {[p0 ↾ Prf]} ∪ frames_of_AC AC)

well_formed (AC.[□↦p or q] $ p0)
Σ: Signature
Γ: Theory
AC: Application_context
p0: Pattern
Prf: well_formed p0
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
IH1: Γ ⊢i AC.[□↦p or q] ---> AC.[□↦p] or AC.[□↦q] using (ExGen := ∅, SVSubst := ∅, KT := false, FP := frames_of_AC AC)
IH2: Γ ⊢i AC.[□↦p] or AC.[□↦q] ---> AC.[□↦p or q] using (ExGen := ∅, SVSubst := ∅, KT := false, FP := frames_of_AC AC)
i: ProofInfo
Heqi: i = (ExGen := ∅, SVSubst := ∅, KT := false, FP := {[p0 ↾ Prf]} ∪ frames_of_AC AC)
H: Γ ⊢i AC.[□↦p or q] $ p0 ---> (AC.[□↦p] or AC.[□↦q]) $ p0 using (ExGen := ∅, SVSubst := ∅, KT := false, FP := {[p0 ↾ Prf]} ∪ frames_of_AC AC)
well_formed ((AC.[□↦p] or AC.[□↦q]) $ p0)
Σ: Signature
Γ: Theory
AC: Application_context
p0: Pattern
Prf: well_formed p0
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
IH1: Γ ⊢i AC.[□↦p or q] ---> AC.[□↦p] or AC.[□↦q] using (ExGen := ∅, SVSubst := ∅, KT := false, FP := frames_of_AC AC)
IH2: Γ ⊢i AC.[□↦p] or AC.[□↦q] ---> AC.[□↦p or q] using (ExGen := ∅, SVSubst := ∅, KT := false, FP := frames_of_AC AC)
i: ProofInfo
Heqi: i = (ExGen := ∅, SVSubst := ∅, KT := false, FP := {[p0 ↾ Prf]} ∪ frames_of_AC AC)
H: Γ ⊢i AC.[□↦p or q] $ p0 ---> (AC.[□↦p] or AC.[□↦q]) $ p0 using (ExGen := ∅, SVSubst := ∅, KT := false, FP := {[p0 ↾ Prf]} ∪ frames_of_AC AC)
well_formed (AC.[□↦p] $ p0 or AC.[□↦q] $ p0)
Σ: Signature
Γ: Theory
AC: Application_context
p0: Pattern
Prf: well_formed p0
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
IH1: Γ ⊢i AC.[□↦p or q] ---> AC.[□↦p] or AC.[□↦q] using (ExGen := ∅, SVSubst := ∅, KT := false, FP := frames_of_AC AC)
IH2: Γ ⊢i AC.[□↦p] or AC.[□↦q] ---> AC.[□↦p or q] using (ExGen := ∅, SVSubst := ∅, KT := false, FP := frames_of_AC AC)
i: ProofInfo
Heqi: i = (ExGen := ∅, SVSubst := ∅, KT := false, FP := {[p0 ↾ Prf]} ∪ frames_of_AC AC)
H: Γ ⊢i AC.[□↦p or q] $ p0 ---> (AC.[□↦p] or AC.[□↦q]) $ p0 using (ExGen := ∅, SVSubst := ∅, KT := false, FP := {[p0 ↾ Prf]} ∪ frames_of_AC AC)
Γ ⊢i (AC.[□↦p] or AC.[□↦q]) $ p0 ---> AC.[□↦p] $ p0 or AC.[□↦q] $ p0 using i
Σ: Signature
Γ: Theory
AC: Application_context
p0: Pattern
Prf: well_formed p0
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
IH1: Γ ⊢i AC.[□↦p or q] ---> AC.[□↦p] or AC.[□↦q] using (ExGen := ∅, SVSubst := ∅, KT := false, FP := frames_of_AC AC)
IH2: Γ ⊢i AC.[□↦p] or AC.[□↦q] ---> AC.[□↦p or q] using (ExGen := ∅, SVSubst := ∅, KT := false, FP := frames_of_AC AC)
i: ProofInfo
Heqi: i = (ExGen := ∅, SVSubst := ∅, KT := false, FP := {[p0 ↾ Prf]} ∪ frames_of_AC AC)
H: Γ ⊢i AC.[□↦p or q] $ p0 ---> (AC.[□↦p] or AC.[□↦q]) $ p0 using (ExGen := ∅, SVSubst := ∅, KT := false, FP := {[p0 ↾ Prf]} ∪ frames_of_AC AC)

Γ ⊢i (AC.[□↦p] or AC.[□↦q]) $ p0 ---> AC.[□↦p] $ p0 or AC.[□↦q] $ p0 using i
Σ: Signature
Γ: Theory
AC: Application_context
p0: Pattern
Prf: well_formed p0
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
p': Pattern
Heqp': p' = AC.[□↦p]
IH1: Γ ⊢i AC.[□↦p or q] ---> p' or AC.[□↦q] using (ExGen := ∅, SVSubst := ∅, KT := false, FP := frames_of_AC AC)
IH2: Γ ⊢i p' or AC.[□↦q] ---> AC.[□↦p or q] using (ExGen := ∅, SVSubst := ∅, KT := false, FP := frames_of_AC AC)
i: ProofInfo
Heqi: i = (ExGen := ∅, SVSubst := ∅, KT := false, FP := {[p0 ↾ Prf]} ∪ frames_of_AC AC)
H: Γ ⊢i AC.[□↦p or q] $ p0 ---> (p' or AC.[□↦q]) $ p0 using (ExGen := ∅, SVSubst := ∅, KT := false, FP := {[p0 ↾ Prf]} ∪ frames_of_AC AC)

Γ ⊢i (p' or AC.[□↦q]) $ p0 ---> p' $ p0 or AC.[□↦q] $ p0 using i
Σ: Signature
Γ: Theory
AC: Application_context
p0: Pattern
Prf: well_formed p0
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
p': Pattern
Heqp': p' = AC.[□↦p]
q': Pattern
Heqq': q' = AC.[□↦q]
IH1: Γ ⊢i AC.[□↦p or q] ---> p' or q' using (ExGen := ∅, SVSubst := ∅, KT := false, FP := frames_of_AC AC)
IH2: Γ ⊢i p' or q' ---> AC.[□↦p or q] using (ExGen := ∅, SVSubst := ∅, KT := false, FP := frames_of_AC AC)
i: ProofInfo
Heqi: i = (ExGen := ∅, SVSubst := ∅, KT := false, FP := {[p0 ↾ Prf]} ∪ frames_of_AC AC)
H: Γ ⊢i AC.[□↦p or q] $ p0 ---> (p' or q') $ p0 using (ExGen := ∅, SVSubst := ∅, KT := false, FP := {[p0 ↾ Prf]} ∪ frames_of_AC AC)

Γ ⊢i (p' or q') $ p0 ---> p' $ p0 or q' $ p0 using i
Σ: Signature
Γ: Theory
AC: Application_context
p0: Pattern
Prf: well_formed p0
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
p': Pattern
Heqp': p' = AC.[□↦p]
q': Pattern
Heqq': q' = AC.[□↦q]
IH1: Γ ⊢i AC.[□↦p or q] ---> p' or q' using (ExGen := ∅, SVSubst := ∅, KT := false, FP := frames_of_AC AC)
IH2: Γ ⊢i p' or q' ---> AC.[□↦p or q] using (ExGen := ∅, SVSubst := ∅, KT := false, FP := frames_of_AC AC)
H: Γ ⊢i AC.[□↦p or q] $ p0 ---> (p' or q') $ p0 using (ExGen := ∅, SVSubst := ∅, KT := false, FP := {[p0 ↾ Prf]} ∪ frames_of_AC AC)

Γ ⊢i (p' or q') $ p0 ---> p' $ p0 or q' $ p0 using (ExGen := ∅, SVSubst := ∅, KT := false, FP := {[p0 ↾ Prf]} ∪ frames_of_AC AC)
Σ: Signature
Γ: Theory
AC: Application_context
p0: Pattern
Prf: well_formed p0
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
p': Pattern
Heqp': p' = AC.[□↦p]
q': Pattern
Heqq': q' = AC.[□↦q]
IH1: Γ ⊢i AC.[□↦p or q] ---> p' or q' using (ExGen := ∅, SVSubst := ∅, KT := false, FP := frames_of_AC AC)
IH2: Γ ⊢i p' or q' ---> AC.[□↦p or q] using (ExGen := ∅, SVSubst := ∅, KT := false, FP := frames_of_AC AC)
H: Γ ⊢i AC.[□↦p or q] $ p0 ---> (p' or q') $ p0 using (ExGen := ∅, SVSubst := ∅, KT := false, FP := {[p0 ↾ Prf]} ∪ frames_of_AC AC)

ProofInfoLe (ExGen := ?evs, SVSubst := ?svs, KT := ?kt, FP := ?fp) (ExGen := ∅, SVSubst := ∅, KT := false, FP := {[p0 ↾ Prf]} ∪ frames_of_AC AC)
Σ: Signature
Γ: Theory
AC: Application_context
p0: Pattern
Prf: well_formed p0
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
p': Pattern
Heqp': p' = AC.[□↦p]
q': Pattern
Heqq': q' = AC.[□↦q]
IH1: Γ ⊢i AC.[□↦p or q] ---> p' or q' using (ExGen := ∅, SVSubst := ∅, KT := false, FP := frames_of_AC AC)
IH2: Γ ⊢i p' or q' ---> AC.[□↦p or q] using (ExGen := ∅, SVSubst := ∅, KT := false, FP := frames_of_AC AC)
H: Γ ⊢i AC.[□↦p or q] $ p0 ---> (p' or q') $ p0 using (ExGen := ∅, SVSubst := ∅, KT := false, FP := {[p0 ↾ Prf]} ∪ frames_of_AC AC)
Γ ⊢i (p' or q') $ p0 ---> p' $ p0 or q' $ p0 using (ExGen := ?evs, SVSubst := ?svs, KT := ?kt, FP := ?fp)
Σ: Signature
Γ: Theory
AC: Application_context
p0: Pattern
Prf: well_formed p0
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
p': Pattern
Heqp': p' = AC.[□↦p]
q': Pattern
Heqq': q' = AC.[□↦q]
IH1: Γ ⊢i AC.[□↦p or q] ---> p' or q' using (ExGen := ∅, SVSubst := ∅, KT := false, FP := frames_of_AC AC)
IH2: Γ ⊢i p' or q' ---> AC.[□↦p or q] using (ExGen := ∅, SVSubst := ∅, KT := false, FP := frames_of_AC AC)
H: Γ ⊢i AC.[□↦p or q] $ p0 ---> (p' or q') $ p0 using (ExGen := ∅, SVSubst := ∅, KT := false, FP := {[p0 ↾ Prf]} ∪ frames_of_AC AC)

ProofInfoLe (ExGen := ∅, SVSubst := ∅, KT := false, FP := ∅) (ExGen := ∅, SVSubst := ∅, KT := false, FP := {[p0 ↾ Prf]} ∪ frames_of_AC AC)
Σ: Signature
Γ: Theory
AC: Application_context
p0: Pattern
Prf: well_formed p0
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
p': Pattern
Heqp': p' = AC.[□↦p]
q': Pattern
Heqq': q' = AC.[□↦q]
IH1: Γ ⊢i AC.[□↦p or q] ---> p' or q' using (ExGen := ∅, SVSubst := ∅, KT := false, FP := frames_of_AC AC)
IH2: Γ ⊢i p' or q' ---> AC.[□↦p or q] using (ExGen := ∅, SVSubst := ∅, KT := false, FP := frames_of_AC AC)
H: Γ ⊢i AC.[□↦p or q] $ p0 ---> (p' or q') $ p0 using (ExGen := ∅, SVSubst := ∅, KT := false, FP := {[p0 ↾ Prf]} ∪ frames_of_AC AC)
well_formed p'
Σ: Signature
Γ: Theory
AC: Application_context
p0: Pattern
Prf: well_formed p0
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
p': Pattern
Heqp': p' = AC.[□↦p]
q': Pattern
Heqq': q' = AC.[□↦q]
IH1: Γ ⊢i AC.[□↦p or q] ---> p' or q' using (ExGen := ∅, SVSubst := ∅, KT := false, FP := frames_of_AC AC)
IH2: Γ ⊢i p' or q' ---> AC.[□↦p or q] using (ExGen := ∅, SVSubst := ∅, KT := false, FP := frames_of_AC AC)
H: Γ ⊢i AC.[□↦p or q] $ p0 ---> (p' or q') $ p0 using (ExGen := ∅, SVSubst := ∅, KT := false, FP := {[p0 ↾ Prf]} ∪ frames_of_AC AC)
well_formed q'
Σ: Signature
Γ: Theory
AC: Application_context
p0: Pattern
Prf: well_formed p0
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
p': Pattern
Heqp': p' = AC.[□↦p]
q': Pattern
Heqq': q' = AC.[□↦q]
IH1: Γ ⊢i AC.[□↦p or q] ---> p' or q' using (ExGen := ∅, SVSubst := ∅, KT := false, FP := frames_of_AC AC)
IH2: Γ ⊢i p' or q' ---> AC.[□↦p or q] using (ExGen := ∅, SVSubst := ∅, KT := false, FP := frames_of_AC AC)
H: Γ ⊢i AC.[□↦p or q] $ p0 ---> (p' or q') $ p0 using (ExGen := ∅, SVSubst := ∅, KT := false, FP := {[p0 ↾ Prf]} ∪ frames_of_AC AC)
well_formed p0
Σ: Signature
Γ: Theory
AC: Application_context
p0: Pattern
Prf: well_formed p0
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
IH1: Γ ⊢i AC.[□↦p or q] ---> AC.[□↦p] or AC.[□↦q] using (ExGen := ∅, SVSubst := ∅, KT := false, FP := frames_of_AC AC)
IH2: Γ ⊢i AC.[□↦p] or AC.[□↦q] ---> AC.[□↦p or q] using (ExGen := ∅, SVSubst := ∅, KT := false, FP := frames_of_AC AC)
H: Γ ⊢i AC.[□↦p or q] $ p0 ---> (AC.[□↦p] or AC.[□↦q]) $ p0 using (ExGen := ∅, SVSubst := ∅, KT := false, FP := {[p0 ↾ Prf]} ∪ frames_of_AC AC)

ProofInfoLe (ExGen := ∅, SVSubst := ∅, KT := false, FP := ∅) (ExGen := ∅, SVSubst := ∅, KT := false, FP := {[p0 ↾ Prf]} ∪ frames_of_AC AC)
Σ: Signature
Γ: Theory
AC: Application_context
p0: Pattern
Prf: well_formed p0
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
IH1: Γ ⊢i AC.[□↦p or q] ---> AC.[□↦p] or AC.[□↦q] using (ExGen := ∅, SVSubst := ∅, KT := false, FP := frames_of_AC AC)
IH2: Γ ⊢i AC.[□↦p] or AC.[□↦q] ---> AC.[□↦p or q] using (ExGen := ∅, SVSubst := ∅, KT := false, FP := frames_of_AC AC)
H: Γ ⊢i AC.[□↦p or q] $ p0 ---> (AC.[□↦p] or AC.[□↦q]) $ p0 using (ExGen := ∅, SVSubst := ∅, KT := false, FP := {[p0 ↾ Prf]} ∪ frames_of_AC AC)

ProofInfoLe (ExGen := ∅, SVSubst := ∅, KT := false, FP := ∅) (ExGen := ∅, SVSubst := ∅, KT := false, FP := {[p0 ↾ Prf]} ∪ frames_of_AC AC)
Σ: Signature
Γ: Theory
AC: Application_context
p0: Pattern
Prf: well_formed p0
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
IH1: Γ ⊢i AC.[□↦p or q] ---> AC.[□↦p] or AC.[□↦q] using (ExGen := ∅, SVSubst := ∅, KT := false, FP := frames_of_AC AC)
IH2: Γ ⊢i AC.[□↦p] or AC.[□↦q] ---> AC.[□↦p or q] using (ExGen := ∅, SVSubst := ∅, KT := false, FP := frames_of_AC AC)
H: Γ ⊢i AC.[□↦p or q] $ p0 ---> (AC.[□↦p] or AC.[□↦q]) $ p0 using (ExGen := ∅, SVSubst := ∅, KT := false, FP := {[p0 ↾ Prf]} ∪ frames_of_AC AC)

∅ ⊆ {[p0 ↾ Prf]} ∪ frames_of_AC AC
set_solver. }
Σ: Signature
Γ: Theory
AC: Application_context
p0: Pattern
Prf: well_formed p0
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
IH1: Γ ⊢i AC.[□↦p or q] ---> AC.[□↦p] or AC.[□↦q] using (ExGen := ∅, SVSubst := ∅, KT := false, FP := frames_of_AC AC)
IH2: Γ ⊢i AC.[□↦p] or AC.[□↦q] ---> AC.[□↦p or q] using (ExGen := ∅, SVSubst := ∅, KT := false, FP := frames_of_AC AC)
i: ProofInfo
Heqi: i = (ExGen := ∅, SVSubst := ∅, KT := false, FP := {[p0 ↾ Prf]} ∪ frames_of_AC AC)

Γ ⊢i AC.[□↦p] $ p0 or AC.[□↦q] $ p0 ---> AC.[□↦p or q] $ p0 using i
Σ: Signature
Γ: Theory
AC: Application_context
p0: Pattern
Prf: well_formed p0
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
IH1: Γ ⊢i AC.[□↦p or q] ---> AC.[□↦p] or AC.[□↦q] using (ExGen := ∅, SVSubst := ∅, KT := false, FP := frames_of_AC AC)
IH2: Γ ⊢i AC.[□↦p] or AC.[□↦q] ---> AC.[□↦p or q] using (ExGen := ∅, SVSubst := ∅, KT := false, FP := frames_of_AC AC)
i: ProofInfo
Heqi: i = (ExGen := ∅, SVSubst := ∅, KT := false, FP := {[p0 ↾ Prf]} ∪ frames_of_AC AC)

Γ ⊢i AC.[□↦p] $ p0 ---> AC.[□↦p or q] $ p0 using i
Σ: Signature
Γ: Theory
AC: Application_context
p0: Pattern
Prf: well_formed p0
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
IH1: Γ ⊢i AC.[□↦p or q] ---> AC.[□↦p] or AC.[□↦q] using (ExGen := ∅, SVSubst := ∅, KT := false, FP := frames_of_AC AC)
IH2: Γ ⊢i AC.[□↦p] or AC.[□↦q] ---> AC.[□↦p or q] using (ExGen := ∅, SVSubst := ∅, KT := false, FP := frames_of_AC AC)
i: ProofInfo
Heqi: i = (ExGen := ∅, SVSubst := ∅, KT := false, FP := {[p0 ↾ Prf]} ∪ frames_of_AC AC)
Γ ⊢i AC.[□↦q] $ p0 ---> AC.[□↦p or q] $ p0 using i
Σ: Signature
Γ: Theory
AC: Application_context
p0: Pattern
Prf: well_formed p0
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
IH1: Γ ⊢i AC.[□↦p or q] ---> AC.[□↦p] or AC.[□↦q] using (ExGen := ∅, SVSubst := ∅, KT := false, FP := frames_of_AC AC)
IH2: Γ ⊢i AC.[□↦p] or AC.[□↦q] ---> AC.[□↦p or q] using (ExGen := ∅, SVSubst := ∅, KT := false, FP := frames_of_AC AC)
i: ProofInfo
Heqi: i = (ExGen := ∅, SVSubst := ∅, KT := false, FP := {[p0 ↾ Prf]} ∪ frames_of_AC AC)

Γ ⊢i AC.[□↦p] $ p0 ---> AC.[□↦p or q] $ p0 using i
Σ: Signature
Γ: Theory
AC: Application_context
p0: Pattern
Prf: well_formed p0
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
IH1: Γ ⊢i AC.[□↦p or q] ---> AC.[□↦p] or AC.[□↦q] using (ExGen := ∅, SVSubst := ∅, KT := false, FP := frames_of_AC AC)
IH2: Γ ⊢i AC.[□↦p] or AC.[□↦q] ---> AC.[□↦p or q] using (ExGen := ∅, SVSubst := ∅, KT := false, FP := frames_of_AC AC)

Γ ⊢i AC.[□↦p] $ p0 ---> AC.[□↦p or q] $ p0 using (ExGen := ∅, SVSubst := ∅, KT := false, FP := {[p0 ↾ Prf]} ∪ frames_of_AC AC)
Σ: Signature
Γ: Theory
AC: Application_context
p0: Pattern
Prf: well_formed p0
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
IH1: Γ ⊢i AC.[□↦p or q] ---> AC.[□↦p] or AC.[□↦q] using (ExGen := ∅, SVSubst := ∅, KT := false, FP := frames_of_AC AC)
IH2: Γ ⊢i AC.[□↦p] or AC.[□↦q] ---> AC.[□↦p or q] using (ExGen := ∅, SVSubst := ∅, KT := false, FP := frames_of_AC AC)

ProofInfoLe (ExGen := ∅, SVSubst := ∅, KT := false, FP := {[p0 ↾ Prf]}) (ExGen := ∅, SVSubst := ∅, KT := false, FP := {[p0 ↾ Prf]} ∪ frames_of_AC AC)
Σ: Signature
Γ: Theory
AC: Application_context
p0: Pattern
Prf: well_formed p0
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
IH1: Γ ⊢i AC.[□↦p or q] ---> AC.[□↦p] or AC.[□↦q] using (ExGen := ∅, SVSubst := ∅, KT := false, FP := frames_of_AC AC)
IH2: Γ ⊢i AC.[□↦p] or AC.[□↦q] ---> AC.[□↦p or q] using (ExGen := ∅, SVSubst := ∅, KT := false, FP := frames_of_AC AC)
Γ ⊢i AC.[□↦p] ---> AC.[□↦p or q] using (ExGen := ∅, SVSubst := ∅, KT := false, FP := {[p0 ↾ Prf]} ∪ frames_of_AC AC)
Σ: Signature
Γ: Theory
AC: Application_context
p0: Pattern
Prf: well_formed p0
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
IH1: Γ ⊢i AC.[□↦p or q] ---> AC.[□↦p] or AC.[□↦q] using (ExGen := ∅, SVSubst := ∅, KT := false, FP := frames_of_AC AC)
IH2: Γ ⊢i AC.[□↦p] or AC.[□↦q] ---> AC.[□↦p or q] using (ExGen := ∅, SVSubst := ∅, KT := false, FP := frames_of_AC AC)

ProofInfoLe (ExGen := ∅, SVSubst := ∅, KT := false, FP := {[p0 ↾ Prf]}) (ExGen := ∅, SVSubst := ∅, KT := false, FP := {[p0 ↾ Prf]} ∪ frames_of_AC AC)
Σ: Signature
Γ: Theory
AC: Application_context
p0: Pattern
Prf: well_formed p0
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
IH1: Γ ⊢i AC.[□↦p or q] ---> AC.[□↦p] or AC.[□↦q] using (ExGen := ∅, SVSubst := ∅, KT := false, FP := frames_of_AC AC)
IH2: Γ ⊢i AC.[□↦p] or AC.[□↦q] ---> AC.[□↦p or q] using (ExGen := ∅, SVSubst := ∅, KT := false, FP := frames_of_AC AC)

{[p0 ↾ Prf]} ⊆ {[p0 ↾ Prf]} ∪ frames_of_AC AC
set_solver.
Σ: Signature
Γ: Theory
AC: Application_context
p0: Pattern
Prf: well_formed p0
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
IH1: Γ ⊢i AC.[□↦p or q] ---> AC.[□↦p] or AC.[□↦q] using (ExGen := ∅, SVSubst := ∅, KT := false, FP := frames_of_AC AC)
IH2: Γ ⊢i AC.[□↦p] or AC.[□↦q] ---> AC.[□↦p or q] using (ExGen := ∅, SVSubst := ∅, KT := false, FP := frames_of_AC AC)

Γ ⊢i AC.[□↦p] ---> AC.[□↦p or q] using (ExGen := ∅, SVSubst := ∅, KT := false, FP := {[p0 ↾ Prf]} ∪ frames_of_AC AC)
Σ: Signature
Γ: Theory
AC: Application_context
p0: Pattern
Prf: well_formed p0
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
IH1: Γ ⊢i AC.[□↦p or q] ---> AC.[□↦p] or AC.[□↦q] using (ExGen := ∅, SVSubst := ∅, KT := false, FP := frames_of_AC AC)
IH2: Γ ⊢i AC.[□↦p] or AC.[□↦q] ---> AC.[□↦p or q] using (ExGen := ∅, SVSubst := ∅, KT := false, FP := frames_of_AC AC)

well_formed AC.[□↦p]
Σ: Signature
Γ: Theory
AC: Application_context
p0: Pattern
Prf: well_formed p0
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
IH1: Γ ⊢i AC.[□↦p or q] ---> AC.[□↦p] or AC.[□↦q] using (ExGen := ∅, SVSubst := ∅, KT := false, FP := frames_of_AC AC)
IH2: Γ ⊢i AC.[□↦p] or AC.[□↦q] ---> AC.[□↦p or q] using (ExGen := ∅, SVSubst := ∅, KT := false, FP := frames_of_AC AC)
well_formed ?B
Σ: Signature
Γ: Theory
AC: Application_context
p0: Pattern
Prf: well_formed p0
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
IH1: Γ ⊢i AC.[□↦p or q] ---> AC.[□↦p] or AC.[□↦q] using (ExGen := ∅, SVSubst := ∅, KT := false, FP := frames_of_AC AC)
IH2: Γ ⊢i AC.[□↦p] or AC.[□↦q] ---> AC.[□↦p or q] using (ExGen := ∅, SVSubst := ∅, KT := false, FP := frames_of_AC AC)
well_formed AC.[□↦p or q]
Σ: Signature
Γ: Theory
AC: Application_context
p0: Pattern
Prf: well_formed p0
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
IH1: Γ ⊢i AC.[□↦p or q] ---> AC.[□↦p] or AC.[□↦q] using (ExGen := ∅, SVSubst := ∅, KT := false, FP := frames_of_AC AC)
IH2: Γ ⊢i AC.[□↦p] or AC.[□↦q] ---> AC.[□↦p or q] using (ExGen := ∅, SVSubst := ∅, KT := false, FP := frames_of_AC AC)
Γ ⊢i ?B ---> AC.[□↦p or q] using (ExGen := ∅, SVSubst := ∅, KT := false, FP := {[p0 ↾ Prf]} ∪ frames_of_AC AC)
Σ: Signature
Γ: Theory
AC: Application_context
p0: Pattern
Prf: well_formed p0
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
IH1: Γ ⊢i AC.[□↦p or q] ---> AC.[□↦p] or AC.[□↦q] using (ExGen := ∅, SVSubst := ∅, KT := false, FP := frames_of_AC AC)
IH2: Γ ⊢i AC.[□↦p] or AC.[□↦q] ---> AC.[□↦p or q] using (ExGen := ∅, SVSubst := ∅, KT := false, FP := frames_of_AC AC)
Γ ⊢i AC.[□↦p] ---> ?B using (ExGen := ∅, SVSubst := ∅, KT := false, FP := {[p0 ↾ Prf]} ∪ frames_of_AC AC)
Σ: Signature
Γ: Theory
AC: Application_context
p0: Pattern
Prf: well_formed p0
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
IH1: Γ ⊢i AC.[□↦p or q] ---> AC.[□↦p] or AC.[□↦q] using (ExGen := ∅, SVSubst := ∅, KT := false, FP := frames_of_AC AC)
IH2: Γ ⊢i AC.[□↦p] or AC.[□↦q] ---> AC.[□↦p or q] using (ExGen := ∅, SVSubst := ∅, KT := false, FP := frames_of_AC AC)

Γ ⊢i ?B ---> AC.[□↦p or q] using (ExGen := ∅, SVSubst := ∅, KT := false, FP := {[p0 ↾ Prf]} ∪ frames_of_AC AC)
Σ: Signature
Γ: Theory
AC: Application_context
p0: Pattern
Prf: well_formed p0
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
IH1: Γ ⊢i AC.[□↦p or q] ---> AC.[□↦p] or AC.[□↦q] using (ExGen := ∅, SVSubst := ∅, KT := false, FP := frames_of_AC AC)
IH2: Γ ⊢i AC.[□↦p] or AC.[□↦q] ---> AC.[□↦p or q] using (ExGen := ∅, SVSubst := ∅, KT := false, FP := frames_of_AC AC)

ProofInfoLe (ExGen := ∅, SVSubst := ∅, KT := false, FP := frames_of_AC AC) (ExGen := ∅, SVSubst := ∅, KT := false, FP := {[p0 ↾ Prf]} ∪ frames_of_AC AC)
try_solve_pile.
Σ: Signature
Γ: Theory
AC: Application_context
p0: Pattern
Prf: well_formed p0
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
IH1: Γ ⊢i AC.[□↦p or q] ---> AC.[□↦p] or AC.[□↦q] using (ExGen := ∅, SVSubst := ∅, KT := false, FP := frames_of_AC AC)
IH2: Γ ⊢i AC.[□↦p] or AC.[□↦q] ---> AC.[□↦p or q] using (ExGen := ∅, SVSubst := ∅, KT := false, FP := frames_of_AC AC)

well_formed AC.[□↦p]
Σ: Signature
Γ: Theory
AC: Application_context
p0: Pattern
Prf: well_formed p0
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
IH1: Γ ⊢i AC.[□↦p or q] ---> AC.[□↦p] or AC.[□↦q] using (ExGen := ∅, SVSubst := ∅, KT := false, FP := frames_of_AC AC)
IH2: Γ ⊢i AC.[□↦p] or AC.[□↦q] ---> AC.[□↦p or q] using (ExGen := ∅, SVSubst := ∅, KT := false, FP := frames_of_AC AC)
well_formed (AC.[□↦p] or AC.[□↦q])
Σ: Signature
Γ: Theory
AC: Application_context
p0: Pattern
Prf: well_formed p0
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
IH1: Γ ⊢i AC.[□↦p or q] ---> AC.[□↦p] or AC.[□↦q] using (ExGen := ∅, SVSubst := ∅, KT := false, FP := frames_of_AC AC)
IH2: Γ ⊢i AC.[□↦p] or AC.[□↦q] ---> AC.[□↦p or q] using (ExGen := ∅, SVSubst := ∅, KT := false, FP := frames_of_AC AC)
well_formed AC.[□↦p or q]
Σ: Signature
Γ: Theory
AC: Application_context
p0: Pattern
Prf: well_formed p0
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
IH1: Γ ⊢i AC.[□↦p or q] ---> AC.[□↦p] or AC.[□↦q] using (ExGen := ∅, SVSubst := ∅, KT := false, FP := frames_of_AC AC)
IH2: Γ ⊢i AC.[□↦p] or AC.[□↦q] ---> AC.[□↦p or q] using (ExGen := ∅, SVSubst := ∅, KT := false, FP := frames_of_AC AC)
Γ ⊢i AC.[□↦p] ---> AC.[□↦p] or AC.[□↦q] using (ExGen := ∅, SVSubst := ∅, KT := false, FP := {[p0 ↾ Prf]} ∪ frames_of_AC AC)
Σ: Signature
Γ: Theory
AC: Application_context
p0: Pattern
Prf: well_formed p0
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
IH1: Γ ⊢i AC.[□↦p or q] ---> AC.[□↦p] or AC.[□↦q] using (ExGen := ∅, SVSubst := ∅, KT := false, FP := frames_of_AC AC)
IH2: Γ ⊢i AC.[□↦p] or AC.[□↦q] ---> AC.[□↦p or q] using (ExGen := ∅, SVSubst := ∅, KT := false, FP := frames_of_AC AC)

Γ ⊢i AC.[□↦p] ---> AC.[□↦p] or AC.[□↦q] using (ExGen := ∅, SVSubst := ∅, KT := false, FP := {[p0 ↾ Prf]} ∪ frames_of_AC AC)
Σ: Signature
Γ: Theory
AC: Application_context
p0: Pattern
Prf: well_formed p0
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
IH1: Γ ⊢i AC.[□↦p or q] ---> AC.[□↦p] or AC.[□↦q] using (ExGen := ∅, SVSubst := ∅, KT := false, FP := frames_of_AC AC)
IH2: Γ ⊢i AC.[□↦p] or AC.[□↦q] ---> AC.[□↦p or q] using (ExGen := ∅, SVSubst := ∅, KT := false, FP := frames_of_AC AC)

Γ ⊢i AC.[□↦p] ---> AC.[□↦p] or AC.[□↦q] using BasicReasoning
apply disj_left_intro; wf_auto2.
Σ: Signature
Γ: Theory
AC: Application_context
p0: Pattern
Prf: well_formed p0
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
IH1: Γ ⊢i AC.[□↦p or q] ---> AC.[□↦p] or AC.[□↦q] using (ExGen := ∅, SVSubst := ∅, KT := false, FP := frames_of_AC AC)
IH2: Γ ⊢i AC.[□↦p] or AC.[□↦q] ---> AC.[□↦p or q] using (ExGen := ∅, SVSubst := ∅, KT := false, FP := frames_of_AC AC)
i: ProofInfo
Heqi: i = (ExGen := ∅, SVSubst := ∅, KT := false, FP := {[p0 ↾ Prf]} ∪ frames_of_AC AC)

Γ ⊢i AC.[□↦q] $ p0 ---> AC.[□↦p or q] $ p0 using i
Σ: Signature
Γ: Theory
AC: Application_context
p0: Pattern
Prf: well_formed p0
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
IH1: Γ ⊢i AC.[□↦p or q] ---> AC.[□↦p] or AC.[□↦q] using (ExGen := ∅, SVSubst := ∅, KT := false, FP := frames_of_AC AC)
IH2: Γ ⊢i AC.[□↦p] or AC.[□↦q] ---> AC.[□↦p or q] using (ExGen := ∅, SVSubst := ∅, KT := false, FP := frames_of_AC AC)

Γ ⊢i AC.[□↦q] $ p0 ---> AC.[□↦p or q] $ p0 using (ExGen := ∅, SVSubst := ∅, KT := false, FP := {[p0 ↾ Prf]} ∪ frames_of_AC AC)
Σ: Signature
Γ: Theory
AC: Application_context
p0: Pattern
Prf: well_formed p0
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
IH1: Γ ⊢i AC.[□↦p or q] ---> AC.[□↦p] or AC.[□↦q] using (ExGen := ∅, SVSubst := ∅, KT := false, FP := frames_of_AC AC)
IH2: Γ ⊢i AC.[□↦p] or AC.[□↦q] ---> AC.[□↦p or q] using (ExGen := ∅, SVSubst := ∅, KT := false, FP := frames_of_AC AC)

ProofInfoLe (ExGen := ∅, SVSubst := ∅, KT := false, FP := {[p0 ↾ Prf]}) (ExGen := ∅, SVSubst := ∅, KT := false, FP := {[p0 ↾ Prf]} ∪ frames_of_AC AC)
Σ: Signature
Γ: Theory
AC: Application_context
p0: Pattern
Prf: well_formed p0
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
IH1: Γ ⊢i AC.[□↦p or q] ---> AC.[□↦p] or AC.[□↦q] using (ExGen := ∅, SVSubst := ∅, KT := false, FP := frames_of_AC AC)
IH2: Γ ⊢i AC.[□↦p] or AC.[□↦q] ---> AC.[□↦p or q] using (ExGen := ∅, SVSubst := ∅, KT := false, FP := frames_of_AC AC)
Γ ⊢i AC.[□↦q] ---> AC.[□↦p or q] using (ExGen := ∅, SVSubst := ∅, KT := false, FP := {[p0 ↾ Prf]} ∪ frames_of_AC AC)
Σ: Signature
Γ: Theory
AC: Application_context
p0: Pattern
Prf: well_formed p0
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
IH1: Γ ⊢i AC.[□↦p or q] ---> AC.[□↦p] or AC.[□↦q] using (ExGen := ∅, SVSubst := ∅, KT := false, FP := frames_of_AC AC)
IH2: Γ ⊢i AC.[□↦p] or AC.[□↦q] ---> AC.[□↦p or q] using (ExGen := ∅, SVSubst := ∅, KT := false, FP := frames_of_AC AC)

ProofInfoLe (ExGen := ∅, SVSubst := ∅, KT := false, FP := {[p0 ↾ Prf]}) (ExGen := ∅, SVSubst := ∅, KT := false, FP := {[p0 ↾ Prf]} ∪ frames_of_AC AC)
try_solve_pile.
Σ: Signature
Γ: Theory
AC: Application_context
p0: Pattern
Prf: well_formed p0
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
IH1: Γ ⊢i AC.[□↦p or q] ---> AC.[□↦p] or AC.[□↦q] using (ExGen := ∅, SVSubst := ∅, KT := false, FP := frames_of_AC AC)
IH2: Γ ⊢i AC.[□↦p] or AC.[□↦q] ---> AC.[□↦p or q] using (ExGen := ∅, SVSubst := ∅, KT := false, FP := frames_of_AC AC)

Γ ⊢i AC.[□↦q] ---> AC.[□↦p or q] using (ExGen := ∅, SVSubst := ∅, KT := false, FP := {[p0 ↾ Prf]} ∪ frames_of_AC AC)
Σ: Signature
Γ: Theory
AC: Application_context
p0: Pattern
Prf: well_formed p0
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
IH1: Γ ⊢i AC.[□↦p or q] ---> AC.[□↦p] or AC.[□↦q] using (ExGen := ∅, SVSubst := ∅, KT := false, FP := frames_of_AC AC)
IH2: Γ ⊢i AC.[□↦p] or AC.[□↦q] ---> AC.[□↦p or q] using (ExGen := ∅, SVSubst := ∅, KT := false, FP := frames_of_AC AC)

well_formed AC.[□↦q]
Σ: Signature
Γ: Theory
AC: Application_context
p0: Pattern
Prf: well_formed p0
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
IH1: Γ ⊢i AC.[□↦p or q] ---> AC.[□↦p] or AC.[□↦q] using (ExGen := ∅, SVSubst := ∅, KT := false, FP := frames_of_AC AC)
IH2: Γ ⊢i AC.[□↦p] or AC.[□↦q] ---> AC.[□↦p or q] using (ExGen := ∅, SVSubst := ∅, KT := false, FP := frames_of_AC AC)
well_formed ?B
Σ: Signature
Γ: Theory
AC: Application_context
p0: Pattern
Prf: well_formed p0
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
IH1: Γ ⊢i AC.[□↦p or q] ---> AC.[□↦p] or AC.[□↦q] using (ExGen := ∅, SVSubst := ∅, KT := false, FP := frames_of_AC AC)
IH2: Γ ⊢i AC.[□↦p] or AC.[□↦q] ---> AC.[□↦p or q] using (ExGen := ∅, SVSubst := ∅, KT := false, FP := frames_of_AC AC)
well_formed AC.[□↦p or q]
Σ: Signature
Γ: Theory
AC: Application_context
p0: Pattern
Prf: well_formed p0
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
IH1: Γ ⊢i AC.[□↦p or q] ---> AC.[□↦p] or AC.[□↦q] using (ExGen := ∅, SVSubst := ∅, KT := false, FP := frames_of_AC AC)
IH2: Γ ⊢i AC.[□↦p] or AC.[□↦q] ---> AC.[□↦p or q] using (ExGen := ∅, SVSubst := ∅, KT := false, FP := frames_of_AC AC)
Γ ⊢i ?B ---> AC.[□↦p or q] using (ExGen := ∅, SVSubst := ∅, KT := false, FP := {[p0 ↾ Prf]} ∪ frames_of_AC AC)
Σ: Signature
Γ: Theory
AC: Application_context
p0: Pattern
Prf: well_formed p0
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
IH1: Γ ⊢i AC.[□↦p or q] ---> AC.[□↦p] or AC.[□↦q] using (ExGen := ∅, SVSubst := ∅, KT := false, FP := frames_of_AC AC)
IH2: Γ ⊢i AC.[□↦p] or AC.[□↦q] ---> AC.[□↦p or q] using (ExGen := ∅, SVSubst := ∅, KT := false, FP := frames_of_AC AC)
Γ ⊢i AC.[□↦q] ---> ?B using (ExGen := ∅, SVSubst := ∅, KT := false, FP := {[p0 ↾ Prf]} ∪ frames_of_AC AC)
Σ: Signature
Γ: Theory
AC: Application_context
p0: Pattern
Prf: well_formed p0
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
IH1: Γ ⊢i AC.[□↦p or q] ---> AC.[□↦p] or AC.[□↦q] using (ExGen := ∅, SVSubst := ∅, KT := false, FP := frames_of_AC AC)
IH2: Γ ⊢i AC.[□↦p] or AC.[□↦q] ---> AC.[□↦p or q] using (ExGen := ∅, SVSubst := ∅, KT := false, FP := frames_of_AC AC)

well_formed AC.[□↦q]
Σ: Signature
Γ: Theory
AC: Application_context
p0: Pattern
Prf: well_formed p0
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
IH1: Γ ⊢i AC.[□↦p or q] ---> AC.[□↦p] or AC.[□↦q] using (ExGen := ∅, SVSubst := ∅, KT := false, FP := frames_of_AC AC)
IH2: Γ ⊢i AC.[□↦p] or AC.[□↦q] ---> AC.[□↦p or q] using (ExGen := ∅, SVSubst := ∅, KT := false, FP := frames_of_AC AC)
well_formed (AC.[□↦p] or AC.[□↦q])
Σ: Signature
Γ: Theory
AC: Application_context
p0: Pattern
Prf: well_formed p0
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
IH1: Γ ⊢i AC.[□↦p or q] ---> AC.[□↦p] or AC.[□↦q] using (ExGen := ∅, SVSubst := ∅, KT := false, FP := frames_of_AC AC)
IH2: Γ ⊢i AC.[□↦p] or AC.[□↦q] ---> AC.[□↦p or q] using (ExGen := ∅, SVSubst := ∅, KT := false, FP := frames_of_AC AC)
well_formed AC.[□↦p or q]
Σ: Signature
Γ: Theory
AC: Application_context
p0: Pattern
Prf: well_formed p0
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
IH1: Γ ⊢i AC.[□↦p or q] ---> AC.[□↦p] or AC.[□↦q] using (ExGen := ∅, SVSubst := ∅, KT := false, FP := frames_of_AC AC)
IH2: Γ ⊢i AC.[□↦p] or AC.[□↦q] ---> AC.[□↦p or q] using (ExGen := ∅, SVSubst := ∅, KT := false, FP := frames_of_AC AC)
Γ ⊢i AC.[□↦q] ---> AC.[□↦p] or AC.[□↦q] using (ExGen := ∅, SVSubst := ∅, KT := false, FP := {[p0 ↾ Prf]} ∪ frames_of_AC AC)
Σ: Signature
Γ: Theory
AC: Application_context
p0: Pattern
Prf: well_formed p0
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
IH1: Γ ⊢i AC.[□↦p or q] ---> AC.[□↦p] or AC.[□↦q] using (ExGen := ∅, SVSubst := ∅, KT := false, FP := frames_of_AC AC)
IH2: Γ ⊢i AC.[□↦p] or AC.[□↦q] ---> AC.[□↦p or q] using (ExGen := ∅, SVSubst := ∅, KT := false, FP := frames_of_AC AC)

Γ ⊢i AC.[□↦q] ---> AC.[□↦p] or AC.[□↦q] using (ExGen := ∅, SVSubst := ∅, KT := false, FP := {[p0 ↾ Prf]} ∪ frames_of_AC AC)
Σ: Signature
Γ: Theory
AC: Application_context
p0: Pattern
Prf: well_formed p0
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
IH1: Γ ⊢i AC.[□↦p or q] ---> AC.[□↦p] or AC.[□↦q] using (ExGen := ∅, SVSubst := ∅, KT := false, FP := frames_of_AC AC)
IH2: Γ ⊢i AC.[□↦p] or AC.[□↦q] ---> AC.[□↦p or q] using (ExGen := ∅, SVSubst := ∅, KT := false, FP := frames_of_AC AC)

Γ ⊢i AC.[□↦q] ---> AC.[□↦p] or AC.[□↦q] using BasicReasoning
apply disj_right_intro; wf_auto2.
Σ: Signature
Γ: Theory
p0: Pattern
AC: Application_context
Prf: well_formed p0
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
IHAC: Γ ⊢i AC.[□↦p or q] <---> AC.[□↦p] or AC.[□↦q] using (ExGen := ∅, SVSubst := ∅, KT := false, FP := frames_of_AC AC)

Γ ⊢i p0 $ AC.[□↦p or q] <---> p0 $ AC.[□↦p] or p0 $ AC.[□↦q] using (ExGen := ∅, SVSubst := ∅, KT := false, FP := {[p0 ↾ Prf]} ∪ frames_of_AC AC)
Σ: Signature
Γ: Theory
p0: Pattern
AC: Application_context
Prf: well_formed p0
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
IHAC: ((Γ ⊢i AC.[□↦p or q] ---> AC.[□↦p] or AC.[□↦q] using (ExGen := ∅, SVSubst := ∅, KT := false, FP := frames_of_AC AC)) * (Γ ⊢i AC.[□↦p] or AC.[□↦q] ---> AC.[□↦p or q] using (ExGen := ∅, SVSubst := ∅, KT := false, FP := frames_of_AC AC)))%type

Γ ⊢i p0 $ AC.[□↦p or q] <---> p0 $ AC.[□↦p] or p0 $ AC.[□↦q] using (ExGen := ∅, SVSubst := ∅, KT := false, FP := {[p0 ↾ Prf]} ∪ frames_of_AC AC)
Σ: Signature
Γ: Theory
p0: Pattern
AC: Application_context
Prf: well_formed p0
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
IH1: Γ ⊢i AC.[□↦p or q] ---> AC.[□↦p] or AC.[□↦q] using (ExGen := ∅, SVSubst := ∅, KT := false, FP := frames_of_AC AC)
IH2: Γ ⊢i AC.[□↦p] or AC.[□↦q] ---> AC.[□↦p or q] using (ExGen := ∅, SVSubst := ∅, KT := false, FP := frames_of_AC AC)

Γ ⊢i p0 $ AC.[□↦p or q] <---> p0 $ AC.[□↦p] or p0 $ AC.[□↦q] using (ExGen := ∅, SVSubst := ∅, KT := false, FP := {[p0 ↾ Prf]} ∪ frames_of_AC AC)
Σ: Signature
Γ: Theory
p0: Pattern
AC: Application_context
Prf: well_formed p0
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
IH1: Γ ⊢i AC.[□↦p or q] ---> AC.[□↦p] or AC.[□↦q] using (ExGen := ∅, SVSubst := ∅, KT := false, FP := frames_of_AC AC)
IH2: Γ ⊢i AC.[□↦p] or AC.[□↦q] ---> AC.[□↦p or q] using (ExGen := ∅, SVSubst := ∅, KT := false, FP := frames_of_AC AC)
i: ProofInfo
Heqi: i = (ExGen := ∅, SVSubst := ∅, KT := false, FP := {[p0 ↾ Prf]} ∪ frames_of_AC AC)

Γ ⊢i p0 $ AC.[□↦p or q] <---> p0 $ AC.[□↦p] or p0 $ AC.[□↦q] using i
Σ: Signature
Γ: Theory
p0: Pattern
AC: Application_context
Prf: well_formed p0
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
IH1: Γ ⊢i AC.[□↦p or q] ---> AC.[□↦p] or AC.[□↦q] using (ExGen := ∅, SVSubst := ∅, KT := false, FP := frames_of_AC AC)
IH2: Γ ⊢i AC.[□↦p] or AC.[□↦q] ---> AC.[□↦p or q] using (ExGen := ∅, SVSubst := ∅, KT := false, FP := frames_of_AC AC)
i: ProofInfo
Heqi: i = (ExGen := ∅, SVSubst := ∅, KT := false, FP := {[p0 ↾ Prf]} ∪ frames_of_AC AC)

Γ ⊢i p0 $ AC.[□↦p or q] ---> p0 $ AC.[□↦p] or p0 $ AC.[□↦q] using i
Σ: Signature
Γ: Theory
p0: Pattern
AC: Application_context
Prf: well_formed p0
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
IH1: Γ ⊢i AC.[□↦p or q] ---> AC.[□↦p] or AC.[□↦q] using (ExGen := ∅, SVSubst := ∅, KT := false, FP := frames_of_AC AC)
IH2: Γ ⊢i AC.[□↦p] or AC.[□↦q] ---> AC.[□↦p or q] using (ExGen := ∅, SVSubst := ∅, KT := false, FP := frames_of_AC AC)
i: ProofInfo
Heqi: i = (ExGen := ∅, SVSubst := ∅, KT := false, FP := {[p0 ↾ Prf]} ∪ frames_of_AC AC)
Γ ⊢i p0 $ AC.[□↦p] or p0 $ AC.[□↦q] ---> p0 $ AC.[□↦p or q] using i
Σ: Signature
Γ: Theory
p0: Pattern
AC: Application_context
Prf: well_formed p0
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
IH1: Γ ⊢i AC.[□↦p or q] ---> AC.[□↦p] or AC.[□↦q] using (ExGen := ∅, SVSubst := ∅, KT := false, FP := frames_of_AC AC)
IH2: Γ ⊢i AC.[□↦p] or AC.[□↦q] ---> AC.[□↦p or q] using (ExGen := ∅, SVSubst := ∅, KT := false, FP := frames_of_AC AC)
i: ProofInfo
Heqi: i = (ExGen := ∅, SVSubst := ∅, KT := false, FP := {[p0 ↾ Prf]} ∪ frames_of_AC AC)

Γ ⊢i p0 $ AC.[□↦p or q] ---> p0 $ AC.[□↦p] or p0 $ AC.[□↦q] using i
Σ: Signature
Γ: Theory
p0: Pattern
AC: Application_context
Prf: well_formed p0
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
IH1: Γ ⊢i AC.[□↦p or q] ---> AC.[□↦p] or AC.[□↦q] using (ExGen := ∅, SVSubst := ∅, KT := false, FP := frames_of_AC AC)
IH2: Γ ⊢i AC.[□↦p] or AC.[□↦q] ---> AC.[□↦p or q] using (ExGen := ∅, SVSubst := ∅, KT := false, FP := frames_of_AC AC)
i: ProofInfo
Heqi: i = (ExGen := ∅, SVSubst := ∅, KT := false, FP := {[p0 ↾ Prf]} ∪ frames_of_AC AC)
H: Γ ⊢i AC.[□↦p or q] ---> AC.[□↦p] or AC.[□↦q] using (ExGen := ∅, SVSubst := ∅, KT := false, FP := frames_of_AC AC)

Γ ⊢i p0 $ AC.[□↦p or q] ---> p0 $ AC.[□↦p] or p0 $ AC.[□↦q] using i
Σ: Signature
Γ: Theory
p0: Pattern
AC: Application_context
Prf: well_formed p0
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
IH1: Γ ⊢i AC.[□↦p or q] ---> AC.[□↦p] or AC.[□↦q] using (ExGen := ∅, SVSubst := ∅, KT := false, FP := frames_of_AC AC)
IH2: Γ ⊢i AC.[□↦p] or AC.[□↦q] ---> AC.[□↦p or q] using (ExGen := ∅, SVSubst := ∅, KT := false, FP := frames_of_AC AC)
i: ProofInfo
Heqi: i = (ExGen := ∅, SVSubst := ∅, KT := false, FP := {[p0 ↾ Prf]} ∪ frames_of_AC AC)
H: Γ ⊢i AC.[□↦p or q] ---> AC.[□↦p] or AC.[□↦q] using i

Γ ⊢i p0 $ AC.[□↦p or q] ---> p0 $ AC.[□↦p] or p0 $ AC.[□↦q] using i
Σ: Signature
Γ: Theory
p0: Pattern
AC: Application_context
Prf: well_formed p0
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
IH1: Γ ⊢i AC.[□↦p or q] ---> AC.[□↦p] or AC.[□↦q] using (ExGen := ∅, SVSubst := ∅, KT := false, FP := frames_of_AC AC)
IH2: Γ ⊢i AC.[□↦p] or AC.[□↦q] ---> AC.[□↦p or q] using (ExGen := ∅, SVSubst := ∅, KT := false, FP := frames_of_AC AC)
i: ProofInfo
Heqi: i = (ExGen := ∅, SVSubst := ∅, KT := false, FP := {[p0 ↾ Prf]} ∪ frames_of_AC AC)
H: Γ ⊢i AC.[□↦p or q] ---> AC.[□↦p] or AC.[□↦q] using (ExGen := ∅, SVSubst := ∅, KT := false, FP := frames_of_AC AC)
ProofInfoLe (ExGen := ∅, SVSubst := ∅, KT := false, FP := frames_of_AC AC) i
Σ: Signature
Γ: Theory
p0: Pattern
AC: Application_context
Prf: well_formed p0
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
IH1: Γ ⊢i AC.[□↦p or q] ---> AC.[□↦p] or AC.[□↦q] using (ExGen := ∅, SVSubst := ∅, KT := false, FP := frames_of_AC AC)
IH2: Γ ⊢i AC.[□↦p] or AC.[□↦q] ---> AC.[□↦p or q] using (ExGen := ∅, SVSubst := ∅, KT := false, FP := frames_of_AC AC)
i: ProofInfo
Heqi: i = (ExGen := ∅, SVSubst := ∅, KT := false, FP := {[p0 ↾ Prf]} ∪ frames_of_AC AC)
H: Γ ⊢i AC.[□↦p or q] ---> AC.[□↦p] or AC.[□↦q] using (ExGen := ∅, SVSubst := ∅, KT := false, FP := frames_of_AC AC)

ProofInfoLe (ExGen := ∅, SVSubst := ∅, KT := false, FP := frames_of_AC AC) i
Σ: Signature
Γ: Theory
p0: Pattern
AC: Application_context
Prf: well_formed p0
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
IH1: Γ ⊢i AC.[□↦p or q] ---> AC.[□↦p] or AC.[□↦q] using (ExGen := ∅, SVSubst := ∅, KT := false, FP := frames_of_AC AC)
IH2: Γ ⊢i AC.[□↦p] or AC.[□↦q] ---> AC.[□↦p or q] using (ExGen := ∅, SVSubst := ∅, KT := false, FP := frames_of_AC AC)
H: Γ ⊢i AC.[□↦p or q] ---> AC.[□↦p] or AC.[□↦q] using (ExGen := ∅, SVSubst := ∅, KT := false, FP := frames_of_AC AC)

ProofInfoLe (ExGen := ∅, SVSubst := ∅, KT := false, FP := frames_of_AC AC) (ExGen := ∅, SVSubst := ∅, KT := false, FP := {[p0 ↾ Prf]} ∪ frames_of_AC AC)
try_solve_pile.
Σ: Signature
Γ: Theory
p0: Pattern
AC: Application_context
Prf: well_formed p0
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
IH1: Γ ⊢i AC.[□↦p or q] ---> AC.[□↦p] or AC.[□↦q] using (ExGen := ∅, SVSubst := ∅, KT := false, FP := frames_of_AC AC)
IH2: Γ ⊢i AC.[□↦p] or AC.[□↦q] ---> AC.[□↦p or q] using (ExGen := ∅, SVSubst := ∅, KT := false, FP := frames_of_AC AC)
i: ProofInfo
Heqi: i = (ExGen := ∅, SVSubst := ∅, KT := false, FP := {[p0 ↾ Prf]} ∪ frames_of_AC AC)
H: Γ ⊢i AC.[□↦p or q] ---> AC.[□↦p] or AC.[□↦q] using i

Γ ⊢i p0 $ AC.[□↦p or q] ---> p0 $ AC.[□↦p] or p0 $ AC.[□↦q] using i
Σ: Signature
Γ: Theory
p0: Pattern
AC: Application_context
Prf: well_formed p0
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
IH1: Γ ⊢i AC.[□↦p or q] ---> AC.[□↦p] or AC.[□↦q] using (ExGen := ∅, SVSubst := ∅, KT := false, FP := frames_of_AC AC)
IH2: Γ ⊢i AC.[□↦p] or AC.[□↦q] ---> AC.[□↦p or q] using (ExGen := ∅, SVSubst := ∅, KT := false, FP := frames_of_AC AC)
i: ProofInfo
Heqi: i = (ExGen := ∅, SVSubst := ∅, KT := false, FP := {[p0 ↾ Prf]} ∪ frames_of_AC AC)
H: Γ ⊢i p0 $ AC.[□↦p or q] ---> p0 $ (AC.[□↦p] or AC.[□↦q]) using i

Γ ⊢i p0 $ AC.[□↦p or q] ---> p0 $ AC.[□↦p] or p0 $ AC.[□↦q] using i
Σ: Signature
Γ: Theory
p0: Pattern
AC: Application_context
Prf: well_formed p0
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
IH1: Γ ⊢i AC.[□↦p or q] ---> AC.[□↦p] or AC.[□↦q] using (ExGen := ∅, SVSubst := ∅, KT := false, FP := frames_of_AC AC)
IH2: Γ ⊢i AC.[□↦p] or AC.[□↦q] ---> AC.[□↦p or q] using (ExGen := ∅, SVSubst := ∅, KT := false, FP := frames_of_AC AC)
i: ProofInfo
Heqi: i = (ExGen := ∅, SVSubst := ∅, KT := false, FP := {[p0 ↾ Prf]} ∪ frames_of_AC AC)
H: Γ ⊢i AC.[□↦p or q] ---> AC.[□↦p] or AC.[□↦q] using i
ProofInfoLe (ExGen := ∅, SVSubst := ∅, KT := false, FP := {[p0 ↾ Prf]}) i
Σ: Signature
Γ: Theory
p0: Pattern
AC: Application_context
Prf: well_formed p0
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
IH1: Γ ⊢i AC.[□↦p or q] ---> AC.[□↦p] or AC.[□↦q] using (ExGen := ∅, SVSubst := ∅, KT := false, FP := frames_of_AC AC)
IH2: Γ ⊢i AC.[□↦p] or AC.[□↦q] ---> AC.[□↦p or q] using (ExGen := ∅, SVSubst := ∅, KT := false, FP := frames_of_AC AC)
i: ProofInfo
Heqi: i = (ExGen := ∅, SVSubst := ∅, KT := false, FP := {[p0 ↾ Prf]} ∪ frames_of_AC AC)
H: Γ ⊢i p0 $ AC.[□↦p or q] ---> p0 $ (AC.[□↦p] or AC.[□↦q]) using i

well_formed (p0 $ AC.[□↦p or q])
Σ: Signature
Γ: Theory
p0: Pattern
AC: Application_context
Prf: well_formed p0
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
IH1: Γ ⊢i AC.[□↦p or q] ---> AC.[□↦p] or AC.[□↦q] using (ExGen := ∅, SVSubst := ∅, KT := false, FP := frames_of_AC AC)
IH2: Γ ⊢i AC.[□↦p] or AC.[□↦q] ---> AC.[□↦p or q] using (ExGen := ∅, SVSubst := ∅, KT := false, FP := frames_of_AC AC)
i: ProofInfo
Heqi: i = (ExGen := ∅, SVSubst := ∅, KT := false, FP := {[p0 ↾ Prf]} ∪ frames_of_AC AC)
H: Γ ⊢i p0 $ AC.[□↦p or q] ---> p0 $ (AC.[□↦p] or AC.[□↦q]) using i
well_formed ?B
Σ: Signature
Γ: Theory
p0: Pattern
AC: Application_context
Prf: well_formed p0
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
IH1: Γ ⊢i AC.[□↦p or q] ---> AC.[□↦p] or AC.[□↦q] using (ExGen := ∅, SVSubst := ∅, KT := false, FP := frames_of_AC AC)
IH2: Γ ⊢i AC.[□↦p] or AC.[□↦q] ---> AC.[□↦p or q] using (ExGen := ∅, SVSubst := ∅, KT := false, FP := frames_of_AC AC)
i: ProofInfo
Heqi: i = (ExGen := ∅, SVSubst := ∅, KT := false, FP := {[p0 ↾ Prf]} ∪ frames_of_AC AC)
H: Γ ⊢i p0 $ AC.[□↦p or q] ---> p0 $ (AC.[□↦p] or AC.[□↦q]) using i
well_formed (p0 $ AC.[□↦p] or p0 $ AC.[□↦q])
Σ: Signature
Γ: Theory
p0: Pattern
AC: Application_context
Prf: well_formed p0
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
IH1: Γ ⊢i AC.[□↦p or q] ---> AC.[□↦p] or AC.[□↦q] using (ExGen := ∅, SVSubst := ∅, KT := false, FP := frames_of_AC AC)
IH2: Γ ⊢i AC.[□↦p] or AC.[□↦q] ---> AC.[□↦p or q] using (ExGen := ∅, SVSubst := ∅, KT := false, FP := frames_of_AC AC)
i: ProofInfo
Heqi: i = (ExGen := ∅, SVSubst := ∅, KT := false, FP := {[p0 ↾ Prf]} ∪ frames_of_AC AC)
H: Γ ⊢i p0 $ AC.[□↦p or q] ---> p0 $ (AC.[□↦p] or AC.[□↦q]) using i
Γ ⊢i p0 $ AC.[□↦p or q] ---> ?B using i
Σ: Signature
Γ: Theory
p0: Pattern
AC: Application_context
Prf: well_formed p0
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
IH1: Γ ⊢i AC.[□↦p or q] ---> AC.[□↦p] or AC.[□↦q] using (ExGen := ∅, SVSubst := ∅, KT := false, FP := frames_of_AC AC)
IH2: Γ ⊢i AC.[□↦p] or AC.[□↦q] ---> AC.[□↦p or q] using (ExGen := ∅, SVSubst := ∅, KT := false, FP := frames_of_AC AC)
i: ProofInfo
Heqi: i = (ExGen := ∅, SVSubst := ∅, KT := false, FP := {[p0 ↾ Prf]} ∪ frames_of_AC AC)
H: Γ ⊢i p0 $ AC.[□↦p or q] ---> p0 $ (AC.[□↦p] or AC.[□↦q]) using i
Γ ⊢i ?B ---> p0 $ AC.[□↦p] or p0 $ AC.[□↦q] using i
Σ: Signature
Γ: Theory
p0: Pattern
AC: Application_context
Prf: well_formed p0
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
IH1: Γ ⊢i AC.[□↦p or q] ---> AC.[□↦p] or AC.[□↦q] using (ExGen := ∅, SVSubst := ∅, KT := false, FP := frames_of_AC AC)
IH2: Γ ⊢i AC.[□↦p] or AC.[□↦q] ---> AC.[□↦p or q] using (ExGen := ∅, SVSubst := ∅, KT := false, FP := frames_of_AC AC)
i: ProofInfo
Heqi: i = (ExGen := ∅, SVSubst := ∅, KT := false, FP := {[p0 ↾ Prf]} ∪ frames_of_AC AC)
H: Γ ⊢i AC.[□↦p or q] ---> AC.[□↦p] or AC.[□↦q] using i
ProofInfoLe (ExGen := ∅, SVSubst := ∅, KT := false, FP := {[p0 ↾ Prf]}) i
Σ: Signature
Γ: Theory
p0: Pattern
AC: Application_context
Prf: well_formed p0
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
IH1: Γ ⊢i AC.[□↦p or q] ---> AC.[□↦p] or AC.[□↦q] using (ExGen := ∅, SVSubst := ∅, KT := false, FP := frames_of_AC AC)
IH2: Γ ⊢i AC.[□↦p] or AC.[□↦q] ---> AC.[□↦p or q] using (ExGen := ∅, SVSubst := ∅, KT := false, FP := frames_of_AC AC)
i: ProofInfo
Heqi: i = (ExGen := ∅, SVSubst := ∅, KT := false, FP := {[p0 ↾ Prf]} ∪ frames_of_AC AC)
H: Γ ⊢i p0 $ AC.[□↦p or q] ---> p0 $ (AC.[□↦p] or AC.[□↦q]) using i

well_formed (p0 $ AC.[□↦p or q])
Σ: Signature
Γ: Theory
p0: Pattern
AC: Application_context
Prf: well_formed p0
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
IH1: Γ ⊢i AC.[□↦p or q] ---> AC.[□↦p] or AC.[□↦q] using (ExGen := ∅, SVSubst := ∅, KT := false, FP := frames_of_AC AC)
IH2: Γ ⊢i AC.[□↦p] or AC.[□↦q] ---> AC.[□↦p or q] using (ExGen := ∅, SVSubst := ∅, KT := false, FP := frames_of_AC AC)
i: ProofInfo
Heqi: i = (ExGen := ∅, SVSubst := ∅, KT := false, FP := {[p0 ↾ Prf]} ∪ frames_of_AC AC)
H: Γ ⊢i p0 $ AC.[□↦p or q] ---> p0 $ (AC.[□↦p] or AC.[□↦q]) using i
well_formed (p0 $ (AC.[□↦p] or AC.[□↦q]))
Σ: Signature
Γ: Theory
p0: Pattern
AC: Application_context
Prf: well_formed p0
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
IH1: Γ ⊢i AC.[□↦p or q] ---> AC.[□↦p] or AC.[□↦q] using (ExGen := ∅, SVSubst := ∅, KT := false, FP := frames_of_AC AC)
IH2: Γ ⊢i AC.[□↦p] or AC.[□↦q] ---> AC.[□↦p or q] using (ExGen := ∅, SVSubst := ∅, KT := false, FP := frames_of_AC AC)
i: ProofInfo
Heqi: i = (ExGen := ∅, SVSubst := ∅, KT := false, FP := {[p0 ↾ Prf]} ∪ frames_of_AC AC)
H: Γ ⊢i p0 $ AC.[□↦p or q] ---> p0 $ (AC.[□↦p] or AC.[□↦q]) using i
well_formed (p0 $ AC.[□↦p] or p0 $ AC.[□↦q])
Σ: Signature
Γ: Theory
p0: Pattern
AC: Application_context
Prf: well_formed p0
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
IH1: Γ ⊢i AC.[□↦p or q] ---> AC.[□↦p] or AC.[□↦q] using (ExGen := ∅, SVSubst := ∅, KT := false, FP := frames_of_AC AC)
IH2: Γ ⊢i AC.[□↦p] or AC.[□↦q] ---> AC.[□↦p or q] using (ExGen := ∅, SVSubst := ∅, KT := false, FP := frames_of_AC AC)
i: ProofInfo
Heqi: i = (ExGen := ∅, SVSubst := ∅, KT := false, FP := {[p0 ↾ Prf]} ∪ frames_of_AC AC)
H: Γ ⊢i p0 $ AC.[□↦p or q] ---> p0 $ (AC.[□↦p] or AC.[□↦q]) using i
Γ ⊢i p0 $ (AC.[□↦p] or AC.[□↦q]) ---> p0 $ AC.[□↦p] or p0 $ AC.[□↦q] using i
Σ: Signature
Γ: Theory
p0: Pattern
AC: Application_context
Prf: well_formed p0
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
IH1: Γ ⊢i AC.[□↦p or q] ---> AC.[□↦p] or AC.[□↦q] using (ExGen := ∅, SVSubst := ∅, KT := false, FP := frames_of_AC AC)
IH2: Γ ⊢i AC.[□↦p] or AC.[□↦q] ---> AC.[□↦p or q] using (ExGen := ∅, SVSubst := ∅, KT := false, FP := frames_of_AC AC)
i: ProofInfo
Heqi: i = (ExGen := ∅, SVSubst := ∅, KT := false, FP := {[p0 ↾ Prf]} ∪ frames_of_AC AC)
H: Γ ⊢i AC.[□↦p or q] ---> AC.[□↦p] or AC.[□↦q] using i
ProofInfoLe (ExGen := ∅, SVSubst := ∅, KT := false, FP := {[p0 ↾ Prf]}) i
Σ: Signature
Γ: Theory
p0: Pattern
AC: Application_context
Prf: well_formed p0
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
IH1: Γ ⊢i AC.[□↦p or q] ---> AC.[□↦p] or AC.[□↦q] using (ExGen := ∅, SVSubst := ∅, KT := false, FP := frames_of_AC AC)
IH2: Γ ⊢i AC.[□↦p] or AC.[□↦q] ---> AC.[□↦p or q] using (ExGen := ∅, SVSubst := ∅, KT := false, FP := frames_of_AC AC)
i: ProofInfo
Heqi: i = (ExGen := ∅, SVSubst := ∅, KT := false, FP := {[p0 ↾ Prf]} ∪ frames_of_AC AC)
H: Γ ⊢i p0 $ AC.[□↦p or q] ---> p0 $ (AC.[□↦p] or AC.[□↦q]) using i

Γ ⊢i p0 $ (AC.[□↦p] or AC.[□↦q]) ---> p0 $ AC.[□↦p] or p0 $ AC.[□↦q] using i
Σ: Signature
Γ: Theory
p0: Pattern
AC: Application_context
Prf: well_formed p0
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
IH1: Γ ⊢i AC.[□↦p or q] ---> AC.[□↦p] or AC.[□↦q] using (ExGen := ∅, SVSubst := ∅, KT := false, FP := frames_of_AC AC)
IH2: Γ ⊢i AC.[□↦p] or AC.[□↦q] ---> AC.[□↦p or q] using (ExGen := ∅, SVSubst := ∅, KT := false, FP := frames_of_AC AC)
i: ProofInfo
Heqi: i = (ExGen := ∅, SVSubst := ∅, KT := false, FP := {[p0 ↾ Prf]} ∪ frames_of_AC AC)
H: Γ ⊢i AC.[□↦p or q] ---> AC.[□↦p] or AC.[□↦q] using i
ProofInfoLe (ExGen := ∅, SVSubst := ∅, KT := false, FP := {[p0 ↾ Prf]}) i
Σ: Signature
Γ: Theory
p0: Pattern
AC: Application_context
Prf: well_formed p0
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
IH1: Γ ⊢i AC.[□↦p or q] ---> AC.[□↦p] or AC.[□↦q] using (ExGen := ∅, SVSubst := ∅, KT := false, FP := frames_of_AC AC)
IH2: Γ ⊢i AC.[□↦p] or AC.[□↦q] ---> AC.[□↦p or q] using (ExGen := ∅, SVSubst := ∅, KT := false, FP := frames_of_AC AC)
i: ProofInfo
Heqi: i = (ExGen := ∅, SVSubst := ∅, KT := false, FP := {[p0 ↾ Prf]} ∪ frames_of_AC AC)
H: Γ ⊢i AC.[□↦p or q] ---> AC.[□↦p] or AC.[□↦q] using i

ProofInfoLe (ExGen := ∅, SVSubst := ∅, KT := false, FP := {[p0 ↾ Prf]}) i
Σ: Signature
Γ: Theory
p0: Pattern
AC: Application_context
Prf: well_formed p0
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
IH1: Γ ⊢i AC.[□↦p or q] ---> AC.[□↦p] or AC.[□↦q] using (ExGen := ∅, SVSubst := ∅, KT := false, FP := frames_of_AC AC)
IH2: Γ ⊢i AC.[□↦p] or AC.[□↦q] ---> AC.[□↦p or q] using (ExGen := ∅, SVSubst := ∅, KT := false, FP := frames_of_AC AC)
H: Γ ⊢i AC.[□↦p or q] ---> AC.[□↦p] or AC.[□↦q] using (ExGen := ∅, SVSubst := ∅, KT := false, FP := {[p0 ↾ Prf]} ∪ frames_of_AC AC)

ProofInfoLe (ExGen := ∅, SVSubst := ∅, KT := false, FP := {[p0 ↾ Prf]}) (ExGen := ∅, SVSubst := ∅, KT := false, FP := {[p0 ↾ Prf]} ∪ frames_of_AC AC)
try_solve_pile.
Σ: Signature
Γ: Theory
p0: Pattern
AC: Application_context
Prf: well_formed p0
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
IH1: Γ ⊢i AC.[□↦p or q] ---> AC.[□↦p] or AC.[□↦q] using (ExGen := ∅, SVSubst := ∅, KT := false, FP := frames_of_AC AC)
IH2: Γ ⊢i AC.[□↦p] or AC.[□↦q] ---> AC.[□↦p or q] using (ExGen := ∅, SVSubst := ∅, KT := false, FP := frames_of_AC AC)
i: ProofInfo
Heqi: i = (ExGen := ∅, SVSubst := ∅, KT := false, FP := {[p0 ↾ Prf]} ∪ frames_of_AC AC)
H: Γ ⊢i p0 $ AC.[□↦p or q] ---> p0 $ (AC.[□↦p] or AC.[□↦q]) using i

Γ ⊢i p0 $ (AC.[□↦p] or AC.[□↦q]) ---> p0 $ AC.[□↦p] or p0 $ AC.[□↦q] using i
Σ: Signature
Γ: Theory
p0: Pattern
AC: Application_context
Prf: well_formed p0
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
p': Pattern
Heqp': p' = AC.[□↦p]
IH1: Γ ⊢i AC.[□↦p or q] ---> p' or AC.[□↦q] using (ExGen := ∅, SVSubst := ∅, KT := false, FP := frames_of_AC AC)
IH2: Γ ⊢i p' or AC.[□↦q] ---> AC.[□↦p or q] using (ExGen := ∅, SVSubst := ∅, KT := false, FP := frames_of_AC AC)
i: ProofInfo
Heqi: i = (ExGen := ∅, SVSubst := ∅, KT := false, FP := {[p0 ↾ Prf]} ∪ frames_of_AC AC)
H: Γ ⊢i p0 $ AC.[□↦p or q] ---> p0 $ (p' or AC.[□↦q]) using i

Γ ⊢i p0 $ (p' or AC.[□↦q]) ---> p0 $ p' or p0 $ AC.[□↦q] using i
Σ: Signature
Γ: Theory
p0: Pattern
AC: Application_context
Prf: well_formed p0
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
p': Pattern
Heqp': p' = AC.[□↦p]
q': Pattern
Heqq': q' = AC.[□↦q]
IH1: Γ ⊢i AC.[□↦p or q] ---> p' or q' using (ExGen := ∅, SVSubst := ∅, KT := false, FP := frames_of_AC AC)
IH2: Γ ⊢i p' or q' ---> AC.[□↦p or q] using (ExGen := ∅, SVSubst := ∅, KT := false, FP := frames_of_AC AC)
i: ProofInfo
Heqi: i = (ExGen := ∅, SVSubst := ∅, KT := false, FP := {[p0 ↾ Prf]} ∪ frames_of_AC AC)
H: Γ ⊢i p0 $ AC.[□↦p or q] ---> p0 $ (p' or q') using i

Γ ⊢i p0 $ (p' or q') ---> p0 $ p' or p0 $ q' using i
Σ: Signature
Γ: Theory
p0: Pattern
AC: Application_context
Prf: well_formed p0
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
p': Pattern
Heqp': p' = AC.[□↦p]
q': Pattern
Heqq': q' = AC.[□↦q]
IH1: Γ ⊢i AC.[□↦p or q] ---> p' or q' using (ExGen := ∅, SVSubst := ∅, KT := false, FP := frames_of_AC AC)
IH2: Γ ⊢i p' or q' ---> AC.[□↦p or q] using (ExGen := ∅, SVSubst := ∅, KT := false, FP := frames_of_AC AC)
H: Γ ⊢i p0 $ AC.[□↦p or q] ---> p0 $ (p' or q') using (ExGen := ∅, SVSubst := ∅, KT := false, FP := {[p0 ↾ Prf]} ∪ frames_of_AC AC)

Γ ⊢i p0 $ (p' or q') ---> p0 $ p' or p0 $ q' using BasicReasoning
Σ: Signature
Γ: Theory
p0: Pattern
AC: Application_context
Prf: well_formed p0
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
p': Pattern
Heqp': p' = AC.[□↦p]
q': Pattern
Heqq': q' = AC.[□↦q]
IH1: Γ ⊢i AC.[□↦p or q] ---> p' or q' using (ExGen := ∅, SVSubst := ∅, KT := false, FP := frames_of_AC AC)
IH2: Γ ⊢i p' or q' ---> AC.[□↦p or q] using (ExGen := ∅, SVSubst := ∅, KT := false, FP := frames_of_AC AC)
H: Γ ⊢i p0 $ AC.[□↦p or q] ---> p0 $ (p' or q') using (ExGen := ∅, SVSubst := ∅, KT := false, FP := {[p0 ↾ Prf]} ∪ frames_of_AC AC)

well_formed p'
Σ: Signature
Γ: Theory
p0: Pattern
AC: Application_context
Prf: well_formed p0
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
p': Pattern
Heqp': p' = AC.[□↦p]
q': Pattern
Heqq': q' = AC.[□↦q]
IH1: Γ ⊢i AC.[□↦p or q] ---> p' or q' using (ExGen := ∅, SVSubst := ∅, KT := false, FP := frames_of_AC AC)
IH2: Γ ⊢i p' or q' ---> AC.[□↦p or q] using (ExGen := ∅, SVSubst := ∅, KT := false, FP := frames_of_AC AC)
H: Γ ⊢i p0 $ AC.[□↦p or q] ---> p0 $ (p' or q') using (ExGen := ∅, SVSubst := ∅, KT := false, FP := {[p0 ↾ Prf]} ∪ frames_of_AC AC)
well_formed q'
Σ: Signature
Γ: Theory
p0: Pattern
AC: Application_context
Prf: well_formed p0
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
p': Pattern
Heqp': p' = AC.[□↦p]
q': Pattern
Heqq': q' = AC.[□↦q]
IH1: Γ ⊢i AC.[□↦p or q] ---> p' or q' using (ExGen := ∅, SVSubst := ∅, KT := false, FP := frames_of_AC AC)
IH2: Γ ⊢i p' or q' ---> AC.[□↦p or q] using (ExGen := ∅, SVSubst := ∅, KT := false, FP := frames_of_AC AC)
H: Γ ⊢i p0 $ AC.[□↦p or q] ---> p0 $ (p' or q') using (ExGen := ∅, SVSubst := ∅, KT := false, FP := {[p0 ↾ Prf]} ∪ frames_of_AC AC)
well_formed p0
all: subst; try_wfauto2.
Σ: Signature
Γ: Theory
p0: Pattern
AC: Application_context
Prf: well_formed p0
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
IH1: Γ ⊢i AC.[□↦p or q] ---> AC.[□↦p] or AC.[□↦q] using (ExGen := ∅, SVSubst := ∅, KT := false, FP := frames_of_AC AC)
IH2: Γ ⊢i AC.[□↦p] or AC.[□↦q] ---> AC.[□↦p or q] using (ExGen := ∅, SVSubst := ∅, KT := false, FP := frames_of_AC AC)
i: ProofInfo
Heqi: i = (ExGen := ∅, SVSubst := ∅, KT := false, FP := {[p0 ↾ Prf]} ∪ frames_of_AC AC)

Γ ⊢i p0 $ AC.[□↦p] or p0 $ AC.[□↦q] ---> p0 $ AC.[□↦p or q] using i
Σ: Signature
Γ: Theory
p0: Pattern
AC: Application_context
Prf: well_formed p0
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
IH1: Γ ⊢i AC.[□↦p or q] ---> AC.[□↦p] or AC.[□↦q] using (ExGen := ∅, SVSubst := ∅, KT := false, FP := frames_of_AC AC)
IH2: Γ ⊢i AC.[□↦p] or AC.[□↦q] ---> AC.[□↦p or q] using (ExGen := ∅, SVSubst := ∅, KT := false, FP := frames_of_AC AC)
i: ProofInfo
Heqi: i = (ExGen := ∅, SVSubst := ∅, KT := false, FP := {[p0 ↾ Prf]} ∪ frames_of_AC AC)

Γ ⊢i p0 $ AC.[□↦p] ---> p0 $ AC.[□↦p or q] using i
Σ: Signature
Γ: Theory
p0: Pattern
AC: Application_context
Prf: well_formed p0
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
IH1: Γ ⊢i AC.[□↦p or q] ---> AC.[□↦p] or AC.[□↦q] using (ExGen := ∅, SVSubst := ∅, KT := false, FP := frames_of_AC AC)
IH2: Γ ⊢i AC.[□↦p] or AC.[□↦q] ---> AC.[□↦p or q] using (ExGen := ∅, SVSubst := ∅, KT := false, FP := frames_of_AC AC)
i: ProofInfo
Heqi: i = (ExGen := ∅, SVSubst := ∅, KT := false, FP := {[p0 ↾ Prf]} ∪ frames_of_AC AC)
Γ ⊢i p0 $ AC.[□↦q] ---> p0 $ AC.[□↦p or q] using i
Σ: Signature
Γ: Theory
p0: Pattern
AC: Application_context
Prf: well_formed p0
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
IH1: Γ ⊢i AC.[□↦p or q] ---> AC.[□↦p] or AC.[□↦q] using (ExGen := ∅, SVSubst := ∅, KT := false, FP := frames_of_AC AC)
IH2: Γ ⊢i AC.[□↦p] or AC.[□↦q] ---> AC.[□↦p or q] using (ExGen := ∅, SVSubst := ∅, KT := false, FP := frames_of_AC AC)
i: ProofInfo
Heqi: i = (ExGen := ∅, SVSubst := ∅, KT := false, FP := {[p0 ↾ Prf]} ∪ frames_of_AC AC)

Γ ⊢i p0 $ AC.[□↦p] ---> p0 $ AC.[□↦p or q] using i
Σ: Signature
Γ: Theory
p0: Pattern
AC: Application_context
Prf: well_formed p0
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
IH1: Γ ⊢i AC.[□↦p or q] ---> AC.[□↦p] or AC.[□↦q] using (ExGen := ∅, SVSubst := ∅, KT := false, FP := frames_of_AC AC)
IH2: Γ ⊢i AC.[□↦p] or AC.[□↦q] ---> AC.[□↦p or q] using (ExGen := ∅, SVSubst := ∅, KT := false, FP := frames_of_AC AC)

Γ ⊢i p0 $ AC.[□↦p] ---> p0 $ AC.[□↦p or q] using (ExGen := ∅, SVSubst := ∅, KT := false, FP := {[p0 ↾ Prf]} ∪ frames_of_AC AC)
Σ: Signature
Γ: Theory
p0: Pattern
AC: Application_context
Prf: well_formed p0
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
IH1: Γ ⊢i AC.[□↦p or q] ---> AC.[□↦p] or AC.[□↦q] using (ExGen := ∅, SVSubst := ∅, KT := false, FP := frames_of_AC AC)
IH2: Γ ⊢i AC.[□↦p] or AC.[□↦q] ---> AC.[□↦p or q] using (ExGen := ∅, SVSubst := ∅, KT := false, FP := frames_of_AC AC)

ProofInfoLe (ExGen := ∅, SVSubst := ∅, KT := false, FP := {[p0 ↾ Prf]}) (ExGen := ∅, SVSubst := ∅, KT := false, FP := {[p0 ↾ Prf]} ∪ frames_of_AC AC)
Σ: Signature
Γ: Theory
p0: Pattern
AC: Application_context
Prf: well_formed p0
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
IH1: Γ ⊢i AC.[□↦p or q] ---> AC.[□↦p] or AC.[□↦q] using (ExGen := ∅, SVSubst := ∅, KT := false, FP := frames_of_AC AC)
IH2: Γ ⊢i AC.[□↦p] or AC.[□↦q] ---> AC.[□↦p or q] using (ExGen := ∅, SVSubst := ∅, KT := false, FP := frames_of_AC AC)
Γ ⊢i AC.[□↦p] ---> AC.[□↦p or q] using (ExGen := ∅, SVSubst := ∅, KT := false, FP := {[p0 ↾ Prf]} ∪ frames_of_AC AC)
Σ: Signature
Γ: Theory
p0: Pattern
AC: Application_context
Prf: well_formed p0
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
IH1: Γ ⊢i AC.[□↦p or q] ---> AC.[□↦p] or AC.[□↦q] using (ExGen := ∅, SVSubst := ∅, KT := false, FP := frames_of_AC AC)
IH2: Γ ⊢i AC.[□↦p] or AC.[□↦q] ---> AC.[□↦p or q] using (ExGen := ∅, SVSubst := ∅, KT := false, FP := frames_of_AC AC)

ProofInfoLe (ExGen := ∅, SVSubst := ∅, KT := false, FP := {[p0 ↾ Prf]}) (ExGen := ∅, SVSubst := ∅, KT := false, FP := {[p0 ↾ Prf]} ∪ frames_of_AC AC)
try_solve_pile.
Σ: Signature
Γ: Theory
p0: Pattern
AC: Application_context
Prf: well_formed p0
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
IH1: Γ ⊢i AC.[□↦p or q] ---> AC.[□↦p] or AC.[□↦q] using (ExGen := ∅, SVSubst := ∅, KT := false, FP := frames_of_AC AC)
IH2: Γ ⊢i AC.[□↦p] or AC.[□↦q] ---> AC.[□↦p or q] using (ExGen := ∅, SVSubst := ∅, KT := false, FP := frames_of_AC AC)

Γ ⊢i AC.[□↦p] ---> AC.[□↦p or q] using (ExGen := ∅, SVSubst := ∅, KT := false, FP := {[p0 ↾ Prf]} ∪ frames_of_AC AC)
Σ: Signature
Γ: Theory
p0: Pattern
AC: Application_context
Prf: well_formed p0
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
IH1: Γ ⊢i AC.[□↦p or q] ---> AC.[□↦p] or AC.[□↦q] using (ExGen := ∅, SVSubst := ∅, KT := false, FP := frames_of_AC AC)
IH2: Γ ⊢i AC.[□↦p] or AC.[□↦q] ---> AC.[□↦p or q] using (ExGen := ∅, SVSubst := ∅, KT := false, FP := frames_of_AC AC)

well_formed AC.[□↦p]
Σ: Signature
Γ: Theory
p0: Pattern
AC: Application_context
Prf: well_formed p0
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
IH1: Γ ⊢i AC.[□↦p or q] ---> AC.[□↦p] or AC.[□↦q] using (ExGen := ∅, SVSubst := ∅, KT := false, FP := frames_of_AC AC)
IH2: Γ ⊢i AC.[□↦p] or AC.[□↦q] ---> AC.[□↦p or q] using (ExGen := ∅, SVSubst := ∅, KT := false, FP := frames_of_AC AC)
well_formed ?B
Σ: Signature
Γ: Theory
p0: Pattern
AC: Application_context
Prf: well_formed p0
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
IH1: Γ ⊢i AC.[□↦p or q] ---> AC.[□↦p] or AC.[□↦q] using (ExGen := ∅, SVSubst := ∅, KT := false, FP := frames_of_AC AC)
IH2: Γ ⊢i AC.[□↦p] or AC.[□↦q] ---> AC.[□↦p or q] using (ExGen := ∅, SVSubst := ∅, KT := false, FP := frames_of_AC AC)
well_formed AC.[□↦p or q]
Σ: Signature
Γ: Theory
p0: Pattern
AC: Application_context
Prf: well_formed p0
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
IH1: Γ ⊢i AC.[□↦p or q] ---> AC.[□↦p] or AC.[□↦q] using (ExGen := ∅, SVSubst := ∅, KT := false, FP := frames_of_AC AC)
IH2: Γ ⊢i AC.[□↦p] or AC.[□↦q] ---> AC.[□↦p or q] using (ExGen := ∅, SVSubst := ∅, KT := false, FP := frames_of_AC AC)
Γ ⊢i ?B ---> AC.[□↦p or q] using (ExGen := ∅, SVSubst := ∅, KT := false, FP := {[p0 ↾ Prf]} ∪ frames_of_AC AC)
Σ: Signature
Γ: Theory
p0: Pattern
AC: Application_context
Prf: well_formed p0
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
IH1: Γ ⊢i AC.[□↦p or q] ---> AC.[□↦p] or AC.[□↦q] using (ExGen := ∅, SVSubst := ∅, KT := false, FP := frames_of_AC AC)
IH2: Γ ⊢i AC.[□↦p] or AC.[□↦q] ---> AC.[□↦p or q] using (ExGen := ∅, SVSubst := ∅, KT := false, FP := frames_of_AC AC)
Γ ⊢i AC.[□↦p] ---> ?B using (ExGen := ∅, SVSubst := ∅, KT := false, FP := {[p0 ↾ Prf]} ∪ frames_of_AC AC)
Σ: Signature
Γ: Theory
p0: Pattern
AC: Application_context
Prf: well_formed p0
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
IH1: Γ ⊢i AC.[□↦p or q] ---> AC.[□↦p] or AC.[□↦q] using (ExGen := ∅, SVSubst := ∅, KT := false, FP := frames_of_AC AC)
IH2: Γ ⊢i AC.[□↦p] or AC.[□↦q] ---> AC.[□↦p or q] using (ExGen := ∅, SVSubst := ∅, KT := false, FP := frames_of_AC AC)

well_formed AC.[□↦p]
Σ: Signature
Γ: Theory
p0: Pattern
AC: Application_context
Prf: well_formed p0
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
IH1: Γ ⊢i AC.[□↦p or q] ---> AC.[□↦p] or AC.[□↦q] using (ExGen := ∅, SVSubst := ∅, KT := false, FP := frames_of_AC AC)
IH2: Γ ⊢i AC.[□↦p] or AC.[□↦q] ---> AC.[□↦p or q] using (ExGen := ∅, SVSubst := ∅, KT := false, FP := frames_of_AC AC)
well_formed (AC.[□↦p] or AC.[□↦q])
Σ: Signature
Γ: Theory
p0: Pattern
AC: Application_context
Prf: well_formed p0
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
IH1: Γ ⊢i AC.[□↦p or q] ---> AC.[□↦p] or AC.[□↦q] using (ExGen := ∅, SVSubst := ∅, KT := false, FP := frames_of_AC AC)
IH2: Γ ⊢i AC.[□↦p] or AC.[□↦q] ---> AC.[□↦p or q] using (ExGen := ∅, SVSubst := ∅, KT := false, FP := frames_of_AC AC)
well_formed AC.[□↦p or q]
Σ: Signature
Γ: Theory
p0: Pattern
AC: Application_context
Prf: well_formed p0
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
IH1: Γ ⊢i AC.[□↦p or q] ---> AC.[□↦p] or AC.[□↦q] using (ExGen := ∅, SVSubst := ∅, KT := false, FP := frames_of_AC AC)
IH2: Γ ⊢i AC.[□↦p] or AC.[□↦q] ---> AC.[□↦p or q] using (ExGen := ∅, SVSubst := ∅, KT := false, FP := frames_of_AC AC)
Γ ⊢i AC.[□↦p] ---> AC.[□↦p] or AC.[□↦q] using (ExGen := ∅, SVSubst := ∅, KT := false, FP := {[p0 ↾ Prf]} ∪ frames_of_AC AC)
Σ: Signature
Γ: Theory
p0: Pattern
AC: Application_context
Prf: well_formed p0
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
IH1: Γ ⊢i AC.[□↦p or q] ---> AC.[□↦p] or AC.[□↦q] using (ExGen := ∅, SVSubst := ∅, KT := false, FP := frames_of_AC AC)
IH2: Γ ⊢i AC.[□↦p] or AC.[□↦q] ---> AC.[□↦p or q] using (ExGen := ∅, SVSubst := ∅, KT := false, FP := frames_of_AC AC)

Γ ⊢i AC.[□↦p] ---> AC.[□↦p] or AC.[□↦q] using (ExGen := ∅, SVSubst := ∅, KT := false, FP := {[p0 ↾ Prf]} ∪ frames_of_AC AC)
Σ: Signature
Γ: Theory
p0: Pattern
AC: Application_context
Prf: well_formed p0
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
IH1: Γ ⊢i AC.[□↦p or q] ---> AC.[□↦p] or AC.[□↦q] using (ExGen := ∅, SVSubst := ∅, KT := false, FP := frames_of_AC AC)
IH2: Γ ⊢i AC.[□↦p] or AC.[□↦q] ---> AC.[□↦p or q] using (ExGen := ∅, SVSubst := ∅, KT := false, FP := frames_of_AC AC)

Γ ⊢i AC.[□↦p] ---> AC.[□↦p] or AC.[□↦q] using BasicReasoning
apply disj_left_intro; wf_auto2.
Σ: Signature
Γ: Theory
p0: Pattern
AC: Application_context
Prf: well_formed p0
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
IH1: Γ ⊢i AC.[□↦p or q] ---> AC.[□↦p] or AC.[□↦q] using (ExGen := ∅, SVSubst := ∅, KT := false, FP := frames_of_AC AC)
IH2: Γ ⊢i AC.[□↦p] or AC.[□↦q] ---> AC.[□↦p or q] using (ExGen := ∅, SVSubst := ∅, KT := false, FP := frames_of_AC AC)
i: ProofInfo
Heqi: i = (ExGen := ∅, SVSubst := ∅, KT := false, FP := {[p0 ↾ Prf]} ∪ frames_of_AC AC)

Γ ⊢i p0 $ AC.[□↦q] ---> p0 $ AC.[□↦p or q] using i
Σ: Signature
Γ: Theory
p0: Pattern
AC: Application_context
Prf: well_formed p0
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
IH1: Γ ⊢i AC.[□↦p or q] ---> AC.[□↦p] or AC.[□↦q] using (ExGen := ∅, SVSubst := ∅, KT := false, FP := frames_of_AC AC)
IH2: Γ ⊢i AC.[□↦p] or AC.[□↦q] ---> AC.[□↦p or q] using (ExGen := ∅, SVSubst := ∅, KT := false, FP := frames_of_AC AC)

Γ ⊢i p0 $ AC.[□↦q] ---> p0 $ AC.[□↦p or q] using (ExGen := ∅, SVSubst := ∅, KT := false, FP := {[p0 ↾ Prf]} ∪ frames_of_AC AC)
Σ: Signature
Γ: Theory
p0: Pattern
AC: Application_context
Prf: well_formed p0
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
IH1: Γ ⊢i AC.[□↦p or q] ---> AC.[□↦p] or AC.[□↦q] using (ExGen := ∅, SVSubst := ∅, KT := false, FP := frames_of_AC AC)
IH2: Γ ⊢i AC.[□↦p] or AC.[□↦q] ---> AC.[□↦p or q] using (ExGen := ∅, SVSubst := ∅, KT := false, FP := frames_of_AC AC)

ProofInfoLe (ExGen := ∅, SVSubst := ∅, KT := false, FP := {[p0 ↾ Prf]}) (ExGen := ∅, SVSubst := ∅, KT := false, FP := {[p0 ↾ Prf]} ∪ frames_of_AC AC)
Σ: Signature
Γ: Theory
p0: Pattern
AC: Application_context
Prf: well_formed p0
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
IH1: Γ ⊢i AC.[□↦p or q] ---> AC.[□↦p] or AC.[□↦q] using (ExGen := ∅, SVSubst := ∅, KT := false, FP := frames_of_AC AC)
IH2: Γ ⊢i AC.[□↦p] or AC.[□↦q] ---> AC.[□↦p or q] using (ExGen := ∅, SVSubst := ∅, KT := false, FP := frames_of_AC AC)
Γ ⊢i AC.[□↦q] ---> AC.[□↦p or q] using (ExGen := ∅, SVSubst := ∅, KT := false, FP := {[p0 ↾ Prf]} ∪ frames_of_AC AC)
Σ: Signature
Γ: Theory
p0: Pattern
AC: Application_context
Prf: well_formed p0
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
IH1: Γ ⊢i AC.[□↦p or q] ---> AC.[□↦p] or AC.[□↦q] using (ExGen := ∅, SVSubst := ∅, KT := false, FP := frames_of_AC AC)
IH2: Γ ⊢i AC.[□↦p] or AC.[□↦q] ---> AC.[□↦p or q] using (ExGen := ∅, SVSubst := ∅, KT := false, FP := frames_of_AC AC)

ProofInfoLe (ExGen := ∅, SVSubst := ∅, KT := false, FP := {[p0 ↾ Prf]}) (ExGen := ∅, SVSubst := ∅, KT := false, FP := {[p0 ↾ Prf]} ∪ frames_of_AC AC)
try_solve_pile.
Σ: Signature
Γ: Theory
p0: Pattern
AC: Application_context
Prf: well_formed p0
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
IH1: Γ ⊢i AC.[□↦p or q] ---> AC.[□↦p] or AC.[□↦q] using (ExGen := ∅, SVSubst := ∅, KT := false, FP := frames_of_AC AC)
IH2: Γ ⊢i AC.[□↦p] or AC.[□↦q] ---> AC.[□↦p or q] using (ExGen := ∅, SVSubst := ∅, KT := false, FP := frames_of_AC AC)

Γ ⊢i AC.[□↦q] ---> AC.[□↦p or q] using (ExGen := ∅, SVSubst := ∅, KT := false, FP := {[p0 ↾ Prf]} ∪ frames_of_AC AC)
Σ: Signature
Γ: Theory
p0: Pattern
AC: Application_context
Prf: well_formed p0
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
IH1: Γ ⊢i AC.[□↦p or q] ---> AC.[□↦p] or AC.[□↦q] using (ExGen := ∅, SVSubst := ∅, KT := false, FP := frames_of_AC AC)
IH2: Γ ⊢i AC.[□↦p] or AC.[□↦q] ---> AC.[□↦p or q] using (ExGen := ∅, SVSubst := ∅, KT := false, FP := frames_of_AC AC)

well_formed AC.[□↦q]
Σ: Signature
Γ: Theory
p0: Pattern
AC: Application_context
Prf: well_formed p0
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
IH1: Γ ⊢i AC.[□↦p or q] ---> AC.[□↦p] or AC.[□↦q] using (ExGen := ∅, SVSubst := ∅, KT := false, FP := frames_of_AC AC)
IH2: Γ ⊢i AC.[□↦p] or AC.[□↦q] ---> AC.[□↦p or q] using (ExGen := ∅, SVSubst := ∅, KT := false, FP := frames_of_AC AC)
well_formed ?B
Σ: Signature
Γ: Theory
p0: Pattern
AC: Application_context
Prf: well_formed p0
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
IH1: Γ ⊢i AC.[□↦p or q] ---> AC.[□↦p] or AC.[□↦q] using (ExGen := ∅, SVSubst := ∅, KT := false, FP := frames_of_AC AC)
IH2: Γ ⊢i AC.[□↦p] or AC.[□↦q] ---> AC.[□↦p or q] using (ExGen := ∅, SVSubst := ∅, KT := false, FP := frames_of_AC AC)
well_formed AC.[□↦p or q]
Σ: Signature
Γ: Theory
p0: Pattern
AC: Application_context
Prf: well_formed p0
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
IH1: Γ ⊢i AC.[□↦p or q] ---> AC.[□↦p] or AC.[□↦q] using (ExGen := ∅, SVSubst := ∅, KT := false, FP := frames_of_AC AC)
IH2: Γ ⊢i AC.[□↦p] or AC.[□↦q] ---> AC.[□↦p or q] using (ExGen := ∅, SVSubst := ∅, KT := false, FP := frames_of_AC AC)
Γ ⊢i ?B ---> AC.[□↦p or q] using (ExGen := ∅, SVSubst := ∅, KT := false, FP := {[p0 ↾ Prf]} ∪ frames_of_AC AC)
Σ: Signature
Γ: Theory
p0: Pattern
AC: Application_context
Prf: well_formed p0
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
IH1: Γ ⊢i AC.[□↦p or q] ---> AC.[□↦p] or AC.[□↦q] using (ExGen := ∅, SVSubst := ∅, KT := false, FP := frames_of_AC AC)
IH2: Γ ⊢i AC.[□↦p] or AC.[□↦q] ---> AC.[□↦p or q] using (ExGen := ∅, SVSubst := ∅, KT := false, FP := frames_of_AC AC)
Γ ⊢i AC.[□↦q] ---> ?B using (ExGen := ∅, SVSubst := ∅, KT := false, FP := {[p0 ↾ Prf]} ∪ frames_of_AC AC)
Σ: Signature
Γ: Theory
p0: Pattern
AC: Application_context
Prf: well_formed p0
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
IH1: Γ ⊢i AC.[□↦p or q] ---> AC.[□↦p] or AC.[□↦q] using (ExGen := ∅, SVSubst := ∅, KT := false, FP := frames_of_AC AC)
IH2: Γ ⊢i AC.[□↦p] or AC.[□↦q] ---> AC.[□↦p or q] using (ExGen := ∅, SVSubst := ∅, KT := false, FP := frames_of_AC AC)

well_formed AC.[□↦q]
Σ: Signature
Γ: Theory
p0: Pattern
AC: Application_context
Prf: well_formed p0
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
IH1: Γ ⊢i AC.[□↦p or q] ---> AC.[□↦p] or AC.[□↦q] using (ExGen := ∅, SVSubst := ∅, KT := false, FP := frames_of_AC AC)
IH2: Γ ⊢i AC.[□↦p] or AC.[□↦q] ---> AC.[□↦p or q] using (ExGen := ∅, SVSubst := ∅, KT := false, FP := frames_of_AC AC)
well_formed (AC.[□↦p] or AC.[□↦q])
Σ: Signature
Γ: Theory
p0: Pattern
AC: Application_context
Prf: well_formed p0
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
IH1: Γ ⊢i AC.[□↦p or q] ---> AC.[□↦p] or AC.[□↦q] using (ExGen := ∅, SVSubst := ∅, KT := false, FP := frames_of_AC AC)
IH2: Γ ⊢i AC.[□↦p] or AC.[□↦q] ---> AC.[□↦p or q] using (ExGen := ∅, SVSubst := ∅, KT := false, FP := frames_of_AC AC)
well_formed AC.[□↦p or q]
Σ: Signature
Γ: Theory
p0: Pattern
AC: Application_context
Prf: well_formed p0
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
IH1: Γ ⊢i AC.[□↦p or q] ---> AC.[□↦p] or AC.[□↦q] using (ExGen := ∅, SVSubst := ∅, KT := false, FP := frames_of_AC AC)
IH2: Γ ⊢i AC.[□↦p] or AC.[□↦q] ---> AC.[□↦p or q] using (ExGen := ∅, SVSubst := ∅, KT := false, FP := frames_of_AC AC)
Γ ⊢i AC.[□↦q] ---> AC.[□↦p] or AC.[□↦q] using (ExGen := ∅, SVSubst := ∅, KT := false, FP := {[p0 ↾ Prf]} ∪ frames_of_AC AC)
Σ: Signature
Γ: Theory
p0: Pattern
AC: Application_context
Prf: well_formed p0
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
IH1: Γ ⊢i AC.[□↦p or q] ---> AC.[□↦p] or AC.[□↦q] using (ExGen := ∅, SVSubst := ∅, KT := false, FP := frames_of_AC AC)
IH2: Γ ⊢i AC.[□↦p] or AC.[□↦q] ---> AC.[□↦p or q] using (ExGen := ∅, SVSubst := ∅, KT := false, FP := frames_of_AC AC)

Γ ⊢i AC.[□↦q] ---> AC.[□↦p] or AC.[□↦q] using (ExGen := ∅, SVSubst := ∅, KT := false, FP := {[p0 ↾ Prf]} ∪ frames_of_AC AC)
Σ: Signature
Γ: Theory
p0: Pattern
AC: Application_context
Prf: well_formed p0
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
IH1: Γ ⊢i AC.[□↦p or q] ---> AC.[□↦p] or AC.[□↦q] using (ExGen := ∅, SVSubst := ∅, KT := false, FP := frames_of_AC AC)
IH2: Γ ⊢i AC.[□↦p] or AC.[□↦q] ---> AC.[□↦p or q] using (ExGen := ∅, SVSubst := ∅, KT := false, FP := frames_of_AC AC)

Γ ⊢i AC.[□↦q] ---> AC.[□↦p] or AC.[□↦q] using BasicReasoning
apply disj_right_intro; wf_auto2. Defined.
Σ: Signature
Γ: Theory
C1, C2: Application_context
ϕ: Pattern
x: evar

well_formed ϕ → Γ ⊢i ! (C1.[□↦patt_free_evar x and ϕ] and C2.[□↦patt_free_evar x and ! ϕ]) using BasicReasoning
Σ: Signature
Γ: Theory
C1, C2: Application_context
ϕ: Pattern
x: evar

well_formed ϕ → Γ ⊢i ! (C1.[□↦patt_free_evar x and ϕ] and C2.[□↦patt_free_evar x and ! ϕ]) using BasicReasoning
Σ: Signature
Γ: Theory
C1, C2: Application_context
ϕ: Pattern
x: evar
Hwf: well_formed ϕ

Γ ⊢i ! (C1.[□↦patt_free_evar x and ϕ] and C2.[□↦patt_free_evar x and ! ϕ]) using BasicReasoning
Σ: Signature
Γ: Theory
C1, C2: Application_context
ϕ: Pattern
x: evar
Hwf: well_formed ϕ

ML_proof_system Γ (! (C1.[□↦patt_free_evar x and ϕ] and C2.[□↦patt_free_evar x and ! ϕ]))
Σ: Signature
Γ: Theory
C1, C2: Application_context
ϕ: Pattern
x: evar
Hwf: well_formed ϕ
ProofInfoMeaning Γ (! (C1.[□↦patt_free_evar x and ϕ] and C2.[□↦patt_free_evar x and ! ϕ])) ?pf BasicReasoning
Σ: Signature
Γ: Theory
C1, C2: Application_context
ϕ: Pattern
x: evar
Hwf: well_formed ϕ

ML_proof_system Γ (! (C1.[□↦patt_free_evar x and ϕ] and C2.[□↦patt_free_evar x and ! ϕ]))
Σ: Signature
Γ: Theory
C1, C2: Application_context
ϕ: Pattern
x: evar
Hwf: well_formed ϕ

well_formed ϕ
apply Hwf.
Σ: Signature
Γ: Theory
C1, C2: Application_context
ϕ: Pattern
x: evar
Hwf: well_formed ϕ

ProofInfoMeaning Γ (! (C1.[□↦patt_free_evar x and ϕ] and C2.[□↦patt_free_evar x and ! ϕ])) (Singleton_ctx Γ C1 C2 ϕ x Hwf) BasicReasoning
Σ: Signature
Γ: Theory
C1, C2: Application_context
ϕ: Pattern
x: evar
Hwf: well_formed ϕ

ProofInfoMeaning Γ (! (C1.[□↦patt_free_evar x and ϕ] and C2.[□↦patt_free_evar x and ! ϕ])) (Singleton_ctx Γ C1 C2 ϕ x Hwf) BasicReasoning
abstract ( constructor; simpl; [( set_solver ) |( set_solver ) |( reflexivity ) |( set_solver ) ] ). } Defined.
Σ: Signature
Γ: Theory

Γ ⊢i ex , b0 using BasicReasoning
Σ: Signature
Γ: Theory

Γ ⊢i ex , b0 using BasicReasoning
Σ: Signature
Γ: Theory

ML_proof_system Γ (ex , b0)
Σ: Signature
Γ: Theory
ProofInfoMeaning Γ (ex , b0) ?pf BasicReasoning
Σ: Signature
Γ: Theory

ML_proof_system Γ (ex , b0)
apply ProofSystem.Existence.
Σ: Signature
Γ: Theory

ProofInfoMeaning Γ (ex , b0) (Existence Γ) BasicReasoning
Σ: Signature
Γ: Theory

ProofInfoMeaning Γ (ex , b0) (Existence Γ) BasicReasoning
abstract ( constructor; simpl; [( set_solver ) |( set_solver ) |( reflexivity ) |( set_solver ) ] ). } Defined.
Σ: Signature
Γ: Theory
ϕ, ψ: Pattern

well_formed (ex , ϕ) → well_formed ψ → Γ ⊢i (ex , ϕ) $ ψ ---> (ex , ϕ $ ψ) using BasicReasoning
Σ: Signature
Γ: Theory
ϕ, ψ: Pattern

well_formed (ex , ϕ) → well_formed ψ → Γ ⊢i (ex , ϕ) $ ψ ---> (ex , ϕ $ ψ) using BasicReasoning
Σ: Signature
Γ: Theory
ϕ, ψ: Pattern
wfϕ: well_formed (ex , ϕ)
wfψ: well_formed ψ

Γ ⊢i (ex , ϕ) $ ψ ---> (ex , ϕ $ ψ) using BasicReasoning
Σ: Signature
Γ: Theory
ϕ, ψ: Pattern
wfϕ: well_formed (ex , ϕ)
wfψ: well_formed ψ

ML_proof_system Γ ((ex , ϕ) $ ψ ---> (ex , ϕ $ ψ))
Σ: Signature
Γ: Theory
ϕ, ψ: Pattern
wfϕ: well_formed (ex , ϕ)
wfψ: well_formed ψ
ProofInfoMeaning Γ ((ex , ϕ) $ ψ ---> (ex , ϕ $ ψ)) ?pf BasicReasoning
Σ: Signature
Γ: Theory
ϕ, ψ: Pattern
wfϕ: well_formed (ex , ϕ)
wfψ: well_formed ψ

ML_proof_system Γ ((ex , ϕ) $ ψ ---> (ex , ϕ $ ψ))
Σ: Signature
Γ: Theory
ϕ, ψ: Pattern
wfϕ: well_formed (ex , ϕ)
wfψ: well_formed ψ

well_formed (ex , ϕ)
Σ: Signature
Γ: Theory
ϕ, ψ: Pattern
wfϕ: well_formed (ex , ϕ)
wfψ: well_formed ψ
well_formed ψ
Σ: Signature
Γ: Theory
ϕ, ψ: Pattern
wfϕ: well_formed (ex , ϕ)
wfψ: well_formed ψ

well_formed (ex , ϕ)
exact wfϕ.
Σ: Signature
Γ: Theory
ϕ, ψ: Pattern
wfϕ: well_formed (ex , ϕ)
wfψ: well_formed ψ

well_formed ψ
Σ: Signature
Γ: Theory
ϕ, ψ: Pattern
wfϕ: well_formed (ex , ϕ)
wfψ: well_formed ψ

well_formed ψ
exact wfψ. }
Σ: Signature
Γ: Theory
ϕ, ψ: Pattern
wfϕ: well_formed (ex , ϕ)
wfψ: well_formed ψ

ProofInfoMeaning Γ ((ex , ϕ) $ ψ ---> (ex , ϕ $ ψ)) (Prop_ex_left Γ ϕ ψ wfϕ wfψ) BasicReasoning
Σ: Signature
Γ: Theory
ϕ, ψ: Pattern
wfϕ: well_formed (ex , ϕ)
wfψ: well_formed ψ

ProofInfoMeaning Γ ((ex , ϕ) $ ψ ---> (ex , ϕ $ ψ)) (Prop_ex_left Γ ϕ ψ wfϕ wfψ) BasicReasoning
Σ: Signature
Γ: Theory
ϕ, ψ: Pattern
wfϕ: well_formed (ex , ϕ)
wfψ: well_formed ψ

gset_to_coGset ∅ ⊆ ∅
Σ: Signature
Γ: Theory
ϕ, ψ: Pattern
wfϕ: well_formed (ex , ϕ)
wfψ: well_formed ψ
gset_to_coGset ∅ ⊆ ∅
Σ: Signature
Γ: Theory
ϕ, ψ: Pattern
wfϕ: well_formed (ex , ϕ)
wfψ: well_formed ψ
true
Σ: Signature
Γ: Theory
ϕ, ψ: Pattern
wfϕ: well_formed (ex , ϕ)
wfψ: well_formed ψ
gset_to_coGset ∅ ⊆ ∅
Σ: Signature
Γ: Theory
ϕ, ψ: Pattern
wfϕ: well_formed (ex , ϕ)
wfψ: well_formed ψ

gset_to_coGset ∅ ⊆ ∅
set_solver.
Σ: Signature
Γ: Theory
ϕ, ψ: Pattern
wfϕ: well_formed (ex , ϕ)
wfψ: well_formed ψ

gset_to_coGset ∅ ⊆ ∅
Σ: Signature
Γ: Theory
ϕ, ψ: Pattern
wfϕ: well_formed (ex , ϕ)
wfψ: well_formed ψ
true
Σ: Signature
Γ: Theory
ϕ, ψ: Pattern
wfϕ: well_formed (ex , ϕ)
wfψ: well_formed ψ
gset_to_coGset ∅ ⊆ ∅
Σ: Signature
Γ: Theory
ϕ, ψ: Pattern
wfϕ: well_formed (ex , ϕ)
wfψ: well_formed ψ

gset_to_coGset ∅ ⊆ ∅
set_solver.
Σ: Signature
Γ: Theory
ϕ, ψ: Pattern
wfϕ: well_formed (ex , ϕ)
wfψ: well_formed ψ

true
Σ: Signature
Γ: Theory
ϕ, ψ: Pattern
wfϕ: well_formed (ex , ϕ)
wfψ: well_formed ψ
gset_to_coGset ∅ ⊆ ∅
Σ: Signature
Γ: Theory
ϕ, ψ: Pattern
wfϕ: well_formed (ex , ϕ)
wfψ: well_formed ψ

true
reflexivity.
Σ: Signature
Γ: Theory
ϕ, ψ: Pattern
wfϕ: well_formed (ex , ϕ)
wfψ: well_formed ψ

gset_to_coGset ∅ ⊆ ∅
Σ: Signature
Γ: Theory
ϕ, ψ: Pattern
wfϕ: well_formed (ex , ϕ)
wfψ: well_formed ψ

gset_to_coGset ∅ ⊆ ∅
set_solver. } } Defined.
Σ: Signature
Γ: Theory
ϕ, ψ: Pattern

well_formed (ex , ϕ) → well_formed ψ → Γ ⊢i ψ $ (ex , ϕ) ---> (ex , ψ $ ϕ) using BasicReasoning
Σ: Signature
Γ: Theory
ϕ, ψ: Pattern

well_formed (ex , ϕ) → well_formed ψ → Γ ⊢i ψ $ (ex , ϕ) ---> (ex , ψ $ ϕ) using BasicReasoning
Σ: Signature
Γ: Theory
ϕ, ψ: Pattern
wfϕ: well_formed (ex , ϕ)
wfψ: well_formed ψ

Γ ⊢i ψ $ (ex , ϕ) ---> (ex , ψ $ ϕ) using BasicReasoning
Σ: Signature
Γ: Theory
ϕ, ψ: Pattern
wfϕ: well_formed (ex , ϕ)
wfψ: well_formed ψ

ML_proof_system Γ (ψ $ (ex , ϕ) ---> (ex , ψ $ ϕ))
Σ: Signature
Γ: Theory
ϕ, ψ: Pattern
wfϕ: well_formed (ex , ϕ)
wfψ: well_formed ψ
ProofInfoMeaning Γ (ψ $ (ex , ϕ) ---> (ex , ψ $ ϕ)) ?pf BasicReasoning
Σ: Signature
Γ: Theory
ϕ, ψ: Pattern
wfϕ: well_formed (ex , ϕ)
wfψ: well_formed ψ

ML_proof_system Γ (ψ $ (ex , ϕ) ---> (ex , ψ $ ϕ))
Σ: Signature
Γ: Theory
ϕ, ψ: Pattern
wfϕ: well_formed (ex , ϕ)
wfψ: well_formed ψ

well_formed (ex , ϕ)
Σ: Signature
Γ: Theory
ϕ, ψ: Pattern
wfϕ: well_formed (ex , ϕ)
wfψ: well_formed ψ
well_formed ψ
Σ: Signature
Γ: Theory
ϕ, ψ: Pattern
wfϕ: well_formed (ex , ϕ)
wfψ: well_formed ψ

well_formed (ex , ϕ)
exact wfϕ.
Σ: Signature
Γ: Theory
ϕ, ψ: Pattern
wfϕ: well_formed (ex , ϕ)
wfψ: well_formed ψ

well_formed ψ
Σ: Signature
Γ: Theory
ϕ, ψ: Pattern
wfϕ: well_formed (ex , ϕ)
wfψ: well_formed ψ

well_formed ψ
exact wfψ. }
Σ: Signature
Γ: Theory
ϕ, ψ: Pattern
wfϕ: well_formed (ex , ϕ)
wfψ: well_formed ψ

ProofInfoMeaning Γ (ψ $ (ex , ϕ) ---> (ex , ψ $ ϕ)) (Prop_ex_right Γ ϕ ψ wfϕ wfψ) BasicReasoning
Σ: Signature
Γ: Theory
ϕ, ψ: Pattern
wfϕ: well_formed (ex , ϕ)
wfψ: well_formed ψ

ProofInfoMeaning Γ (ψ $ (ex , ϕ) ---> (ex , ψ $ ϕ)) (Prop_ex_right Γ ϕ ψ wfϕ wfψ) BasicReasoning
Σ: Signature
Γ: Theory
ϕ, ψ: Pattern
wfϕ: well_formed (ex , ϕ)
wfψ: well_formed ψ

gset_to_coGset ∅ ⊆ ∅
Σ: Signature
Γ: Theory
ϕ, ψ: Pattern
wfϕ: well_formed (ex , ϕ)
wfψ: well_formed ψ
gset_to_coGset ∅ ⊆ ∅
Σ: Signature
Γ: Theory
ϕ, ψ: Pattern
wfϕ: well_formed (ex , ϕ)
wfψ: well_formed ψ
true
Σ: Signature
Γ: Theory
ϕ, ψ: Pattern
wfϕ: well_formed (ex , ϕ)
wfψ: well_formed ψ
gset_to_coGset ∅ ⊆ ∅
Σ: Signature
Γ: Theory
ϕ, ψ: Pattern
wfϕ: well_formed (ex , ϕ)
wfψ: well_formed ψ

gset_to_coGset ∅ ⊆ ∅
set_solver.
Σ: Signature
Γ: Theory
ϕ, ψ: Pattern
wfϕ: well_formed (ex , ϕ)
wfψ: well_formed ψ

gset_to_coGset ∅ ⊆ ∅
Σ: Signature
Γ: Theory
ϕ, ψ: Pattern
wfϕ: well_formed (ex , ϕ)
wfψ: well_formed ψ
true
Σ: Signature
Γ: Theory
ϕ, ψ: Pattern
wfϕ: well_formed (ex , ϕ)
wfψ: well_formed ψ
gset_to_coGset ∅ ⊆ ∅
Σ: Signature
Γ: Theory
ϕ, ψ: Pattern
wfϕ: well_formed (ex , ϕ)
wfψ: well_formed ψ

gset_to_coGset ∅ ⊆ ∅
set_solver.
Σ: Signature
Γ: Theory
ϕ, ψ: Pattern
wfϕ: well_formed (ex , ϕ)
wfψ: well_formed ψ

true
Σ: Signature
Γ: Theory
ϕ, ψ: Pattern
wfϕ: well_formed (ex , ϕ)
wfψ: well_formed ψ
gset_to_coGset ∅ ⊆ ∅
Σ: Signature
Γ: Theory
ϕ, ψ: Pattern
wfϕ: well_formed (ex , ϕ)
wfψ: well_formed ψ

true
reflexivity.
Σ: Signature
Γ: Theory
ϕ, ψ: Pattern
wfϕ: well_formed (ex , ϕ)
wfψ: well_formed ψ

gset_to_coGset ∅ ⊆ ∅
Σ: Signature
Γ: Theory
ϕ, ψ: Pattern
wfϕ: well_formed (ex , ϕ)
wfψ: well_formed ψ

gset_to_coGset ∅ ⊆ ∅
set_solver. } } Defined. Tactic Notation "change" "constraint" "in" ident(H) := let i := fresh "i" in remember_constraint as i; eapply useGenericReasoning with (i := i) in H; subst i; [|(try_solve_pile)].
Σ: Signature
Γ: Theory
AC: Application_context
p: Pattern
x: evar

evar_is_fresh_in x AC.[□↦p] → well_formed (ex , p) = true → Γ ⊢i AC.[□↦ex , p] <---> exists_quantify x AC.[□↦p^{evar:0↦x}] using (ExGen := {[x]}, SVSubst := ∅, KT := false, FP := frames_of_AC AC)
Σ: Signature
Γ: Theory
AC: Application_context
p: Pattern
x: evar

evar_is_fresh_in x AC.[□↦p] → well_formed (ex , p) = true → Γ ⊢i AC.[□↦ex , p] <---> exists_quantify x AC.[□↦p^{evar:0↦x}] using (ExGen := {[x]}, SVSubst := ∅, KT := false, FP := frames_of_AC AC)
Σ: Signature
Γ: Theory
AC: Application_context
p: Pattern
x: evar
Hx: evar_is_fresh_in x AC.[□↦p]
Hwf: well_formed (ex , p) = true

Γ ⊢i AC.[□↦ex , p] <---> exists_quantify x AC.[□↦p^{evar:0↦x}] using (ExGen := {[x]}, SVSubst := ∅, KT := false, FP := frames_of_AC AC)
Σ: Signature
Γ: Theory
p: Pattern
x: evar
Hx: evar_is_fresh_in x □.[□↦p]
Hwf: well_formed (ex , p) = true

Γ ⊢i (ex , p) <---> exists_quantify x p^{evar:0↦x} using (ExGen := {[x]}, SVSubst := ∅, KT := false, FP := ∅)
Σ: Signature
Γ: Theory
AC: Application_context
p0: Pattern
Prf: well_formed p0
p: Pattern
x: evar
Hx: evar_is_fresh_in x (AC $ₗ p0).[□↦p]
Hwf: well_formed (ex , p) = true
IHAC: evar_is_fresh_in x AC.[□↦p] → Γ ⊢i AC.[□↦ex , p] <---> exists_quantify x AC.[□↦p^{evar:0↦x}] using (ExGen := {[x]}, SVSubst := ∅, KT := false, FP := frames_of_AC AC)
Γ ⊢i AC.[□↦ex , p] $ p0 <---> exists_quantify x (AC.[□↦p^{evar:0↦x}] $ p0) using (ExGen := {[x]}, SVSubst := ∅, KT := false, FP := {[p0 ↾ Prf]} ∪ frames_of_AC AC)
Σ: Signature
Γ: Theory
p0: Pattern
AC: Application_context
Prf: well_formed p0
p: Pattern
x: evar
Hx: evar_is_fresh_in x (p0 $ᵣ AC).[□↦p]
Hwf: well_formed (ex , p) = true
IHAC: evar_is_fresh_in x AC.[□↦p] → Γ ⊢i AC.[□↦ex , p] <---> exists_quantify x AC.[□↦p^{evar:0↦x}] using (ExGen := {[x]}, SVSubst := ∅, KT := false, FP := frames_of_AC AC)
Γ ⊢i p0 $ AC.[□↦ex , p] <---> exists_quantify x (p0 $ AC.[□↦p^{evar:0↦x}]) using (ExGen := {[x]}, SVSubst := ∅, KT := false, FP := {[p0 ↾ Prf]} ∪ frames_of_AC AC)
Σ: Signature
Γ: Theory
p: Pattern
x: evar
Hx: evar_is_fresh_in x □.[□↦p]
Hwf: well_formed (ex , p) = true

Γ ⊢i (ex , p) <---> exists_quantify x p^{evar:0↦x} using (ExGen := {[x]}, SVSubst := ∅, KT := false, FP := ∅)
Σ: Signature
Γ: Theory
p: Pattern
x: evar
Hx: evar_is_fresh_in x p
Hwf: well_formed (ex , p) = true

Γ ⊢i (ex , p) <---> exists_quantify x p^{evar:0↦x} using (ExGen := {[x]}, SVSubst := ∅, KT := false, FP := ∅)
Σ: Signature
Γ: Theory
p: Pattern
x: evar
Hx: evar_is_fresh_in x p
Hwf: well_formed (ex , p) = true

Γ ⊢i (ex , p) <---> (ex , p^{evar:0↦x}^{{evar:x↦0}}) using (ExGen := {[x]}, SVSubst := ∅, KT := false, FP := ∅)
Σ: Signature
Γ: Theory
p: Pattern
x: evar
Hx: evar_is_fresh_in x p
Hwf: well_formed (ex , p) = true

Γ ⊢i (ex , p) <---> (ex , p) using (ExGen := {[x]}, SVSubst := ∅, KT := false, FP := ∅)
Σ: Signature
Γ: Theory
p: Pattern
x: evar
Hx: evar_is_fresh_in x p
Hwf: well_formed (ex , p) = true
well_formed_closed_ex_aux p 1
Σ: Signature
Γ: Theory
p: Pattern
x: evar
Hx: evar_is_fresh_in x p
Hwf: well_formed (ex , p) = true

Γ ⊢i (ex , p) <---> (ex , p) using (ExGen := {[x]}, SVSubst := ∅, KT := false, FP := ∅)
Σ: Signature
Γ: Theory
p: Pattern
x: evar
Hx: evar_is_fresh_in x p
Hwf: well_formed (ex , p) = true

Γ ⊢i (ex , p) <---> (ex , p) using BasicReasoning
Σ: Signature
Γ: Theory
p: Pattern
x: evar
Hx: evar_is_fresh_in x p
Hwf: well_formed (ex , p) = true

well_formed (ex , p)
exact Hwf.
Σ: Signature
Γ: Theory
AC: Application_context
p0: Pattern
Prf: well_formed p0
p: Pattern
x: evar
Hx: evar_is_fresh_in x (AC $ₗ p0).[□↦p]
Hwf: well_formed (ex , p) = true
IHAC: evar_is_fresh_in x AC.[□↦p] → Γ ⊢i AC.[□↦ex , p] <---> exists_quantify x AC.[□↦p^{evar:0↦x}] using (ExGen := {[x]}, SVSubst := ∅, KT := false, FP := frames_of_AC AC)

Γ ⊢i AC.[□↦ex , p] $ p0 <---> exists_quantify x (AC.[□↦p^{evar:0↦x}] $ p0) using (ExGen := {[x]}, SVSubst := ∅, KT := false, FP := {[p0 ↾ Prf]} ∪ frames_of_AC AC)
Σ: Signature
Γ: Theory
AC: Application_context
p0: Pattern
Prf: well_formed p0
p: Pattern
x: evar
Hx: evar_is_fresh_in x (AC $ₗ p0).[□↦p]
Hwf: well_formed (ex , p) = true
IHAC: evar_is_fresh_in x AC.[□↦p] → Γ ⊢i AC.[□↦ex , p] <---> exists_quantify x AC.[□↦p^{evar:0↦x}] using (ExGen := {[x]}, SVSubst := ∅, KT := false, FP := frames_of_AC AC)

well_formed (ex , AC.[□↦p])
Σ: Signature
Γ: Theory
AC: Application_context
p0: Pattern
Prf: well_formed p0
p: Pattern
x: evar
Hx: evar_is_fresh_in x (AC $ₗ p0).[□↦p]
Hwf: well_formed (ex , p) = true
IHAC: evar_is_fresh_in x AC.[□↦p] → Γ ⊢i AC.[□↦ex , p] <---> exists_quantify x AC.[□↦p^{evar:0↦x}] using (ExGen := {[x]}, SVSubst := ∅, KT := false, FP := frames_of_AC AC)
Hwfex: well_formed (ex , AC.[□↦p])
Γ ⊢i AC.[□↦ex , p] $ p0 <---> exists_quantify x (AC.[□↦p^{evar:0↦x}] $ p0) using (ExGen := {[x]}, SVSubst := ∅, KT := false, FP := {[p0 ↾ Prf]} ∪ frames_of_AC AC)
Σ: Signature
Γ: Theory
AC: Application_context
p0: Pattern
Prf: well_formed p0
p: Pattern
x: evar
Hx: evar_is_fresh_in x (AC $ₗ p0).[□↦p]
Hwf: well_formed (ex , p) = true
IHAC: evar_is_fresh_in x AC.[□↦p] → Γ ⊢i AC.[□↦ex , p] <---> exists_quantify x AC.[□↦p^{evar:0↦x}] using (ExGen := {[x]}, SVSubst := ∅, KT := false, FP := frames_of_AC AC)

well_formed (ex , AC.[□↦p])
Σ: Signature
Γ: Theory
AC: Application_context
p0: Pattern
Prf: well_formed p0
p: Pattern
x: evar
Hx: evar_is_fresh_in x (AC $ₗ p0).[□↦p]
Hwf: well_formed (ex , p) = true
IHAC: evar_is_fresh_in x AC.[□↦p] → Γ ⊢i AC.[□↦ex , p] <---> exists_quantify x AC.[□↦p^{evar:0↦x}] using (ExGen := {[x]}, SVSubst := ∅, KT := false, FP := frames_of_AC AC)

well_formed_positive (ex , AC.[□↦p]) && well_formed_closed (ex , AC.[□↦p])
Σ: Signature
Γ: Theory
AC: Application_context
p0: Pattern
Prf: well_formed p0
p: Pattern
x: evar
Hx: evar_is_fresh_in x (AC $ₗ p0).[□↦p]
Hwf: well_formed (ex , p) = true
IHAC: evar_is_fresh_in x AC.[□↦p] → Γ ⊢i AC.[□↦ex , p] <---> exists_quantify x AC.[□↦p^{evar:0↦x}] using (ExGen := {[x]}, SVSubst := ∅, KT := false, FP := frames_of_AC AC)

well_formed_positive AC.[□↦p] && well_formed_closed (ex , AC.[□↦p])
Σ: Signature
Γ: Theory
AC: Application_context
p0: Pattern
Prf: well_formed p0
p: Pattern
x: evar
Hx: evar_is_fresh_in x (AC $ₗ p0).[□↦p]
Hwf: well_formed (ex , p) = true
IHAC: evar_is_fresh_in x AC.[□↦p] → Γ ⊢i AC.[□↦ex , p] <---> exists_quantify x AC.[□↦p^{evar:0↦x}] using (ExGen := {[x]}, SVSubst := ∅, KT := false, FP := frames_of_AC AC)
Hwf': well_formed (ex , p) = true

well_formed_positive AC.[□↦p] && well_formed_closed (ex , AC.[□↦p])
Σ: Signature
Γ: Theory
AC: Application_context
p0: Pattern
Prf: well_formed p0
p: Pattern
x: evar
Hx: evar_is_fresh_in x (AC $ₗ p0).[□↦p]
Hwf: well_formed_positive (ex , p) && well_formed_closed (ex , p) = true
IHAC: evar_is_fresh_in x AC.[□↦p] → Γ ⊢i AC.[□↦ex , p] <---> exists_quantify x AC.[□↦p^{evar:0↦x}] using (ExGen := {[x]}, SVSubst := ∅, KT := false, FP := frames_of_AC AC)
Hwf': well_formed (ex , p) = true

well_formed_positive AC.[□↦p] && well_formed_closed (ex , AC.[□↦p])
Σ: Signature
Γ: Theory
AC: Application_context
p0: Pattern
Prf: well_formed p0
p: Pattern
x: evar
Hx: evar_is_fresh_in x (AC $ₗ p0).[□↦p]
Hwf: well_formed_positive p && well_formed_closed (ex , p) = true
IHAC: evar_is_fresh_in x AC.[□↦p] → Γ ⊢i AC.[□↦ex , p] <---> exists_quantify x AC.[□↦p^{evar:0↦x}] using (ExGen := {[x]}, SVSubst := ∅, KT := false, FP := frames_of_AC AC)
Hwf': well_formed (ex , p) = true

well_formed_positive AC.[□↦p] && well_formed_closed (ex , AC.[□↦p])
Σ: Signature
Γ: Theory
AC: Application_context
p0: Pattern
Prf: well_formed p0
p: Pattern
x: evar
Hx: evar_is_fresh_in x (AC $ₗ p0).[□↦p]
Hwf: well_formed_positive p = true ∧ well_formed_closed (ex , p) = true
IHAC: evar_is_fresh_in x AC.[□↦p] → Γ ⊢i AC.[□↦ex , p] <---> exists_quantify x AC.[□↦p^{evar:0↦x}] using (ExGen := {[x]}, SVSubst := ∅, KT := false, FP := frames_of_AC AC)
Hwf': well_formed (ex , p) = true

well_formed_positive AC.[□↦p] && well_formed_closed (ex , AC.[□↦p])
Σ: Signature
Γ: Theory
AC: Application_context
p0: Pattern
Prf: well_formed p0
p: Pattern
x: evar
Hx: evar_is_fresh_in x (AC $ₗ p0).[□↦p]
Hwfp: well_formed_positive p = true
Hwfc: well_formed_closed (ex , p) = true
IHAC: evar_is_fresh_in x AC.[□↦p] → Γ ⊢i AC.[□↦ex , p] <---> exists_quantify x AC.[□↦p^{evar:0↦x}] using (ExGen := {[x]}, SVSubst := ∅, KT := false, FP := frames_of_AC AC)
Hwf': well_formed (ex , p) = true

well_formed_positive AC.[□↦p] && well_formed_closed (ex , AC.[□↦p])
Σ: Signature
Γ: Theory
AC: Application_context
p0: Pattern
Prf: well_formed p0
p: Pattern
x: evar
Hx: evar_is_fresh_in x (AC $ₗ p0).[□↦p]
Hwfp: well_formed_positive AC.[□↦p] = true
Hwfc: well_formed_closed (ex , p) = true
IHAC: evar_is_fresh_in x AC.[□↦p] → Γ ⊢i AC.[□↦ex , p] <---> exists_quantify x AC.[□↦p^{evar:0↦x}] using (ExGen := {[x]}, SVSubst := ∅, KT := false, FP := frames_of_AC AC)
Hwf': well_formed (ex , p) = true

well_formed_positive AC.[□↦p] && well_formed_closed (ex , AC.[□↦p])
Σ: Signature
Γ: Theory
AC: Application_context
p0: Pattern
Prf: well_formed p0
p: Pattern
x: evar
Hx: evar_is_fresh_in x (AC $ₗ p0).[□↦p]
Hwfp: well_formed_positive AC.[□↦p] = true
Hwfc: well_formed_closed (ex , p) = true
IHAC: evar_is_fresh_in x AC.[□↦p] → Γ ⊢i AC.[□↦ex , p] <---> exists_quantify x AC.[□↦p^{evar:0↦x}] using (ExGen := {[x]}, SVSubst := ∅, KT := false, FP := frames_of_AC AC)
Hwf': well_formed (ex , p) = true

true && well_formed_closed (ex , AC.[□↦p])
Σ: Signature
Γ: Theory
AC: Application_context
p0: Pattern
Prf: well_formed p0
p: Pattern
x: evar
Hx: evar_is_fresh_in x (AC $ₗ p0).[□↦p]
Hwfp: well_formed_positive AC.[□↦p] = true
Hwfc: well_formed_closed (ex , p) = true
IHAC: evar_is_fresh_in x AC.[□↦p] → Γ ⊢i AC.[□↦ex , p] <---> exists_quantify x AC.[□↦p^{evar:0↦x}] using (ExGen := {[x]}, SVSubst := ∅, KT := false, FP := frames_of_AC AC)
Hwf': well_formed (ex , p) = true

well_formed_closed (ex , AC.[□↦p])
Σ: Signature
Γ: Theory
AC: Application_context
p0: Pattern
Prf: well_formed p0
p: Pattern
x: evar
Hx: evar_is_fresh_in x (AC $ₗ p0).[□↦p]
Hwfc: well_formed_closed (ex , p) = true
IHAC: evar_is_fresh_in x AC.[□↦p] → Γ ⊢i AC.[□↦ex , p] <---> exists_quantify x AC.[□↦p^{evar:0↦x}] using (ExGen := {[x]}, SVSubst := ∅, KT := false, FP := frames_of_AC AC)
Hwf': well_formed (ex , p) = true

well_formed_closed (ex , AC.[□↦p])
Σ: Signature
Γ: Theory
AC: Application_context
p0: Pattern
Prf: well_formed p0
p: Pattern
x: evar
Hx: evar_is_fresh_in x (AC $ₗ p0).[□↦p]
Hwfc: well_formed_closed (ex , p) = true
IHAC: evar_is_fresh_in x AC.[□↦p] → Γ ⊢i AC.[□↦ex , p] <---> exists_quantify x AC.[□↦p^{evar:0↦x}] using (ExGen := {[x]}, SVSubst := ∅, KT := false, FP := frames_of_AC AC)
Hwf': well_formed (ex , p) = true

well_formed_closed_mu_aux (ex , AC.[□↦p]) 0 && well_formed_closed_ex_aux (ex , AC.[□↦p]) 0
Σ: Signature
Γ: Theory
AC: Application_context
p0: Pattern
Prf: well_formed p0
p: Pattern
x: evar
Hx: evar_is_fresh_in x (AC $ₗ p0).[□↦p]
Hwfc: well_formed_closed_mu_aux (ex , p) 0 && well_formed_closed_ex_aux (ex , p) 0 = true
IHAC: evar_is_fresh_in x AC.[□↦p] → Γ ⊢i AC.[□↦ex , p] <---> exists_quantify x AC.[□↦p^{evar:0↦x}] using (ExGen := {[x]}, SVSubst := ∅, KT := false, FP := frames_of_AC AC)
Hwf': well_formed (ex , p) = true

well_formed_closed_mu_aux (ex , AC.[□↦p]) 0 && well_formed_closed_ex_aux (ex , AC.[□↦p]) 0
Σ: Signature
Γ: Theory
AC: Application_context
p0: Pattern
Prf: well_formed p0
p: Pattern
x: evar
Hx: evar_is_fresh_in x (AC $ₗ p0).[□↦p]
Hwfc: well_formed_closed_mu_aux p 0 && well_formed_closed_ex_aux p 1 = true
IHAC: evar_is_fresh_in x AC.[□↦p] → Γ ⊢i AC.[□↦ex , p] <---> exists_quantify x AC.[□↦p^{evar:0↦x}] using (ExGen := {[x]}, SVSubst := ∅, KT := false, FP := frames_of_AC AC)
Hwf': well_formed (ex , p) = true

well_formed_closed_mu_aux (ex , AC.[□↦p]) 0 && well_formed_closed_ex_aux (ex , AC.[□↦p]) 0
Σ: Signature
Γ: Theory
AC: Application_context
p0: Pattern
Prf: well_formed p0
p: Pattern
x: evar
Hx: evar_is_fresh_in x (AC $ₗ p0).[□↦p]
Hwfc: well_formed_closed_mu_aux p 0 && well_formed_closed_ex_aux p 1 = true
IHAC: evar_is_fresh_in x AC.[□↦p] → Γ ⊢i AC.[□↦ex , p] <---> exists_quantify x AC.[□↦p^{evar:0↦x}] using (ExGen := {[x]}, SVSubst := ∅, KT := false, FP := frames_of_AC AC)
Hwf': well_formed (ex , p) = true

well_formed_closed_mu_aux AC.[□↦p] 0 && well_formed_closed_ex_aux AC.[□↦p] 1
Σ: Signature
Γ: Theory
AC: Application_context
p0: Pattern
Prf: well_formed p0
p: Pattern
x: evar
Hx: evar_is_fresh_in x (AC $ₗ p0).[□↦p]
Hwfc: well_formed_closed_mu_aux p 0 && well_formed_closed_ex_aux p 1 = true
IHAC: evar_is_fresh_in x AC.[□↦p] → Γ ⊢i AC.[□↦ex , p] <---> exists_quantify x AC.[□↦p^{evar:0↦x}] using (ExGen := {[x]}, SVSubst := ∅, KT := false, FP := frames_of_AC AC)
Hwf': well_formed (ex , p) = true

well_formed_closed_mu_aux AC.[□↦p] 0 = true
Σ: Signature
Γ: Theory
AC: Application_context
p0: Pattern
Prf: well_formed p0
p: Pattern
x: evar
Hx: evar_is_fresh_in x (AC $ₗ p0).[□↦p]
Hwfc: well_formed_closed_mu_aux p 0 && well_formed_closed_ex_aux p 1 = true
IHAC: evar_is_fresh_in x AC.[□↦p] → Γ ⊢i AC.[□↦ex , p] <---> exists_quantify x AC.[□↦p^{evar:0↦x}] using (ExGen := {[x]}, SVSubst := ∅, KT := false, FP := frames_of_AC AC)
Hwf': well_formed (ex , p) = true
well_formed_closed_ex_aux AC.[□↦p] 1 = true
Σ: Signature
Γ: Theory
AC: Application_context
p0: Pattern
Prf: well_formed p0
p: Pattern
x: evar
Hx: evar_is_fresh_in x (AC $ₗ p0).[□↦p]
Hwfc: well_formed_closed_mu_aux p 0 && well_formed_closed_ex_aux p 1 = true
IHAC: evar_is_fresh_in x AC.[□↦p] → Γ ⊢i AC.[□↦ex , p] <---> exists_quantify x AC.[□↦p^{evar:0↦x}] using (ExGen := {[x]}, SVSubst := ∅, KT := false, FP := frames_of_AC AC)
Hwf': well_formed (ex , p) = true

well_formed_closed_mu_aux AC.[□↦p] 0 = true
Σ: Signature
Γ: Theory
AC: Application_context
p0: Pattern
Prf: well_formed p0
p: Pattern
x: evar
Hx: evar_is_fresh_in x (AC $ₗ p0).[□↦p]
Hwfc: well_formed_closed_mu_aux p 0 && well_formed_closed_ex_aux p 1 = true
IHAC: evar_is_fresh_in x AC.[□↦p] → Γ ⊢i AC.[□↦ex , p] <---> exists_quantify x AC.[□↦p^{evar:0↦x}] using (ExGen := {[x]}, SVSubst := ∅, KT := false, FP := frames_of_AC AC)
Hwf': well_formed (ex , p) = true

well_formed_closed_mu_aux p 0 = true
Σ: Signature
Γ: Theory
AC: Application_context
p0: Pattern
Prf: well_formed p0
p: Pattern
x: evar
Hx: evar_is_fresh_in x (AC $ₗ p0).[□↦p]
H: well_formed_closed_mu_aux p 0 = true
H0: well_formed_closed_ex_aux p 1 = true
IHAC: evar_is_fresh_in x AC.[□↦p] → Γ ⊢i AC.[□↦ex , p] <---> exists_quantify x AC.[□↦p^{evar:0↦x}] using (ExGen := {[x]}, SVSubst := ∅, KT := false, FP := frames_of_AC AC)
Hwf': well_formed (ex , p) = true

well_formed_closed_mu_aux p 0 = true
assumption.
Σ: Signature
Γ: Theory
AC: Application_context
p0: Pattern
Prf: well_formed p0
p: Pattern
x: evar
Hx: evar_is_fresh_in x (AC $ₗ p0).[□↦p]
Hwfc: well_formed_closed_mu_aux p 0 && well_formed_closed_ex_aux p 1 = true
IHAC: evar_is_fresh_in x AC.[□↦p] → Γ ⊢i AC.[□↦ex , p] <---> exists_quantify x AC.[□↦p^{evar:0↦x}] using (ExGen := {[x]}, SVSubst := ∅, KT := false, FP := frames_of_AC AC)
Hwf': well_formed (ex , p) = true

well_formed_closed_ex_aux AC.[□↦p] 1 = true
Σ: Signature
Γ: Theory
AC: Application_context
p0: Pattern
Prf: well_formed p0
p: Pattern
x: evar
Hx: evar_is_fresh_in x (AC $ₗ p0).[□↦p]
Hwfc: well_formed_closed_mu_aux p 0 && well_formed_closed_ex_aux p 1 = true
IHAC: evar_is_fresh_in x AC.[□↦p] → Γ ⊢i AC.[□↦ex , p] <---> exists_quantify x AC.[□↦p^{evar:0↦x}] using (ExGen := {[x]}, SVSubst := ∅, KT := false, FP := frames_of_AC AC)
Hwf': well_formed (ex , p) = true

well_formed_closed_ex_aux p 1 = true
Σ: Signature
Γ: Theory
AC: Application_context
p0: Pattern
Prf: well_formed p0
p: Pattern
x: evar
Hx: evar_is_fresh_in x (AC $ₗ p0).[□↦p]
H: well_formed_closed_mu_aux p 0 = true
H0: well_formed_closed_ex_aux p 1 = true
IHAC: evar_is_fresh_in x AC.[□↦p] → Γ ⊢i AC.[□↦ex , p] <---> exists_quantify x AC.[□↦p^{evar:0↦x}] using (ExGen := {[x]}, SVSubst := ∅, KT := false, FP := frames_of_AC AC)
Hwf': well_formed (ex , p) = true

well_formed_closed_ex_aux p 1 = true
assumption.
Σ: Signature
Γ: Theory
AC: Application_context
p0: Pattern
Prf: well_formed p0
p: Pattern
x: evar
Hx: evar_is_fresh_in x (AC $ₗ p0).[□↦p]
Hwf: well_formed (ex , p) = true
IHAC: evar_is_fresh_in x AC.[□↦p] → Γ ⊢i AC.[□↦ex , p] <---> exists_quantify x AC.[□↦p^{evar:0↦x}] using (ExGen := {[x]}, SVSubst := ∅, KT := false, FP := frames_of_AC AC)
Hwfex: well_formed (ex , AC.[□↦p])

Γ ⊢i AC.[□↦ex , p] $ p0 <---> exists_quantify x (AC.[□↦p^{evar:0↦x}] $ p0) using (ExGen := {[x]}, SVSubst := ∅, KT := false, FP := {[p0 ↾ Prf]} ∪ frames_of_AC AC)
Σ: Signature
Γ: Theory
AC: Application_context
p0: Pattern
Prf: well_formed p0
p: Pattern
x: evar
Hx: evar_is_fresh_in x (AC $ₗ p0).[□↦p]
Hwf: well_formed (ex , p) = true
IHAC: evar_is_fresh_in x AC.[□↦p] → Γ ⊢i AC.[□↦ex , p] <---> exists_quantify x AC.[□↦p^{evar:0↦x}] using (ExGen := {[x]}, SVSubst := ∅, KT := false, FP := frames_of_AC AC)
Hwfex: well_formed (ex , AC.[□↦p])

evar_is_fresh_in x AC.[□↦p]
Σ: Signature
Γ: Theory
AC: Application_context
p0: Pattern
Prf: well_formed p0
p: Pattern
x: evar
Hx: evar_is_fresh_in x (AC $ₗ p0).[□↦p]
Hwf: well_formed (ex , p) = true
IHAC: evar_is_fresh_in x AC.[□↦p] → Γ ⊢i AC.[□↦ex , p] <---> exists_quantify x AC.[□↦p^{evar:0↦x}] using (ExGen := {[x]}, SVSubst := ∅, KT := false, FP := frames_of_AC AC)
Hwfex: well_formed (ex , AC.[□↦p])
Hxfr1: evar_is_fresh_in x AC.[□↦p]
Γ ⊢i AC.[□↦ex , p] $ p0 <---> exists_quantify x (AC.[□↦p^{evar:0↦x}] $ p0) using (ExGen := {[x]}, SVSubst := ∅, KT := false, FP := {[p0 ↾ Prf]} ∪ frames_of_AC AC)
Σ: Signature
Γ: Theory
AC: Application_context
p0: Pattern
Prf: well_formed p0
p: Pattern
x: evar
Hx: evar_is_fresh_in x (AC $ₗ p0).[□↦p]
Hwf: well_formed (ex , p) = true
IHAC: evar_is_fresh_in x AC.[□↦p] → Γ ⊢i AC.[□↦ex , p] <---> exists_quantify x AC.[□↦p^{evar:0↦x}] using (ExGen := {[x]}, SVSubst := ∅, KT := false, FP := frames_of_AC AC)
Hwfex: well_formed (ex , AC.[□↦p])

evar_is_fresh_in x AC.[□↦p]
Σ: Signature
Γ: Theory
AC: Application_context
p0: Pattern
Prf: well_formed p0
p: Pattern
x: evar
Hx: evar_is_fresh_in x (AC.[□↦p] $ p0)
Hwf: well_formed (ex , p) = true
IHAC: evar_is_fresh_in x AC.[□↦p] → Γ ⊢i AC.[□↦ex , p] <---> exists_quantify x AC.[□↦p^{evar:0↦x}] using (ExGen := {[x]}, SVSubst := ∅, KT := false, FP := frames_of_AC AC)
Hwfex: well_formed (ex , AC.[□↦p])

evar_is_fresh_in x AC.[□↦p]
Σ: Signature
Γ: Theory
AC: Application_context
p0: Pattern
Prf: well_formed p0
p: Pattern
x: evar
Hx: evar_is_fresh_in x (AC.[□↦p] $ p0)
Hwf: well_formed (ex , p) = true
IHAC: evar_is_fresh_in x AC.[□↦p] → Γ ⊢i AC.[□↦ex , p] <---> exists_quantify x AC.[□↦p^{evar:0↦x}] using (ExGen := {[x]}, SVSubst := ∅, KT := false, FP := frames_of_AC AC)
Hwfex: well_formed (ex , AC.[□↦p])

free_evars AC.[□↦p] ⊆ free_evars ?ϕ₂
Σ: Signature
Γ: Theory
AC: Application_context
p0: Pattern
Prf: well_formed p0
p: Pattern
x: evar
Hx: evar_is_fresh_in x (AC.[□↦p] $ p0)
Hwf: well_formed (ex , p) = true
IHAC: evar_is_fresh_in x AC.[□↦p] → Γ ⊢i AC.[□↦ex , p] <---> exists_quantify x AC.[□↦p^{evar:0↦x}] using (ExGen := {[x]}, SVSubst := ∅, KT := false, FP := frames_of_AC AC)
Hwfex: well_formed (ex , AC.[□↦p])
evar_is_fresh_in x ?ϕ₂
Σ: Signature
Γ: Theory
AC: Application_context
p0: Pattern
Prf: well_formed p0
p: Pattern
x: evar
Hx: evar_is_fresh_in x (AC.[□↦p] $ p0)
Hwf: well_formed (ex , p) = true
IHAC: evar_is_fresh_in x AC.[□↦p] → Γ ⊢i AC.[□↦ex , p] <---> exists_quantify x AC.[□↦p^{evar:0↦x}] using (ExGen := {[x]}, SVSubst := ∅, KT := false, FP := frames_of_AC AC)
Hwfex: well_formed (ex , AC.[□↦p])

evar_is_fresh_in x ?ϕ₂
apply Hx.
Σ: Signature
Γ: Theory
AC: Application_context
p0: Pattern
Prf: well_formed p0
p: Pattern
x: evar
Hx: evar_is_fresh_in x (AC.[□↦p] $ p0)
Hwf: well_formed (ex , p) = true
IHAC: evar_is_fresh_in x AC.[□↦p] → Γ ⊢i AC.[□↦ex , p] <---> exists_quantify x AC.[□↦p^{evar:0↦x}] using (ExGen := {[x]}, SVSubst := ∅, KT := false, FP := frames_of_AC AC)
Hwfex: well_formed (ex , AC.[□↦p])

free_evars AC.[□↦p] ⊆ free_evars (AC.[□↦p] $ p0)
solve_free_evars_inclusion 5.
Σ: Signature
Γ: Theory
AC: Application_context
p0: Pattern
Prf: well_formed p0
p: Pattern
x: evar
Hx: evar_is_fresh_in x (AC $ₗ p0).[□↦p]
Hwf: well_formed (ex , p) = true
IHAC: evar_is_fresh_in x AC.[□↦p] → Γ ⊢i AC.[□↦ex , p] <---> exists_quantify x AC.[□↦p^{evar:0↦x}] using (ExGen := {[x]}, SVSubst := ∅, KT := false, FP := frames_of_AC AC)
Hwfex: well_formed (ex , AC.[□↦p])
Hxfr1: evar_is_fresh_in x AC.[□↦p]

Γ ⊢i AC.[□↦ex , p] $ p0 <---> exists_quantify x (AC.[□↦p^{evar:0↦x}] $ p0) using (ExGen := {[x]}, SVSubst := ∅, KT := false, FP := {[p0 ↾ Prf]} ∪ frames_of_AC AC)
Σ: Signature
Γ: Theory
AC: Application_context
p0: Pattern
Prf: well_formed p0
p: Pattern
x: evar
Hx: evar_is_fresh_in x (AC.[□↦p] $ p0)
Hwf: well_formed (ex , p) = true
IHAC: evar_is_fresh_in x AC.[□↦p] → Γ ⊢i AC.[□↦ex , p] <---> exists_quantify x AC.[□↦p^{evar:0↦x}] using (ExGen := {[x]}, SVSubst := ∅, KT := false, FP := frames_of_AC AC)
Hwfex: well_formed (ex , AC.[□↦p])
Hxfr1: evar_is_fresh_in x AC.[□↦p]

Γ ⊢i AC.[□↦ex , p] $ p0 <---> exists_quantify x (AC.[□↦p^{evar:0↦x}] $ p0) using (ExGen := {[x]}, SVSubst := ∅, KT := false, FP := {[p0 ↾ Prf]} ∪ frames_of_AC AC)
Σ: Signature
Γ: Theory
AC: Application_context
p0: Pattern
Prf: well_formed p0
p: Pattern
x: evar
Hx: evar_is_fresh_in x (AC.[□↦p] $ p0)
Hwf: well_formed (ex , p) = true
IHAC: evar_is_fresh_in x AC.[□↦p] → Γ ⊢i AC.[□↦ex , p] <---> exists_quantify x AC.[□↦p^{evar:0↦x}] using (ExGen := {[x]}, SVSubst := ∅, KT := false, FP := frames_of_AC AC)
Hwfex: well_formed (ex , AC.[□↦p])
Hxfr1, Hxfr1': evar_is_fresh_in x AC.[□↦p]

Γ ⊢i AC.[□↦ex , p] $ p0 <---> exists_quantify x (AC.[□↦p^{evar:0↦x}] $ p0) using (ExGen := {[x]}, SVSubst := ∅, KT := false, FP := {[p0 ↾ Prf]} ∪ frames_of_AC AC)
Σ: Signature
Γ: Theory
AC: Application_context
p0: Pattern
Prf: well_formed p0
p: Pattern
x: evar
Hx: evar_is_fresh_in x (AC.[□↦p] $ p0)
Hwf: well_formed (ex , p) = true
IHAC: evar_is_fresh_in x AC.[□↦p] → Γ ⊢i AC.[□↦ex , p] <---> exists_quantify x AC.[□↦p^{evar:0↦x}] using (ExGen := {[x]}, SVSubst := ∅, KT := false, FP := frames_of_AC AC)
Hwfex: well_formed (ex , AC.[□↦p])
Hxfr1: evar_is_fresh_in x AC.[□↦p]
Hxfr1': evar_is_fresh_in x p ∧ x ∉ AC_free_evars AC

Γ ⊢i AC.[□↦ex , p] $ p0 <---> exists_quantify x (AC.[□↦p^{evar:0↦x}] $ p0) using (ExGen := {[x]}, SVSubst := ∅, KT := false, FP := {[p0 ↾ Prf]} ∪ frames_of_AC AC)
Σ: Signature
Γ: Theory
AC: Application_context
p0: Pattern
Prf: well_formed p0
p: Pattern
x: evar
Hx: evar_is_fresh_in x (AC.[□↦p] $ p0)
Hwf: well_formed (ex , p) = true
IHAC: evar_is_fresh_in x AC.[□↦p] → Γ ⊢i AC.[□↦ex , p] <---> exists_quantify x AC.[□↦p^{evar:0↦x}] using (ExGen := {[x]}, SVSubst := ∅, KT := false, FP := frames_of_AC AC)
Hwfex: well_formed (ex , AC.[□↦p])
Hxfr1: evar_is_fresh_in x AC.[□↦p]
Hxfrp: evar_is_fresh_in x p
HxAC: x ∉ AC_free_evars AC

Γ ⊢i AC.[□↦ex , p] $ p0 <---> exists_quantify x (AC.[□↦p^{evar:0↦x}] $ p0) using (ExGen := {[x]}, SVSubst := ∅, KT := false, FP := {[p0 ↾ Prf]} ∪ frames_of_AC AC)
Σ: Signature
Γ: Theory
AC: Application_context
p0: Pattern
Prf: well_formed p0
p: Pattern
x: evar
Hx: evar_is_fresh_in x (AC.[□↦p] $ p0)
Hwf: well_formed (ex , p) = true
IHAC: evar_is_fresh_in x AC.[□↦p] → Γ ⊢i AC.[□↦ex , p] <---> exists_quantify x AC.[□↦p^{evar:0↦x}] using (ExGen := {[x]}, SVSubst := ∅, KT := false, FP := frames_of_AC AC)
Hwfex: well_formed (ex , AC.[□↦p])
Hxfr1: evar_is_fresh_in x AC.[□↦p]
Hxfrp: evar_is_fresh_in x p
HxAC: x ∉ AC_free_evars AC

well_formed (exists_quantify x AC.[□↦p^{evar:0↦x}])
Σ: Signature
Γ: Theory
AC: Application_context
p0: Pattern
Prf: well_formed p0
p: Pattern
x: evar
Hx: evar_is_fresh_in x (AC.[□↦p] $ p0)
Hwf: well_formed (ex , p) = true
IHAC: evar_is_fresh_in x AC.[□↦p] → Γ ⊢i AC.[□↦ex , p] <---> exists_quantify x AC.[□↦p^{evar:0↦x}] using (ExGen := {[x]}, SVSubst := ∅, KT := false, FP := frames_of_AC AC)
Hwfex: well_formed (ex , AC.[□↦p])
Hxfr1: evar_is_fresh_in x AC.[□↦p]
Hxfrp: evar_is_fresh_in x p
HxAC: x ∉ AC_free_evars AC
Hwf': well_formed (exists_quantify x AC.[□↦p^{evar:0↦x}])
Γ ⊢i AC.[□↦ex , p] $ p0 <---> exists_quantify x (AC.[□↦p^{evar:0↦x}] $ p0) using (ExGen := {[x]}, SVSubst := ∅, KT := false, FP := {[p0 ↾ Prf]} ∪ frames_of_AC AC)
Σ: Signature
Γ: Theory
AC: Application_context
p0: Pattern
Prf: well_formed p0
p: Pattern
x: evar
Hx: evar_is_fresh_in x (AC.[□↦p] $ p0)
Hwf: well_formed (ex , p) = true
IHAC: evar_is_fresh_in x AC.[□↦p] → Γ ⊢i AC.[□↦ex , p] <---> exists_quantify x AC.[□↦p^{evar:0↦x}] using (ExGen := {[x]}, SVSubst := ∅, KT := false, FP := frames_of_AC AC)
Hwfex: well_formed (ex , AC.[□↦p])
Hxfr1: evar_is_fresh_in x AC.[□↦p]
Hxfrp: evar_is_fresh_in x p
HxAC: x ∉ AC_free_evars AC

well_formed (exists_quantify x AC.[□↦p^{evar:0↦x}])
Σ: Signature
Γ: Theory
AC: Application_context
p0: Pattern
Prf: well_formed p0
p: Pattern
x: evar
Hx: evar_is_fresh_in x (AC.[□↦p] $ p0)
Hwf: well_formed (ex , p) = true
IHAC: evar_is_fresh_in x AC.[□↦p] → Γ ⊢i AC.[□↦ex , p] <---> exists_quantify x AC.[□↦p^{evar:0↦x}] using (ExGen := {[x]}, SVSubst := ∅, KT := false, FP := frames_of_AC AC)
Hwfex: well_formed (ex , AC.[□↦p])
Hxfr1: evar_is_fresh_in x AC.[□↦p]
Hxfrp: evar_is_fresh_in x p
HxAC: x ∉ AC_free_evars AC

well_formed (ex , AC.[□↦p^{evar:0↦x}]^{{evar:x↦0}})
Σ: Signature
AC: Application_context
p: Pattern
x: evar
Hwf: well_formed (ex , p) = true
HxAC: x ∉ AC_free_evars AC

well_formed (ex , AC.[□↦p^{evar:0↦x}]^{{evar:x↦0}})
Σ: Signature
AC: Application_context
p: Pattern
x: evar
Hwf: well_formed (ex , p) = true
HxAC: x ∉ AC_free_evars AC

well_formed (ex , p) = true
apply Hwf.
Σ: Signature
Γ: Theory
AC: Application_context
p0: Pattern
Prf: well_formed p0
p: Pattern
x: evar
Hx: evar_is_fresh_in x (AC.[□↦p] $ p0)
Hwf: well_formed (ex , p) = true
IHAC: evar_is_fresh_in x AC.[□↦p] → Γ ⊢i AC.[□↦ex , p] <---> exists_quantify x AC.[□↦p^{evar:0↦x}] using (ExGen := {[x]}, SVSubst := ∅, KT := false, FP := frames_of_AC AC)
Hwfex: well_formed (ex , AC.[□↦p])
Hxfr1: evar_is_fresh_in x AC.[□↦p]
Hxfrp: evar_is_fresh_in x p
HxAC: x ∉ AC_free_evars AC
Hwf': well_formed (exists_quantify x AC.[□↦p^{evar:0↦x}])

Γ ⊢i AC.[□↦ex , p] $ p0 <---> exists_quantify x (AC.[□↦p^{evar:0↦x}] $ p0) using (ExGen := {[x]}, SVSubst := ∅, KT := false, FP := {[p0 ↾ Prf]} ∪ frames_of_AC AC)
(* TODO automate this *)
Σ: Signature
Γ: Theory
AC: Application_context
p0: Pattern
Prf: well_formed p0
p: Pattern
x: evar
Hx: evar_is_fresh_in x (AC.[□↦p] $ p0)
Hwf: well_formed (ex , p) = true
IHAC: evar_is_fresh_in x AC.[□↦p] → Γ ⊢i AC.[□↦ex , p] <---> exists_quantify x AC.[□↦p^{evar:0↦x}] using (ExGen := {[x]}, SVSubst := ∅, KT := false, FP := frames_of_AC AC)
Hwfex: well_formed (ex , AC.[□↦p])
Hxfr1: evar_is_fresh_in x AC.[□↦p]
Hxfrp: evar_is_fresh_in x p
HxAC: x ∉ AC_free_evars AC
Hwf': well_formed (exists_quantify x AC.[□↦p^{evar:0↦x}])

well_formed p^{evar:0↦x}
Σ: Signature
Γ: Theory
AC: Application_context
p0: Pattern
Prf: well_formed p0
p: Pattern
x: evar
Hx: evar_is_fresh_in x (AC.[□↦p] $ p0)
Hwf: well_formed (ex , p) = true
IHAC: evar_is_fresh_in x AC.[□↦p] → Γ ⊢i AC.[□↦ex , p] <---> exists_quantify x AC.[□↦p^{evar:0↦x}] using (ExGen := {[x]}, SVSubst := ∅, KT := false, FP := frames_of_AC AC)
Hwfex: well_formed (ex , AC.[□↦p])
Hxfr1: evar_is_fresh_in x AC.[□↦p]
Hxfrp: evar_is_fresh_in x p
HxAC: x ∉ AC_free_evars AC
Hwf': well_formed (exists_quantify x AC.[□↦p^{evar:0↦x}])
Hwfeo: well_formed p^{evar:0↦x}
Γ ⊢i AC.[□↦ex , p] $ p0 <---> exists_quantify x (AC.[□↦p^{evar:0↦x}] $ p0) using (ExGen := {[x]}, SVSubst := ∅, KT := false, FP := {[p0 ↾ Prf]} ∪ frames_of_AC AC)
Σ: Signature
Γ: Theory
AC: Application_context
p0: Pattern
Prf: well_formed p0
p: Pattern
x: evar
Hx: evar_is_fresh_in x (AC.[□↦p] $ p0)
Hwf: well_formed (ex , p) = true
IHAC: evar_is_fresh_in x AC.[□↦p] → Γ ⊢i AC.[□↦ex , p] <---> exists_quantify x AC.[□↦p^{evar:0↦x}] using (ExGen := {[x]}, SVSubst := ∅, KT := false, FP := frames_of_AC AC)
Hwfex: well_formed (ex , AC.[□↦p])
Hxfr1: evar_is_fresh_in x AC.[□↦p]
Hxfrp: evar_is_fresh_in x p
HxAC: x ∉ AC_free_evars AC
Hwf': well_formed (exists_quantify x AC.[□↦p^{evar:0↦x}])

well_formed p^{evar:0↦x}
Σ: Signature
Γ: Theory
AC: Application_context
p0: Pattern
Prf: well_formed p0
p: Pattern
x: evar
Hx: evar_is_fresh_in x (AC.[□↦p] $ p0)
Hwf: well_formed (ex , p) = true
IHAC: evar_is_fresh_in x AC.[□↦p] → Γ ⊢i AC.[□↦ex , p] <---> exists_quantify x AC.[□↦p^{evar:0↦x}] using (ExGen := {[x]}, SVSubst := ∅, KT := false, FP := frames_of_AC AC)
Hwfex: well_formed (ex , AC.[□↦p])
Hxfr1: evar_is_fresh_in x AC.[□↦p]
Hxfrp: evar_is_fresh_in x p
HxAC: x ∉ AC_free_evars AC
Hwf': well_formed (exists_quantify x AC.[□↦p^{evar:0↦x}])

well_formed_positive p^{evar:0↦x} && well_formed_closed p^{evar:0↦x}
Σ: Signature
Γ: Theory
AC: Application_context
p0: Pattern
Prf: well_formed p0
p: Pattern
x: evar
Hx: evar_is_fresh_in x (AC.[□↦p] $ p0)
Hwf: [&& well_formed_positive (ex , p), well_formed_closed_mu_aux (ex , p) 0 & well_formed_closed_ex_aux (ex , p) 0] = true
IHAC: evar_is_fresh_in x AC.[□↦p] → Γ ⊢i AC.[□↦ex , p] <---> exists_quantify x AC.[□↦p^{evar:0↦x}] using (ExGen := {[x]}, SVSubst := ∅, KT := false, FP := frames_of_AC AC)
Hwfex: well_formed (ex , AC.[□↦p])
Hxfr1: evar_is_fresh_in x AC.[□↦p]
Hxfrp: evar_is_fresh_in x p
HxAC: x ∉ AC_free_evars AC
Hwf': well_formed (exists_quantify x AC.[□↦p^{evar:0↦x}])

well_formed_positive p^{evar:0↦x} && well_formed_closed p^{evar:0↦x}
Σ: Signature
Γ: Theory
AC: Application_context
p0: Pattern
Prf: well_formed p0
p: Pattern
x: evar
Hx: evar_is_fresh_in x (AC.[□↦p] $ p0)
Hwf: well_formed_positive (ex , p) = true ∧ well_formed_closed_mu_aux (ex , p) 0 && well_formed_closed_ex_aux (ex , p) 0 = true
IHAC: evar_is_fresh_in x AC.[□↦p] → Γ ⊢i AC.[□↦ex , p] <---> exists_quantify x AC.[□↦p^{evar:0↦x}] using (ExGen := {[x]}, SVSubst := ∅, KT := false, FP := frames_of_AC AC)
Hwfex: well_formed (ex , AC.[□↦p])
Hxfr1: evar_is_fresh_in x AC.[□↦p]
Hxfrp: evar_is_fresh_in x p
HxAC: x ∉ AC_free_evars AC
Hwf': well_formed (exists_quantify x AC.[□↦p^{evar:0↦x}])

well_formed_positive p^{evar:0↦x} && well_formed_closed p^{evar:0↦x}
Σ: Signature
Γ: Theory
AC: Application_context
p0: Pattern
Prf: well_formed p0
p: Pattern
x: evar
Hx: evar_is_fresh_in x (AC.[□↦p] $ p0)
Hwf: well_formed_positive p = true ∧ well_formed_closed_mu_aux p 0 && well_formed_closed_ex_aux p 1 = true
IHAC: evar_is_fresh_in x AC.[□↦p] → Γ ⊢i AC.[□↦ex , p] <---> exists_quantify x AC.[□↦p^{evar:0↦x}] using (ExGen := {[x]}, SVSubst := ∅, KT := false, FP := frames_of_AC AC)
Hwfex: well_formed (ex , AC.[□↦p])
Hxfr1: evar_is_fresh_in x AC.[□↦p]
Hxfrp: evar_is_fresh_in x p
HxAC: x ∉ AC_free_evars AC
Hwf': well_formed (exists_quantify x AC.[□↦p^{evar:0↦x}])

well_formed_positive p^{evar:0↦x} && well_formed_closed p^{evar:0↦x}
Σ: Signature
Γ: Theory
AC: Application_context
p0: Pattern
Prf: well_formed p0
p: Pattern
x: evar
Hx: evar_is_fresh_in x (AC.[□↦p] $ p0)
Hwf: well_formed_positive p = true ∧ well_formed_closed_mu_aux p 0 && well_formed_closed_ex_aux p 1 = true
IHAC: evar_is_fresh_in x AC.[□↦p] → Γ ⊢i AC.[□↦ex , p] <---> exists_quantify x AC.[□↦p^{evar:0↦x}] using (ExGen := {[x]}, SVSubst := ∅, KT := false, FP := frames_of_AC AC)
Hwfex: well_formed (ex , AC.[□↦p])
Hxfr1: evar_is_fresh_in x AC.[□↦p]
Hxfrp: evar_is_fresh_in x p
HxAC: x ∉ AC_free_evars AC
Hwf': well_formed (exists_quantify x AC.[□↦p^{evar:0↦x}])

well_formed_positive p = true
Σ: Signature
Γ: Theory
AC: Application_context
p0: Pattern
Prf: well_formed p0
p: Pattern
x: evar
Hx: evar_is_fresh_in x (AC.[□↦p] $ p0)
Hwf: well_formed_positive p = true ∧ well_formed_closed_mu_aux p 0 && well_formed_closed_ex_aux p 1 = true
IHAC: evar_is_fresh_in x AC.[□↦p] → Γ ⊢i AC.[□↦ex , p] <---> exists_quantify x AC.[□↦p^{evar:0↦x}] using (ExGen := {[x]}, SVSubst := ∅, KT := false, FP := frames_of_AC AC)
Hwfex: well_formed (ex , AC.[□↦p])
Hxfr1: evar_is_fresh_in x AC.[□↦p]
Hxfrp: evar_is_fresh_in x p
HxAC: x ∉ AC_free_evars AC
Hwf': well_formed (exists_quantify x AC.[□↦p^{evar:0↦x}])
true && well_formed_closed p^{evar:0↦x}
Σ: Signature
Γ: Theory
AC: Application_context
p0: Pattern
Prf: well_formed p0
p: Pattern
x: evar
Hx: evar_is_fresh_in x (AC.[□↦p] $ p0)
Hwf: well_formed_positive p = true ∧ well_formed_closed_mu_aux p 0 && well_formed_closed_ex_aux p 1 = true
IHAC: evar_is_fresh_in x AC.[□↦p] → Γ ⊢i AC.[□↦ex , p] <---> exists_quantify x AC.[□↦p^{evar:0↦x}] using (ExGen := {[x]}, SVSubst := ∅, KT := false, FP := frames_of_AC AC)
Hwfex: well_formed (ex , AC.[□↦p])
Hxfr1: evar_is_fresh_in x AC.[□↦p]
Hxfrp: evar_is_fresh_in x p
HxAC: x ∉ AC_free_evars AC
Hwf': well_formed (exists_quantify x AC.[□↦p^{evar:0↦x}])

well_formed_positive p = true
apply Hwf.
Σ: Signature
Γ: Theory
AC: Application_context
p0: Pattern
Prf: well_formed p0
p: Pattern
x: evar
Hx: evar_is_fresh_in x (AC.[□↦p] $ p0)
Hwf: well_formed_positive p = true ∧ well_formed_closed_mu_aux p 0 && well_formed_closed_ex_aux p 1 = true
IHAC: evar_is_fresh_in x AC.[□↦p] → Γ ⊢i AC.[□↦ex , p] <---> exists_quantify x AC.[□↦p^{evar:0↦x}] using (ExGen := {[x]}, SVSubst := ∅, KT := false, FP := frames_of_AC AC)
Hwfex: well_formed (ex , AC.[□↦p])
Hxfr1: evar_is_fresh_in x AC.[□↦p]
Hxfrp: evar_is_fresh_in x p
HxAC: x ∉ AC_free_evars AC
Hwf': well_formed (exists_quantify x AC.[□↦p^{evar:0↦x}])

true && well_formed_closed p^{evar:0↦x}
Σ: Signature
Γ: Theory
AC: Application_context
p0: Pattern
Prf: well_formed p0
p: Pattern
x: evar
Hx: evar_is_fresh_in x (AC.[□↦p] $ p0)
Hwf: well_formed_positive p = true ∧ well_formed_closed_mu_aux p 0 && well_formed_closed_ex_aux p 1 = true
IHAC: evar_is_fresh_in x AC.[□↦p] → Γ ⊢i AC.[□↦ex , p] <---> exists_quantify x AC.[□↦p^{evar:0↦x}] using (ExGen := {[x]}, SVSubst := ∅, KT := false, FP := frames_of_AC AC)
Hwfex: well_formed (ex , AC.[□↦p])
Hxfr1: evar_is_fresh_in x AC.[□↦p]
Hxfrp: evar_is_fresh_in x p
HxAC: x ∉ AC_free_evars AC
Hwf': well_formed (exists_quantify x AC.[□↦p^{evar:0↦x}])

[&& true, well_formed_closed_mu_aux p^{evar:0↦x} 0 & well_formed_closed_ex_aux p^{evar:0↦x} 0]
Σ: Signature
Γ: Theory
AC: Application_context
p0: Pattern
Prf: well_formed p0
p: Pattern
x: evar
Hx: evar_is_fresh_in x (AC.[□↦p] $ p0)
H: well_formed_positive p = true
H1: well_formed_closed_mu_aux p 0 = true
H2: well_formed_closed_ex_aux p 1 = true
IHAC: evar_is_fresh_in x AC.[□↦p] → Γ ⊢i AC.[□↦ex , p] <---> exists_quantify x AC.[□↦p^{evar:0↦x}] using (ExGen := {[x]}, SVSubst := ∅, KT := false, FP := frames_of_AC AC)
Hwfex: well_formed (ex , AC.[□↦p])
Hxfr1: evar_is_fresh_in x AC.[□↦p]
Hxfrp: evar_is_fresh_in x p
HxAC: x ∉ AC_free_evars AC
Hwf': well_formed (exists_quantify x AC.[□↦p^{evar:0↦x}])

[&& true, well_formed_closed_mu_aux p^{evar:0↦x} 0 & well_formed_closed_ex_aux p^{evar:0↦x} 0]
split_and!; auto.
Σ: Signature
Γ: Theory
AC: Application_context
p0: Pattern
Prf: well_formed p0
p: Pattern
x: evar
Hx: evar_is_fresh_in x (AC.[□↦p] $ p0)
Hwf: well_formed (ex , p) = true
IHAC: evar_is_fresh_in x AC.[□↦p] → Γ ⊢i AC.[□↦ex , p] <---> exists_quantify x AC.[□↦p^{evar:0↦x}] using (ExGen := {[x]}, SVSubst := ∅, KT := false, FP := frames_of_AC AC)
Hwfex: well_formed (ex , AC.[□↦p])
Hxfr1: evar_is_fresh_in x AC.[□↦p]
Hxfrp: evar_is_fresh_in x p
HxAC: x ∉ AC_free_evars AC
Hwf': well_formed (exists_quantify x AC.[□↦p^{evar:0↦x}])
Hwfeo: well_formed p^{evar:0↦x}

Γ ⊢i AC.[□↦ex , p] $ p0 <---> exists_quantify x (AC.[□↦p^{evar:0↦x}] $ p0) using (ExGen := {[x]}, SVSubst := ∅, KT := false, FP := {[p0 ↾ Prf]} ∪ frames_of_AC AC)
(* TODO automate this. The problem is that [well_formed_app] and others do not have [= true]; that is why [auto] does not work. But [auto] is not suitable for this anyway. A better way would be to create some `simpl_well_formed` tuple, that might use the type class mechanism for extension... *)
Σ: Signature
Γ: Theory
AC: Application_context
p0: Pattern
Prf: well_formed p0
p: Pattern
x: evar
Hx: evar_is_fresh_in x (AC.[□↦p] $ p0)
Hwf: well_formed (ex , p) = true
IHAC: evar_is_fresh_in x AC.[□↦p] → Γ ⊢i AC.[□↦ex , p] <---> exists_quantify x AC.[□↦p^{evar:0↦x}] using (ExGen := {[x]}, SVSubst := ∅, KT := false, FP := frames_of_AC AC)
Hwfex: well_formed (ex , AC.[□↦p])
Hxfr1: evar_is_fresh_in x AC.[□↦p]
Hxfrp: evar_is_fresh_in x p
HxAC: x ∉ AC_free_evars AC
Hwf': well_formed (exists_quantify x AC.[□↦p^{evar:0↦x}])
Hwfeo: well_formed p^{evar:0↦x}

well_formed (exists_quantify x (AC.[□↦p^{evar:0↦x}] $ p0))
Σ: Signature
Γ: Theory
AC: Application_context
p0: Pattern
Prf: well_formed p0
p: Pattern
x: evar
Hx: evar_is_fresh_in x (AC.[□↦p] $ p0)
Hwf: well_formed (ex , p) = true
IHAC: evar_is_fresh_in x AC.[□↦p] → Γ ⊢i AC.[□↦ex , p] <---> exists_quantify x AC.[□↦p^{evar:0↦x}] using (ExGen := {[x]}, SVSubst := ∅, KT := false, FP := frames_of_AC AC)
Hwfex: well_formed (ex , AC.[□↦p])
Hxfr1: evar_is_fresh_in x AC.[□↦p]
Hxfrp: evar_is_fresh_in x p
HxAC: x ∉ AC_free_evars AC
Hwf': well_formed (exists_quantify x AC.[□↦p^{evar:0↦x}])
Hwfeo: well_formed p^{evar:0↦x}
Hwf'p0: well_formed (exists_quantify x (AC.[□↦p^{evar:0↦x}] $ p0))
Γ ⊢i AC.[□↦ex , p] $ p0 <---> exists_quantify x (AC.[□↦p^{evar:0↦x}] $ p0) using (ExGen := {[x]}, SVSubst := ∅, KT := false, FP := {[p0 ↾ Prf]} ∪ frames_of_AC AC)
Σ: Signature
Γ: Theory
AC: Application_context
p0: Pattern
Prf: well_formed p0
p: Pattern
x: evar
Hx: evar_is_fresh_in x (AC.[□↦p] $ p0)
Hwf: well_formed (ex , p) = true
IHAC: evar_is_fresh_in x AC.[□↦p] → Γ ⊢i AC.[□↦ex , p] <---> exists_quantify x AC.[□↦p^{evar:0↦x}] using (ExGen := {[x]}, SVSubst := ∅, KT := false, FP := frames_of_AC AC)
Hwfex: well_formed (ex , AC.[□↦p])
Hxfr1: evar_is_fresh_in x AC.[□↦p]
Hxfrp: evar_is_fresh_in x p
HxAC: x ∉ AC_free_evars AC
Hwf': well_formed (exists_quantify x AC.[□↦p^{evar:0↦x}])
Hwfeo: well_formed p^{evar:0↦x}

well_formed (exists_quantify x (AC.[□↦p^{evar:0↦x}] $ p0))
Σ: Signature
Γ: Theory
AC: Application_context
p0: Pattern
Prf: well_formed p0
p: Pattern
x: evar
Hx: evar_is_fresh_in x (AC.[□↦p] $ p0)
Hwf: well_formed (ex , p) = true
IHAC: evar_is_fresh_in x AC.[□↦p] → Γ ⊢i AC.[□↦ex , p] <---> exists_quantify x AC.[□↦p^{evar:0↦x}] using (ExGen := {[x]}, SVSubst := ∅, KT := false, FP := frames_of_AC AC)
Hwfex: well_formed (ex , AC.[□↦p])
Hxfr1: evar_is_fresh_in x AC.[□↦p]
Hxfrp: evar_is_fresh_in x p
HxAC: x ∉ AC_free_evars AC
Hwf': well_formed (exists_quantify x AC.[□↦p^{evar:0↦x}])
Hwfeo: well_formed p^{evar:0↦x}

well_formed (ex , (AC.[□↦p^{evar:0↦x}] $ p0)^{{evar:x↦0}})
Σ: Signature
Γ: Theory
AC: Application_context
p0: Pattern
Prf: well_formed p0
p: Pattern
x: evar
Hx: evar_is_fresh_in x (AC.[□↦p] $ p0)
Hwf: well_formed (ex , p) = true
IHAC: evar_is_fresh_in x AC.[□↦p] → Γ ⊢i AC.[□↦ex , p] <---> exists_quantify x AC.[□↦p^{evar:0↦x}] using (ExGen := {[x]}, SVSubst := ∅, KT := false, FP := frames_of_AC AC)
Hwfex: well_formed (ex , AC.[□↦p])
Hxfr1: evar_is_fresh_in x AC.[□↦p]
Hxfrp: evar_is_fresh_in x p
HxAC: x ∉ AC_free_evars AC
Hwf': well_formed (exists_quantify x AC.[□↦p^{evar:0↦x}])
Hwfeo: well_formed p^{evar:0↦x}

well_formed (AC.[□↦p^{evar:0↦x}] $ p0) = true
Σ: Signature
Γ: Theory
AC: Application_context
p0: Pattern
Prf: well_formed p0
p: Pattern
x: evar
Hx: evar_is_fresh_in x (AC.[□↦p] $ p0)
Hwf: well_formed (ex , p) = true
IHAC: evar_is_fresh_in x AC.[□↦p] → Γ ⊢i AC.[□↦ex , p] <---> exists_quantify x AC.[□↦p^{evar:0↦x}] using (ExGen := {[x]}, SVSubst := ∅, KT := false, FP := frames_of_AC AC)
Hwfex: well_formed (ex , AC.[□↦p])
Hxfr1: evar_is_fresh_in x AC.[□↦p]
Hxfrp: evar_is_fresh_in x p
HxAC: x ∉ AC_free_evars AC
Hwf': well_formed (exists_quantify x AC.[□↦p^{evar:0↦x}])
Hwfeo: well_formed p^{evar:0↦x}

well_formed AC.[□↦p^{evar:0↦x}] = true
Σ: Signature
Γ: Theory
AC: Application_context
p0: Pattern
Prf: well_formed p0
p: Pattern
x: evar
Hx: evar_is_fresh_in x (AC.[□↦p] $ p0)
Hwf: well_formed (ex , p) = true
IHAC: evar_is_fresh_in x AC.[□↦p] → Γ ⊢i AC.[□↦ex , p] <---> exists_quantify x AC.[□↦p^{evar:0↦x}] using (ExGen := {[x]}, SVSubst := ∅, KT := false, FP := frames_of_AC AC)
Hwfex: well_formed (ex , AC.[□↦p])
Hxfr1: evar_is_fresh_in x AC.[□↦p]
Hxfrp: evar_is_fresh_in x p
HxAC: x ∉ AC_free_evars AC
Hwf': well_formed (exists_quantify x AC.[□↦p^{evar:0↦x}])
Hwfeo: well_formed p^{evar:0↦x}
well_formed p0 = true
Σ: Signature
Γ: Theory
AC: Application_context
p0: Pattern
Prf: well_formed p0
p: Pattern
x: evar
Hx: evar_is_fresh_in x (AC.[□↦p] $ p0)
Hwf: well_formed (ex , p) = true
IHAC: evar_is_fresh_in x AC.[□↦p] → Γ ⊢i AC.[□↦ex , p] <---> exists_quantify x AC.[□↦p^{evar:0↦x}] using (ExGen := {[x]}, SVSubst := ∅, KT := false, FP := frames_of_AC AC)
Hwfex: well_formed (ex , AC.[□↦p])
Hxfr1: evar_is_fresh_in x AC.[□↦p]
Hxfrp: evar_is_fresh_in x p
HxAC: x ∉ AC_free_evars AC
Hwf': well_formed (exists_quantify x AC.[□↦p^{evar:0↦x}])
Hwfeo: well_formed p^{evar:0↦x}

well_formed p0 = true
apply Prf.
Σ: Signature
Γ: Theory
AC: Application_context
p0: Pattern
Prf: well_formed p0
p: Pattern
x: evar
Hx: evar_is_fresh_in x (AC.[□↦p] $ p0)
Hwf: well_formed (ex , p) = true
IHAC: evar_is_fresh_in x AC.[□↦p] → Γ ⊢i AC.[□↦ex , p] <---> exists_quantify x AC.[□↦p^{evar:0↦x}] using (ExGen := {[x]}, SVSubst := ∅, KT := false, FP := frames_of_AC AC)
Hwfex: well_formed (ex , AC.[□↦p])
Hxfr1: evar_is_fresh_in x AC.[□↦p]
Hxfrp: evar_is_fresh_in x p
HxAC: x ∉ AC_free_evars AC
Hwf': well_formed (exists_quantify x AC.[□↦p^{evar:0↦x}])
Hwfeo: well_formed p^{evar:0↦x}

well_formed AC.[□↦p^{evar:0↦x}] = true
auto.
Σ: Signature
Γ: Theory
AC: Application_context
p0: Pattern
Prf: well_formed p0
p: Pattern
x: evar
Hx: evar_is_fresh_in x (AC.[□↦p] $ p0)
Hwf: well_formed (ex , p) = true
IHAC: evar_is_fresh_in x AC.[□↦p] → Γ ⊢i AC.[□↦ex , p] <---> exists_quantify x AC.[□↦p^{evar:0↦x}] using (ExGen := {[x]}, SVSubst := ∅, KT := false, FP := frames_of_AC AC)
Hwfex: well_formed (ex , AC.[□↦p])
Hxfr1: evar_is_fresh_in x AC.[□↦p]
Hxfrp: evar_is_fresh_in x p
HxAC: x ∉ AC_free_evars AC
Hwf': well_formed (exists_quantify x AC.[□↦p^{evar:0↦x}])
Hwfeo: well_formed p^{evar:0↦x}
Hwf'p0: well_formed (exists_quantify x (AC.[□↦p^{evar:0↦x}] $ p0))

Γ ⊢i AC.[□↦ex , p] $ p0 <---> exists_quantify x (AC.[□↦p^{evar:0↦x}] $ p0) using (ExGen := {[x]}, SVSubst := ∅, KT := false, FP := {[p0 ↾ Prf]} ∪ frames_of_AC AC)
Σ: Signature
Γ: Theory
AC: Application_context
p0: Pattern
Prf: well_formed p0
p: Pattern
x: evar
Hx: evar_is_fresh_in x (AC.[□↦p] $ p0)
Hwf: well_formed (ex , p) = true
IHAC: ((Γ ⊢i AC.[□↦ex , p] ---> exists_quantify x AC.[□↦p^{evar:0↦x}] using (ExGen := {[x]}, SVSubst := ∅, KT := false, FP := frames_of_AC AC)) * (Γ ⊢i exists_quantify x AC.[□↦p^{evar:0↦x}] ---> AC.[□↦ex , p] using (ExGen := {[x]}, SVSubst := ∅, KT := false, FP := frames_of_AC AC)))%type
Hwfex: well_formed (ex , AC.[□↦p])
Hxfr1: evar_is_fresh_in x AC.[□↦p]
Hxfrp: evar_is_fresh_in x p
HxAC: x ∉ AC_free_evars AC
Hwf': well_formed (exists_quantify x AC.[□↦p^{evar:0↦x}])
Hwfeo: well_formed p^{evar:0↦x}
Hwf'p0: well_formed (exists_quantify x (AC.[□↦p^{evar:0↦x}] $ p0))

Γ ⊢i AC.[□↦ex , p] $ p0 <---> exists_quantify x (AC.[□↦p^{evar:0↦x}] $ p0) using (ExGen := {[x]}, SVSubst := ∅, KT := false, FP := {[p0 ↾ Prf]} ∪ frames_of_AC AC)
Σ: Signature
Γ: Theory
AC: Application_context
p0: Pattern
Prf: well_formed p0
p: Pattern
x: evar
Hx: evar_is_fresh_in x (AC.[□↦p] $ p0)
Hwf: well_formed (ex , p) = true
IH1: Γ ⊢i AC.[□↦ex , p] ---> exists_quantify x AC.[□↦p^{evar:0↦x}] using (ExGen := {[x]}, SVSubst := ∅, KT := false, FP := frames_of_AC AC)
IH2: Γ ⊢i exists_quantify x AC.[□↦p^{evar:0↦x}] ---> AC.[□↦ex , p] using (ExGen := {[x]}, SVSubst := ∅, KT := false, FP := frames_of_AC AC)
Hwfex: well_formed (ex , AC.[□↦p])
Hxfr1: evar_is_fresh_in x AC.[□↦p]
Hxfrp: evar_is_fresh_in x p
HxAC: x ∉ AC_free_evars AC
Hwf': well_formed (exists_quantify x AC.[□↦p^{evar:0↦x}])
Hwfeo: well_formed p^{evar:0↦x}
Hwf'p0: well_formed (exists_quantify x (AC.[□↦p^{evar:0↦x}] $ p0))

Γ ⊢i AC.[□↦ex , p] $ p0 <---> exists_quantify x (AC.[□↦p^{evar:0↦x}] $ p0) using (ExGen := {[x]}, SVSubst := ∅, KT := false, FP := {[p0 ↾ Prf]} ∪ frames_of_AC AC)
Σ: Signature
Γ: Theory
AC: Application_context
p0: Pattern
Prf: well_formed p0
p: Pattern
x: evar
Hx: evar_is_fresh_in x (AC.[□↦p] $ p0)
Hwf: well_formed (ex , p) = true
IH1: Γ ⊢i AC.[□↦ex , p] ---> exists_quantify x AC.[□↦p^{evar:0↦x}] using (ExGen := {[x]}, SVSubst := ∅, KT := false, FP := frames_of_AC AC)
IH2: Γ ⊢i exists_quantify x AC.[□↦p^{evar:0↦x}] ---> AC.[□↦ex , p] using (ExGen := {[x]}, SVSubst := ∅, KT := false, FP := frames_of_AC AC)
Hwfex: well_formed (ex , AC.[□↦p])
Hxfr1: evar_is_fresh_in x AC.[□↦p]
Hxfrp: evar_is_fresh_in x p
HxAC: x ∉ AC_free_evars AC
Hwf': well_formed (exists_quantify x AC.[□↦p^{evar:0↦x}])
Hwfeo: well_formed p^{evar:0↦x}
Hwf'p0: well_formed (exists_quantify x (AC.[□↦p^{evar:0↦x}] $ p0))

Γ ⊢i AC.[□↦ex , p] $ p0 ---> exists_quantify x (AC.[□↦p^{evar:0↦x}] $ p0) using (ExGen := {[x]}, SVSubst := ∅, KT := false, FP := {[p0 ↾ Prf]} ∪ frames_of_AC AC)
Σ: Signature
Γ: Theory
AC: Application_context
p0: Pattern
Prf: well_formed p0
p: Pattern
x: evar
Hx: evar_is_fresh_in x (AC.[□↦p] $ p0)
Hwf: well_formed (ex , p) = true
IH1: Γ ⊢i AC.[□↦ex , p] ---> exists_quantify x AC.[□↦p^{evar:0↦x}] using (ExGen := {[x]}, SVSubst := ∅, KT := false, FP := frames_of_AC AC)
IH2: Γ ⊢i exists_quantify x AC.[□↦p^{evar:0↦x}] ---> AC.[□↦ex , p] using (ExGen := {[x]}, SVSubst := ∅, KT := false, FP := frames_of_AC AC)
Hwfex: well_formed (ex , AC.[□↦p])
Hxfr1: evar_is_fresh_in x AC.[□↦p]
Hxfrp: evar_is_fresh_in x p
HxAC: x ∉ AC_free_evars AC
Hwf': well_formed (exists_quantify x AC.[□↦p^{evar:0↦x}])
Hwfeo: well_formed p^{evar:0↦x}
Hwf'p0: well_formed (exists_quantify x (AC.[□↦p^{evar:0↦x}] $ p0))
Γ ⊢i exists_quantify x (AC.[□↦p^{evar:0↦x}] $ p0) ---> AC.[□↦ex , p] $ p0 using (ExGen := {[x]}, SVSubst := ∅, KT := false, FP := {[p0 ↾ Prf]} ∪ frames_of_AC AC)
Σ: Signature
Γ: Theory
AC: Application_context
p0: Pattern
Prf: well_formed p0
p: Pattern
x: evar
Hx: evar_is_fresh_in x (AC.[□↦p] $ p0)
Hwf: well_formed (ex , p) = true
IH1: Γ ⊢i AC.[□↦ex , p] ---> exists_quantify x AC.[□↦p^{evar:0↦x}] using (ExGen := {[x]}, SVSubst := ∅, KT := false, FP := frames_of_AC AC)
IH2: Γ ⊢i exists_quantify x AC.[□↦p^{evar:0↦x}] ---> AC.[□↦ex , p] using (ExGen := {[x]}, SVSubst := ∅, KT := false, FP := frames_of_AC AC)
Hwfex: well_formed (ex , AC.[□↦p])
Hxfr1: evar_is_fresh_in x AC.[□↦p]
Hxfrp: evar_is_fresh_in x p
HxAC: x ∉ AC_free_evars AC
Hwf': well_formed (exists_quantify x AC.[□↦p^{evar:0↦x}])
Hwfeo: well_formed p^{evar:0↦x}
Hwf'p0: well_formed (exists_quantify x (AC.[□↦p^{evar:0↦x}] $ p0))

Γ ⊢i AC.[□↦ex , p] $ p0 ---> exists_quantify x (AC.[□↦p^{evar:0↦x}] $ p0) using (ExGen := {[x]}, SVSubst := ∅, KT := false, FP := {[p0 ↾ Prf]} ∪ frames_of_AC AC)
Σ: Signature
Γ: Theory
AC: Application_context
p0: Pattern
Prf: well_formed p0
p: Pattern
x: evar
Hx: evar_is_fresh_in x (AC.[□↦p] $ p0)
Hwf: well_formed (ex , p) = true
IH1: Γ ⊢i AC.[□↦ex , p] ---> exists_quantify x AC.[□↦p^{evar:0↦x}] using (ExGen := {[x]}, SVSubst := ∅, KT := false, FP := frames_of_AC AC)
IH2: Γ ⊢i exists_quantify x AC.[□↦p^{evar:0↦x}] ---> AC.[□↦ex , p] using (ExGen := {[x]}, SVSubst := ∅, KT := false, FP := frames_of_AC AC)
Hwfex: well_formed (ex , AC.[□↦p])
Hxfr1: evar_is_fresh_in x AC.[□↦p]
Hxfrp: evar_is_fresh_in x p
HxAC: x ∉ AC_free_evars AC
Hwf': well_formed (exists_quantify x AC.[□↦p^{evar:0↦x}])
Hwfeo: well_formed p^{evar:0↦x}
Hwf'p0: well_formed (exists_quantify x (AC.[□↦p^{evar:0↦x}] $ p0))
H: Γ ⊢i AC.[□↦ex , p] ---> exists_quantify x AC.[□↦p^{evar:0↦x}] using (ExGen := {[x]}, SVSubst := ∅, KT := false, FP := frames_of_AC AC)

Γ ⊢i AC.[□↦ex , p] $ p0 ---> exists_quantify x (AC.[□↦p^{evar:0↦x}] $ p0) using (ExGen := {[x]}, SVSubst := ∅, KT := false, FP := {[p0 ↾ Prf]} ∪ frames_of_AC AC)
Σ: Signature
Γ: Theory
AC: Application_context
p0: Pattern
Prf: well_formed p0
p: Pattern
x: evar
Hx: evar_is_fresh_in x (AC.[□↦p] $ p0)
Hwf: well_formed (ex , p) = true
IH1: Γ ⊢i AC.[□↦ex , p] ---> exists_quantify x AC.[□↦p^{evar:0↦x}] using (ExGen := {[x]}, SVSubst := ∅, KT := false, FP := {[p0 ↾ Prf]} ∪ frames_of_AC AC)
IH2: Γ ⊢i exists_quantify x AC.[□↦p^{evar:0↦x}] ---> AC.[□↦ex , p] using (ExGen := {[x]}, SVSubst := ∅, KT := false, FP := frames_of_AC AC)
Hwfex: well_formed (ex , AC.[□↦p])
Hxfr1: evar_is_fresh_in x AC.[□↦p]
Hxfrp: evar_is_fresh_in x p
HxAC: x ∉ AC_free_evars AC
Hwf': well_formed (exists_quantify x AC.[□↦p^{evar:0↦x}])
Hwfeo: well_formed p^{evar:0↦x}
Hwf'p0: well_formed (exists_quantify x (AC.[□↦p^{evar:0↦x}] $ p0))
H: Γ ⊢i AC.[□↦ex , p] ---> exists_quantify x AC.[□↦p^{evar:0↦x}] using (ExGen := {[x]}, SVSubst := ∅, KT := false, FP := frames_of_AC AC)

Γ ⊢i AC.[□↦ex , p] $ p0 ---> exists_quantify x (AC.[□↦p^{evar:0↦x}] $ p0) using (ExGen := {[x]}, SVSubst := ∅, KT := false, FP := {[p0 ↾ Prf]} ∪ frames_of_AC AC)
Σ: Signature
Γ: Theory
AC: Application_context
p0: Pattern
Prf: well_formed p0
p: Pattern
x: evar
Hx: evar_is_fresh_in x (AC.[□↦p] $ p0)
Hwf: well_formed (ex , p) = true
IH1: Γ ⊢i AC.[□↦ex , p] $ p0 ---> exists_quantify x AC.[□↦p^{evar:0↦x}] $ p0 using (ExGen := {[x]}, SVSubst := ∅, KT := false, FP := {[p0 ↾ Prf]} ∪ frames_of_AC AC)
IH2: Γ ⊢i exists_quantify x AC.[□↦p^{evar:0↦x}] ---> AC.[□↦ex , p] using (ExGen := {[x]}, SVSubst := ∅, KT := false, FP := frames_of_AC AC)
Hwfex: well_formed (ex , AC.[□↦p])
Hxfr1: evar_is_fresh_in x AC.[□↦p]
Hxfrp: evar_is_fresh_in x p
HxAC: x ∉ AC_free_evars AC
Hwf': well_formed (exists_quantify x AC.[□↦p^{evar:0↦x}])
Hwfeo: well_formed p^{evar:0↦x}
Hwf'p0: well_formed (exists_quantify x (AC.[□↦p^{evar:0↦x}] $ p0))
H: Γ ⊢i AC.[□↦ex , p] ---> exists_quantify x AC.[□↦p^{evar:0↦x}] using (ExGen := {[x]}, SVSubst := ∅, KT := false, FP := frames_of_AC AC)

Γ ⊢i AC.[□↦ex , p] $ p0 ---> exists_quantify x (AC.[□↦p^{evar:0↦x}] $ p0) using (ExGen := {[x]}, SVSubst := ∅, KT := false, FP := {[p0 ↾ Prf]} ∪ frames_of_AC AC)
Σ: Signature
Γ: Theory
AC: Application_context
p0: Pattern
Prf: well_formed p0
p: Pattern
x: evar
Hx: evar_is_fresh_in x (AC.[□↦p] $ p0)
Hwf: well_formed (ex , p) = true
IH1: Γ ⊢i AC.[□↦ex , p] ---> exists_quantify x AC.[□↦p^{evar:0↦x}] using (ExGen := {[x]}, SVSubst := ∅, KT := false, FP := {[p0 ↾ Prf]} ∪ frames_of_AC AC)
IH2: Γ ⊢i exists_quantify x AC.[□↦p^{evar:0↦x}] ---> AC.[□↦ex , p] using (ExGen := {[x]}, SVSubst := ∅, KT := false, FP := frames_of_AC AC)
Hwfex: well_formed (ex , AC.[□↦p])
Hxfr1: evar_is_fresh_in x AC.[□↦p]
Hxfrp: evar_is_fresh_in x p
HxAC: x ∉ AC_free_evars AC
Hwf': well_formed (exists_quantify x AC.[□↦p^{evar:0↦x}])
Hwfeo: well_formed p^{evar:0↦x}
Hwf'p0: well_formed (exists_quantify x (AC.[□↦p^{evar:0↦x}] $ p0))
H: Γ ⊢i AC.[□↦ex , p] ---> exists_quantify x AC.[□↦p^{evar:0↦x}] using (ExGen := {[x]}, SVSubst := ∅, KT := false, FP := frames_of_AC AC)
ProofInfoLe (ExGen := ∅, SVSubst := ∅, KT := false, FP := {[p0 ↾ Prf]}) (ExGen := {[x]}, SVSubst := ∅, KT := false, FP := {[p0 ↾ Prf]} ∪ frames_of_AC AC)
Σ: Signature
Γ: Theory
AC: Application_context
p0: Pattern
Prf: well_formed p0
p: Pattern
x: evar
Hx: evar_is_fresh_in x (AC.[□↦p] $ p0)
Hwf: well_formed (ex , p) = true
IH1: Γ ⊢i AC.[□↦ex , p] ---> exists_quantify x AC.[□↦p^{evar:0↦x}] using (ExGen := {[x]}, SVSubst := ∅, KT := false, FP := {[p0 ↾ Prf]} ∪ frames_of_AC AC)
IH2: Γ ⊢i exists_quantify x AC.[□↦p^{evar:0↦x}] ---> AC.[□↦ex , p] using (ExGen := {[x]}, SVSubst := ∅, KT := false, FP := frames_of_AC AC)
Hwfex: well_formed (ex , AC.[□↦p])
Hxfr1: evar_is_fresh_in x AC.[□↦p]
Hxfrp: evar_is_fresh_in x p
HxAC: x ∉ AC_free_evars AC
Hwf': well_formed (exists_quantify x AC.[□↦p^{evar:0↦x}])
Hwfeo: well_formed p^{evar:0↦x}
Hwf'p0: well_formed (exists_quantify x (AC.[□↦p^{evar:0↦x}] $ p0))
H: Γ ⊢i AC.[□↦ex , p] ---> exists_quantify x AC.[□↦p^{evar:0↦x}] using (ExGen := {[x]}, SVSubst := ∅, KT := false, FP := frames_of_AC AC)

ProofInfoLe (ExGen := ∅, SVSubst := ∅, KT := false, FP := {[p0 ↾ Prf]}) (ExGen := {[x]}, SVSubst := ∅, KT := false, FP := {[p0 ↾ Prf]} ∪ frames_of_AC AC)
try_solve_pile.
Σ: Signature
Γ: Theory
AC: Application_context
p0: Pattern
Prf: well_formed p0
p: Pattern
x: evar
Hx: evar_is_fresh_in x (AC.[□↦p] $ p0)
Hwf: well_formed (ex , p) = true
IH1: Γ ⊢i AC.[□↦ex , p] $ p0 ---> exists_quantify x AC.[□↦p^{evar:0↦x}] $ p0 using (ExGen := {[x]}, SVSubst := ∅, KT := false, FP := {[p0 ↾ Prf]} ∪ frames_of_AC AC)
IH2: Γ ⊢i exists_quantify x AC.[□↦p^{evar:0↦x}] ---> AC.[□↦ex , p] using (ExGen := {[x]}, SVSubst := ∅, KT := false, FP := frames_of_AC AC)
Hwfex: well_formed (ex , AC.[□↦p])
Hxfr1: evar_is_fresh_in x AC.[□↦p]
Hxfrp: evar_is_fresh_in x p
HxAC: x ∉ AC_free_evars AC
Hwf': well_formed (exists_quantify x AC.[□↦p^{evar:0↦x}])
Hwfeo: well_formed p^{evar:0↦x}
Hwf'p0: well_formed (exists_quantify x (AC.[□↦p^{evar:0↦x}] $ p0))
H: Γ ⊢i AC.[□↦ex , p] ---> exists_quantify x AC.[□↦p^{evar:0↦x}] using (ExGen := {[x]}, SVSubst := ∅, KT := false, FP := frames_of_AC AC)

Γ ⊢i AC.[□↦ex , p] $ p0 ---> exists_quantify x (AC.[□↦p^{evar:0↦x}] $ p0) using (ExGen := {[x]}, SVSubst := ∅, KT := false, FP := {[p0 ↾ Prf]} ∪ frames_of_AC AC)
Σ: Signature
Γ: Theory
AC: Application_context
p0: Pattern
Prf: well_formed p0
p: Pattern
x: evar
Hx: evar_is_fresh_in x (AC.[□↦p] $ p0)
Hwf: well_formed (ex , p) = true
IH1: Γ ⊢i AC.[□↦ex , p] $ p0 ---> exists_quantify x AC.[□↦p^{evar:0↦x}] $ p0 using (ExGen := {[x]}, SVSubst := ∅, KT := false, FP := {[p0 ↾ Prf]} ∪ frames_of_AC AC)
IH2: Γ ⊢i exists_quantify x AC.[□↦p^{evar:0↦x}] ---> AC.[□↦ex , p] using (ExGen := {[x]}, SVSubst := ∅, KT := false, FP := frames_of_AC AC)
Hwfex: well_formed (ex , AC.[□↦p])
Hxfr1: evar_is_fresh_in x AC.[□↦p]
Hxfrp: evar_is_fresh_in x p
HxAC: x ∉ AC_free_evars AC
Hwf': well_formed (exists_quantify x AC.[□↦p^{evar:0↦x}])
Hwfeo: well_formed p^{evar:0↦x}
Hwf'p0: well_formed (exists_quantify x (AC.[□↦p^{evar:0↦x}] $ p0))
H: Γ ⊢i AC.[□↦ex , p] ---> exists_quantify x AC.[□↦p^{evar:0↦x}] using (ExGen := {[x]}, SVSubst := ∅, KT := false, FP := frames_of_AC AC)

well_formed (AC.[□↦ex , p] $ p0)
Σ: Signature
Γ: Theory
AC: Application_context
p0: Pattern
Prf: well_formed p0
p: Pattern
x: evar
Hx: evar_is_fresh_in x (AC.[□↦p] $ p0)
Hwf: well_formed (ex , p) = true
IH1: Γ ⊢i AC.[□↦ex , p] $ p0 ---> exists_quantify x AC.[□↦p^{evar:0↦x}] $ p0 using (ExGen := {[x]}, SVSubst := ∅, KT := false, FP := {[p0 ↾ Prf]} ∪ frames_of_AC AC)
IH2: Γ ⊢i exists_quantify x AC.[□↦p^{evar:0↦x}] ---> AC.[□↦ex , p] using (ExGen := {[x]}, SVSubst := ∅, KT := false, FP := frames_of_AC AC)
Hwfex: well_formed (ex , AC.[□↦p])
Hxfr1: evar_is_fresh_in x AC.[□↦p]
Hxfrp: evar_is_fresh_in x p
HxAC: x ∉ AC_free_evars AC
Hwf': well_formed (exists_quantify x AC.[□↦p^{evar:0↦x}])
Hwfeo: well_formed p^{evar:0↦x}
Hwf'p0: well_formed (exists_quantify x (AC.[□↦p^{evar:0↦x}] $ p0))
H: Γ ⊢i AC.[□↦ex , p] ---> exists_quantify x AC.[□↦p^{evar:0↦x}] using (ExGen := {[x]}, SVSubst := ∅, KT := false, FP := frames_of_AC AC)
well_formed ?B
Σ: Signature
Γ: Theory
AC: Application_context
p0: Pattern
Prf: well_formed p0
p: Pattern
x: evar
Hx: evar_is_fresh_in x (AC.[□↦p] $ p0)
Hwf: well_formed (ex , p) = true
IH1: Γ ⊢i AC.[□↦ex , p] $ p0 ---> exists_quantify x AC.[□↦p^{evar:0↦x}] $ p0 using (ExGen := {[x]}, SVSubst := ∅, KT := false, FP := {[p0 ↾ Prf]} ∪ frames_of_AC AC)
IH2: Γ ⊢i exists_quantify x AC.[□↦p^{evar:0↦x}] ---> AC.[□↦ex , p] using (ExGen := {[x]}, SVSubst := ∅, KT := false, FP := frames_of_AC AC)
Hwfex: well_formed (ex , AC.[□↦p])
Hxfr1: evar_is_fresh_in x AC.[□↦p]
Hxfrp: evar_is_fresh_in x p
HxAC: x ∉ AC_free_evars AC
Hwf': well_formed (exists_quantify x AC.[□↦p^{evar:0↦x}])
Hwfeo: well_formed p^{evar:0↦x}
Hwf'p0: well_formed (exists_quantify x (AC.[□↦p^{evar:0↦x}] $ p0))
H: Γ ⊢i AC.[□↦ex , p] ---> exists_quantify x AC.[□↦p^{evar:0↦x}] using (ExGen := {[x]}, SVSubst := ∅, KT := false, FP := frames_of_AC AC)
well_formed (exists_quantify x (AC.[□↦p^{evar:0↦x}] $ p0))
Σ: Signature
Γ: Theory
AC: Application_context
p0: Pattern
Prf: well_formed p0
p: Pattern
x: evar
Hx: evar_is_fresh_in x (AC.[□↦p] $ p0)
Hwf: well_formed (ex , p) = true
IH1: Γ ⊢i AC.[□↦ex , p] $ p0 ---> exists_quantify x AC.[□↦p^{evar:0↦x}] $ p0 using (ExGen := {[x]}, SVSubst := ∅, KT := false, FP := {[p0 ↾ Prf]} ∪ frames_of_AC AC)
IH2: Γ ⊢i exists_quantify x AC.[□↦p^{evar:0↦x}] ---> AC.[□↦ex , p] using (ExGen := {[x]}, SVSubst := ∅, KT := false, FP := frames_of_AC AC)
Hwfex: well_formed (ex , AC.[□↦p])
Hxfr1: evar_is_fresh_in x AC.[□↦p]
Hxfrp: evar_is_fresh_in x p
HxAC: x ∉ AC_free_evars AC
Hwf': well_formed (exists_quantify x AC.[□↦p^{evar:0↦x}])
Hwfeo: well_formed p^{evar:0↦x}
Hwf'p0: well_formed (exists_quantify x (AC.[□↦p^{evar:0↦x}] $ p0))
H: Γ ⊢i AC.[□↦ex , p] ---> exists_quantify x AC.[□↦p^{evar:0↦x}] using (ExGen := {[x]}, SVSubst := ∅, KT := false, FP := frames_of_AC AC)
Γ ⊢i AC.[□↦ex , p] $ p0 ---> ?B using (ExGen := {[x]}, SVSubst := ∅, KT := false, FP := {[p0 ↾ Prf]} ∪ frames_of_AC AC)
Σ: Signature
Γ: Theory
AC: Application_context
p0: Pattern
Prf: well_formed p0
p: Pattern
x: evar
Hx: evar_is_fresh_in x (AC.[□↦p] $ p0)
Hwf: well_formed (ex , p) = true
IH1: Γ ⊢i AC.[□↦ex , p] $ p0 ---> exists_quantify x AC.[□↦p^{evar:0↦x}] $ p0 using (ExGen := {[x]}, SVSubst := ∅, KT := false, FP := {[p0 ↾ Prf]} ∪ frames_of_AC AC)
IH2: Γ ⊢i exists_quantify x AC.[□↦p^{evar:0↦x}] ---> AC.[□↦ex , p] using (ExGen := {[x]}, SVSubst := ∅, KT := false, FP := frames_of_AC AC)
Hwfex: well_formed (ex , AC.[□↦p])
Hxfr1: evar_is_fresh_in x AC.[□↦p]
Hxfrp: evar_is_fresh_in x p
HxAC: x ∉ AC_free_evars AC
Hwf': well_formed (exists_quantify x AC.[□↦p^{evar:0↦x}])
Hwfeo: well_formed p^{evar:0↦x}
Hwf'p0: well_formed (exists_quantify x (AC.[□↦p^{evar:0↦x}] $ p0))
H: Γ ⊢i AC.[□↦ex , p] ---> exists_quantify x AC.[□↦p^{evar:0↦x}] using (ExGen := {[x]}, SVSubst := ∅, KT := false, FP := frames_of_AC AC)
Γ ⊢i ?B ---> exists_quantify x (AC.[□↦p^{evar:0↦x}] $ p0) using (ExGen := {[x]}, SVSubst := ∅, KT := false, FP := {[p0 ↾ Prf]} ∪ frames_of_AC AC)
Σ: Signature
Γ: Theory
AC: Application_context
p0: Pattern
Prf: well_formed p0
p: Pattern
x: evar
Hx: evar_is_fresh_in x (AC.[□↦p] $ p0)
Hwf: well_formed (ex , p) = true
IH1: Γ ⊢i AC.[□↦ex , p] $ p0 ---> exists_quantify x AC.[□↦p^{evar:0↦x}] $ p0 using (ExGen := {[x]}, SVSubst := ∅, KT := false, FP := {[p0 ↾ Prf]} ∪ frames_of_AC AC)
IH2: Γ ⊢i exists_quantify x AC.[□↦p^{evar:0↦x}] ---> AC.[□↦ex , p] using (ExGen := {[x]}, SVSubst := ∅, KT := false, FP := frames_of_AC AC)
Hwfex: well_formed (ex , AC.[□↦p])
Hxfr1: evar_is_fresh_in x AC.[□↦p]
Hxfrp: evar_is_fresh_in x p
HxAC: x ∉ AC_free_evars AC
Hwf': well_formed (exists_quantify x AC.[□↦p^{evar:0↦x}])
Hwfeo: well_formed p^{evar:0↦x}
Hwf'p0: well_formed (exists_quantify x (AC.[□↦p^{evar:0↦x}] $ p0))
H: Γ ⊢i AC.[□↦ex , p] ---> exists_quantify x AC.[□↦p^{evar:0↦x}] using (ExGen := {[x]}, SVSubst := ∅, KT := false, FP := frames_of_AC AC)

well_formed (AC.[□↦ex , p] $ p0)
Σ: Signature
Γ: Theory
AC: Application_context
p0: Pattern
Prf: well_formed p0
p: Pattern
x: evar
Hx: evar_is_fresh_in x (AC.[□↦p] $ p0)
Hwf: well_formed (ex , p) = true
IH1: Γ ⊢i AC.[□↦ex , p] $ p0 ---> exists_quantify x AC.[□↦p^{evar:0↦x}] $ p0 using (ExGen := {[x]}, SVSubst := ∅, KT := false, FP := {[p0 ↾ Prf]} ∪ frames_of_AC AC)
IH2: Γ ⊢i exists_quantify x AC.[□↦p^{evar:0↦x}] ---> AC.[□↦ex , p] using (ExGen := {[x]}, SVSubst := ∅, KT := false, FP := frames_of_AC AC)
Hwfex: well_formed (ex , AC.[□↦p])
Hxfr1: evar_is_fresh_in x AC.[□↦p]
Hxfrp: evar_is_fresh_in x p
HxAC: x ∉ AC_free_evars AC
Hwf': well_formed (exists_quantify x AC.[□↦p^{evar:0↦x}])
Hwfeo: well_formed p^{evar:0↦x}
Hwf'p0: well_formed (exists_quantify x (AC.[□↦p^{evar:0↦x}] $ p0))
H: Γ ⊢i AC.[□↦ex , p] ---> exists_quantify x AC.[□↦p^{evar:0↦x}] using (ExGen := {[x]}, SVSubst := ∅, KT := false, FP := frames_of_AC AC)
well_formed (exists_quantify x AC.[□↦p^{evar:0↦x}] $ p0)
Σ: Signature
Γ: Theory
AC: Application_context
p0: Pattern
Prf: well_formed p0
p: Pattern
x: evar
Hx: evar_is_fresh_in x (AC.[□↦p] $ p0)
Hwf: well_formed (ex , p) = true
IH1: Γ ⊢i AC.[□↦ex , p] $ p0 ---> exists_quantify x AC.[□↦p^{evar:0↦x}] $ p0 using (ExGen := {[x]}, SVSubst := ∅, KT := false, FP := {[p0 ↾ Prf]} ∪ frames_of_AC AC)
IH2: Γ ⊢i exists_quantify x AC.[□↦p^{evar:0↦x}] ---> AC.[□↦ex , p] using (ExGen := {[x]}, SVSubst := ∅, KT := false, FP := frames_of_AC AC)
Hwfex: well_formed (ex , AC.[□↦p])
Hxfr1: evar_is_fresh_in x AC.[□↦p]
Hxfrp: evar_is_fresh_in x p
HxAC: x ∉ AC_free_evars AC
Hwf': well_formed (exists_quantify x AC.[□↦p^{evar:0↦x}])
Hwfeo: well_formed p^{evar:0↦x}
Hwf'p0: well_formed (exists_quantify x (AC.[□↦p^{evar:0↦x}] $ p0))
H: Γ ⊢i AC.[□↦ex , p] ---> exists_quantify x AC.[□↦p^{evar:0↦x}] using (ExGen := {[x]}, SVSubst := ∅, KT := false, FP := frames_of_AC AC)
well_formed (exists_quantify x (AC.[□↦p^{evar:0↦x}] $ p0))
Σ: Signature
Γ: Theory
AC: Application_context
p0: Pattern
Prf: well_formed p0
p: Pattern
x: evar
Hx: evar_is_fresh_in x (AC.[□↦p] $ p0)
Hwf: well_formed (ex , p) = true
IH1: Γ ⊢i AC.[□↦ex , p] $ p0 ---> exists_quantify x AC.[□↦p^{evar:0↦x}] $ p0 using (ExGen := {[x]}, SVSubst := ∅, KT := false, FP := {[p0 ↾ Prf]} ∪ frames_of_AC AC)
IH2: Γ ⊢i exists_quantify x AC.[□↦p^{evar:0↦x}] ---> AC.[□↦ex , p] using (ExGen := {[x]}, SVSubst := ∅, KT := false, FP := frames_of_AC AC)
Hwfex: well_formed (ex , AC.[□↦p])
Hxfr1: evar_is_fresh_in x AC.[□↦p]
Hxfrp: evar_is_fresh_in x p
HxAC: x ∉ AC_free_evars AC
Hwf': well_formed (exists_quantify x AC.[□↦p^{evar:0↦x}])
Hwfeo: well_formed p^{evar:0↦x}
Hwf'p0: well_formed (exists_quantify x (AC.[□↦p^{evar:0↦x}] $ p0))
H: Γ ⊢i AC.[□↦ex , p] ---> exists_quantify x AC.[□↦p^{evar:0↦x}] using (ExGen := {[x]}, SVSubst := ∅, KT := false, FP := frames_of_AC AC)
Γ ⊢i exists_quantify x AC.[□↦p^{evar:0↦x}] $ p0 ---> exists_quantify x (AC.[□↦p^{evar:0↦x}] $ p0) using (ExGen := {[x]}, SVSubst := ∅, KT := false, FP := {[p0 ↾ Prf]} ∪ frames_of_AC AC)
Σ: Signature
Γ: Theory
AC: Application_context
p0: Pattern
Prf: well_formed p0
p: Pattern
x: evar
Hx: evar_is_fresh_in x (AC.[□↦p] $ p0)
Hwf: well_formed (ex , p) = true
IH1: Γ ⊢i AC.[□↦ex , p] $ p0 ---> exists_quantify x AC.[□↦p^{evar:0↦x}] $ p0 using (ExGen := {[x]}, SVSubst := ∅, KT := false, FP := {[p0 ↾ Prf]} ∪ frames_of_AC AC)
IH2: Γ ⊢i exists_quantify x AC.[□↦p^{evar:0↦x}] ---> AC.[□↦ex , p] using (ExGen := {[x]}, SVSubst := ∅, KT := false, FP := frames_of_AC AC)
Hwfex: well_formed (ex , AC.[□↦p])
Hxfr1: evar_is_fresh_in x AC.[□↦p]
Hxfrp: evar_is_fresh_in x p
HxAC: x ∉ AC_free_evars AC
Hwf': well_formed (exists_quantify x AC.[□↦p^{evar:0↦x}])
Hwfeo: well_formed p^{evar:0↦x}
Hwf'p0: well_formed (exists_quantify x (AC.[□↦p^{evar:0↦x}] $ p0))
H: Γ ⊢i AC.[□↦ex , p] ---> exists_quantify x AC.[□↦p^{evar:0↦x}] using (ExGen := {[x]}, SVSubst := ∅, KT := false, FP := frames_of_AC AC)

Γ ⊢i exists_quantify x AC.[□↦p^{evar:0↦x}] $ p0 ---> exists_quantify x (AC.[□↦p^{evar:0↦x}] $ p0) using (ExGen := {[x]}, SVSubst := ∅, KT := false, FP := {[p0 ↾ Prf]} ∪ frames_of_AC AC)
Σ: Signature
Γ: Theory
AC: Application_context
p0: Pattern
Prf: well_formed p0
p: Pattern
x: evar
Hx: evar_is_fresh_in x (AC.[□↦p] $ p0)
Hwf: well_formed (ex , p) = true
p': Pattern
Heqp': p' = AC.[□↦p^{evar:0↦x}]
IH1: Γ ⊢i AC.[□↦ex , p] $ p0 ---> exists_quantify x p' $ p0 using (ExGen := {[x]}, SVSubst := ∅, KT := false, FP := {[p0 ↾ Prf]} ∪ frames_of_AC AC)
IH2: Γ ⊢i exists_quantify x p' ---> AC.[□↦ex , p] using (ExGen := {[x]}, SVSubst := ∅, KT := false, FP := frames_of_AC AC)
Hwfex: well_formed (ex , AC.[□↦p])
Hxfr1: evar_is_fresh_in x AC.[□↦p]
Hxfrp: evar_is_fresh_in x p
HxAC: x ∉ AC_free_evars AC
Hwf': well_formed (exists_quantify x p')
Hwfeo: well_formed p^{evar:0↦x}
Hwf'p0: well_formed (exists_quantify x (p' $ p0))
H: Γ ⊢i AC.[□↦ex , p] ---> exists_quantify x p' using (ExGen := {[x]}, SVSubst := ∅, KT := false, FP := frames_of_AC AC)

Γ ⊢i exists_quantify x p' $ p0 ---> exists_quantify x (p' $ p0) using (ExGen := {[x]}, SVSubst := ∅, KT := false, FP := {[p0 ↾ Prf]} ∪ frames_of_AC AC)
Σ: Signature
Γ: Theory
AC: Application_context
p0: Pattern
Prf: well_formed p0
p: Pattern
x: evar
Hx: evar_is_fresh_in x (AC.[□↦p] $ p0)
Hwf: well_formed (ex , p) = true
p': Pattern
Heqp': p' = AC.[□↦p^{evar:0↦x}]
IH1: Γ ⊢i AC.[□↦ex , p] $ p0 ---> exists_quantify x p' $ p0 using (ExGen := {[x]}, SVSubst := ∅, KT := false, FP := {[p0 ↾ Prf]} ∪ frames_of_AC AC)
IH2: Γ ⊢i exists_quantify x p' ---> AC.[□↦ex , p] using (ExGen := {[x]}, SVSubst := ∅, KT := false, FP := frames_of_AC AC)
Hwfex: well_formed (ex , AC.[□↦p])
Hxfr1: evar_is_fresh_in x AC.[□↦p]
Hxfrp: evar_is_fresh_in x p
HxAC: x ∉ AC_free_evars AC
Hwf': well_formed (exists_quantify x p')
Hwfeo: well_formed p^{evar:0↦x}
Hwf'p0: well_formed (exists_quantify x (p' $ p0))
H: Γ ⊢i AC.[□↦ex , p] ---> exists_quantify x p' using (ExGen := {[x]}, SVSubst := ∅, KT := false, FP := frames_of_AC AC)

Γ ⊢i (ex , p'^{{evar:x↦0}}) $ p0 ---> (ex , (p' $ p0)^{{evar:x↦0}}) using (ExGen := {[x]}, SVSubst := ∅, KT := false, FP := {[p0 ↾ Prf]} ∪ frames_of_AC AC)
Σ: Signature
Γ: Theory
AC: Application_context
p0: Pattern
Prf: well_formed p0
p: Pattern
x: evar
Hx: evar_is_fresh_in x (AC.[□↦p] $ p0)
Hwf: well_formed (ex , p) = true
p': Pattern
Heqp': p' = AC.[□↦p^{evar:0↦x}]
IH1: Γ ⊢i AC.[□↦ex , p] $ p0 ---> exists_quantify x p' $ p0 using (ExGen := {[x]}, SVSubst := ∅, KT := false, FP := {[p0 ↾ Prf]} ∪ frames_of_AC AC)
IH2: Γ ⊢i exists_quantify x p' ---> AC.[□↦ex , p] using (ExGen := {[x]}, SVSubst := ∅, KT := false, FP := frames_of_AC AC)
Hwfex: well_formed (ex , AC.[□↦p])
Hxfr1: evar_is_fresh_in x AC.[□↦p]
Hxfrp: evar_is_fresh_in x p
HxAC: x ∉ AC_free_evars AC
Hwf': well_formed (exists_quantify x p')
Hwfeo: well_formed p^{evar:0↦x}
Hwf'p0: well_formed (exists_quantify x (p' $ p0))
H: Γ ⊢i AC.[□↦ex , p] ---> exists_quantify x p' using (ExGen := {[x]}, SVSubst := ∅, KT := false, FP := frames_of_AC AC)

Γ ⊢i (ex , p'^{{evar:x↦0}}) $ p0 ---> (ex , p'^{{evar:x↦0}} $ p0^{{evar:x↦0}}) using (ExGen := {[x]}, SVSubst := ∅, KT := false, FP := {[p0 ↾ Prf]} ∪ frames_of_AC AC)
Σ: Signature
Γ: Theory
AC: Application_context
p0: Pattern
Prf: well_formed p0
p: Pattern
x: evar
Hx: evar_is_fresh_in x (AC.[□↦p] $ p0)
Hwf: well_formed (ex , p) = true
p': Pattern
Heqp': p' = AC.[□↦p^{evar:0↦x}]
IH1: Γ ⊢i AC.[□↦ex , p] $ p0 ---> exists_quantify x p' $ p0 using (ExGen := {[x]}, SVSubst := ∅, KT := false, FP := {[p0 ↾ Prf]} ∪ frames_of_AC AC)
IH2: Γ ⊢i exists_quantify x p' ---> AC.[□↦ex , p] using (ExGen := {[x]}, SVSubst := ∅, KT := false, FP := frames_of_AC AC)
Hwfex: well_formed (ex , AC.[□↦p])
Hxfr1: evar_is_fresh_in x AC.[□↦p]
Hxfrp: evar_is_fresh_in x p
HxAC: x ∉ AC_free_evars AC
Hwf': well_formed (exists_quantify x p')
Hwfeo: well_formed p^{evar:0↦x}
Hwf'p0: well_formed (exists_quantify x (p' $ p0))
H: Γ ⊢i AC.[□↦ex , p] ---> exists_quantify x p' using (ExGen := {[x]}, SVSubst := ∅, KT := false, FP := frames_of_AC AC)

evar_is_fresh_in x p0
Σ: Signature
Γ: Theory
AC: Application_context
p0: Pattern
Prf: well_formed p0
p: Pattern
x: evar
Hx: evar_is_fresh_in x (AC.[□↦p] $ p0)
Hwf: well_formed (ex , p) = true
p': Pattern
Heqp': p' = AC.[□↦p^{evar:0↦x}]
IH1: Γ ⊢i AC.[□↦ex , p] $ p0 ---> exists_quantify x p' $ p0 using (ExGen := {[x]}, SVSubst := ∅, KT := false, FP := {[p0 ↾ Prf]} ∪ frames_of_AC AC)
IH2: Γ ⊢i exists_quantify x p' ---> AC.[□↦ex , p] using (ExGen := {[x]}, SVSubst := ∅, KT := false, FP := frames_of_AC AC)
Hwfex: well_formed (ex , AC.[□↦p])
Hxfr1: evar_is_fresh_in x AC.[□↦p]
Hxfrp: evar_is_fresh_in x p
HxAC: x ∉ AC_free_evars AC
Hwf': well_formed (exists_quantify x p')
Hwfeo: well_formed p^{evar:0↦x}
Hwf'p0: well_formed (exists_quantify x (p' $ p0))
H: Γ ⊢i AC.[□↦ex , p] ---> exists_quantify x p' using (ExGen := {[x]}, SVSubst := ∅, KT := false, FP := frames_of_AC AC)
Γ ⊢i (ex , p'^{{evar:x↦0}}) $ p0 ---> (ex , p'^{{evar:x↦0}} $ p0) using (ExGen := {[x]}, SVSubst := ∅, KT := false, FP := {[p0 ↾ Prf]} ∪ frames_of_AC AC)
Σ: Signature
Γ: Theory
AC: Application_context
p0: Pattern
Prf: well_formed p0
p: Pattern
x: evar
Hx: evar_is_fresh_in x (AC.[□↦p] $ p0)
Hwf: well_formed (ex , p) = true
p': Pattern
Heqp': p' = AC.[□↦p^{evar:0↦x}]
IH1: Γ ⊢i AC.[□↦ex , p] $ p0 ---> exists_quantify x p' $ p0 using (ExGen := {[x]}, SVSubst := ∅, KT := false, FP := {[p0 ↾ Prf]} ∪ frames_of_AC AC)
IH2: Γ ⊢i exists_quantify x p' ---> AC.[□↦ex , p] using (ExGen := {[x]}, SVSubst := ∅, KT := false, FP := frames_of_AC AC)
Hwfex: well_formed (ex , AC.[□↦p])
Hxfr1: evar_is_fresh_in x AC.[□↦p]
Hxfrp: evar_is_fresh_in x p
HxAC: x ∉ AC_free_evars AC
Hwf': well_formed (exists_quantify x p')
Hwfeo: well_formed p^{evar:0↦x}
Hwf'p0: well_formed (exists_quantify x (p' $ p0))
H: Γ ⊢i AC.[□↦ex , p] ---> exists_quantify x p' using (ExGen := {[x]}, SVSubst := ∅, KT := false, FP := frames_of_AC AC)

evar_is_fresh_in x p0
Σ: Signature
Γ: Theory
AC: Application_context
p0: Pattern
Prf: well_formed p0
p: Pattern
x: evar
Hx: evar_is_fresh_in x (AC.[□↦p] $ p0)
Hwf: well_formed (ex , p) = true
p': Pattern
Heqp': p' = AC.[□↦p^{evar:0↦x}]
IH1: Γ ⊢i AC.[□↦ex , p] $ p0 ---> exists_quantify x p' $ p0 using (ExGen := {[x]}, SVSubst := ∅, KT := false, FP := {[p0 ↾ Prf]} ∪ frames_of_AC AC)
IH2: Γ ⊢i exists_quantify x p' ---> AC.[□↦ex , p] using (ExGen := {[x]}, SVSubst := ∅, KT := false, FP := frames_of_AC AC)
Hwfex: well_formed (ex , AC.[□↦p])
Hxfr1: evar_is_fresh_in x AC.[□↦p]
Hxfrp: evar_is_fresh_in x p
HxAC: x ∉ AC_free_evars AC
Hwf': well_formed (exists_quantify x p')
Hwfeo: well_formed p^{evar:0↦x}
Hwf'p0: well_formed (exists_quantify x (p' $ p0))
H: Γ ⊢i AC.[□↦ex , p] ---> exists_quantify x p' using (ExGen := {[x]}, SVSubst := ∅, KT := false, FP := frames_of_AC AC)

evar_is_fresh_in x (?ϕ₁ $ p0)
apply Hx.
Σ: Signature
Γ: Theory
AC: Application_context
p0: Pattern
Prf: well_formed p0
p: Pattern
x: evar
Hx: evar_is_fresh_in x (AC.[□↦p] $ p0)
Hwf: well_formed (ex , p) = true
p': Pattern
Heqp': p' = AC.[□↦p^{evar:0↦x}]
IH1: Γ ⊢i AC.[□↦ex , p] $ p0 ---> exists_quantify x p' $ p0 using (ExGen := {[x]}, SVSubst := ∅, KT := false, FP := {[p0 ↾ Prf]} ∪ frames_of_AC AC)
IH2: Γ ⊢i exists_quantify x p' ---> AC.[□↦ex , p] using (ExGen := {[x]}, SVSubst := ∅, KT := false, FP := frames_of_AC AC)
Hwfex: well_formed (ex , AC.[□↦p])
Hxfr1: evar_is_fresh_in x AC.[□↦p]
Hxfrp: evar_is_fresh_in x p
HxAC: x ∉ AC_free_evars AC
Hwf': well_formed (exists_quantify x p')
Hwfeo: well_formed p^{evar:0↦x}
Hwf'p0: well_formed (exists_quantify x (p' $ p0))
H: Γ ⊢i AC.[□↦ex , p] ---> exists_quantify x p' using (ExGen := {[x]}, SVSubst := ∅, KT := false, FP := frames_of_AC AC)

Γ ⊢i (ex , p'^{{evar:x↦0}}) $ p0 ---> (ex , p'^{{evar:x↦0}} $ p0) using (ExGen := {[x]}, SVSubst := ∅, KT := false, FP := {[p0 ↾ Prf]} ∪ frames_of_AC AC)
Σ: Signature
Γ: Theory
AC: Application_context
p0: Pattern
Prf: well_formed p0
p: Pattern
x: evar
Hx: evar_is_fresh_in x (AC.[□↦p] $ p0)
Hwf: well_formed (ex , p) = true
p': Pattern
Heqp': p' = AC.[□↦p^{evar:0↦x}]
IH1: Γ ⊢i AC.[□↦ex , p] $ p0 ---> exists_quantify x p' $ p0 using (ExGen := {[x]}, SVSubst := ∅, KT := false, FP := {[p0 ↾ Prf]} ∪ frames_of_AC AC)
IH2: Γ ⊢i exists_quantify x p' ---> AC.[□↦ex , p] using (ExGen := {[x]}, SVSubst := ∅, KT := false, FP := frames_of_AC AC)
Hwfex: well_formed (ex , AC.[□↦p])
Hxfr1: evar_is_fresh_in x AC.[□↦p]
Hxfrp: evar_is_fresh_in x p
HxAC: x ∉ AC_free_evars AC
Hwf': well_formed (exists_quantify x p')
Hwfeo: well_formed p^{evar:0↦x}
Hwf'p0: well_formed (exists_quantify x (p' $ p0))
H: Γ ⊢i AC.[□↦ex , p] ---> exists_quantify x p' using (ExGen := {[x]}, SVSubst := ∅, KT := false, FP := frames_of_AC AC)

Γ ⊢i (ex , p'^{{evar:x↦0}}) $ p0 ---> (ex , p'^{{evar:x↦0}} $ p0) using BasicReasoning
Σ: Signature
Γ: Theory
AC: Application_context
p0: Pattern
Prf: well_formed p0
p: Pattern
x: evar
Hx: evar_is_fresh_in x (AC.[□↦p] $ p0)
Hwf: well_formed (ex , p) = true
p': Pattern
Heqp': p' = AC.[□↦p^{evar:0↦x}]
IH1: Γ ⊢i AC.[□↦ex , p] $ p0 ---> exists_quantify x p' $ p0 using (ExGen := {[x]}, SVSubst := ∅, KT := false, FP := {[p0 ↾ Prf]} ∪ frames_of_AC AC)
IH2: Γ ⊢i exists_quantify x p' ---> AC.[□↦ex , p] using (ExGen := {[x]}, SVSubst := ∅, KT := false, FP := frames_of_AC AC)
Hwfex: well_formed (ex , AC.[□↦p])
Hxfr1: evar_is_fresh_in x AC.[□↦p]
Hxfrp: evar_is_fresh_in x p
HxAC: x ∉ AC_free_evars AC
Hwf': well_formed (exists_quantify x p')
Hwfeo: well_formed p^{evar:0↦x}
Hwf'p0: well_formed (exists_quantify x (p' $ p0))
H: Γ ⊢i AC.[□↦ex , p] ---> exists_quantify x p' using (ExGen := {[x]}, SVSubst := ∅, KT := false, FP := frames_of_AC AC)

well_formed (ex , p'^{{evar:x↦0}})
Σ: Signature
Γ: Theory
AC: Application_context
p0: Pattern
Prf: well_formed p0
p: Pattern
x: evar
Hx: evar_is_fresh_in x (AC.[□↦p] $ p0)
Hwf: well_formed (ex , p) = true
p': Pattern
Heqp': p' = AC.[□↦p^{evar:0↦x}]
IH1: Γ ⊢i AC.[□↦ex , p] $ p0 ---> exists_quantify x p' $ p0 using (ExGen := {[x]}, SVSubst := ∅, KT := false, FP := {[p0 ↾ Prf]} ∪ frames_of_AC AC)
IH2: Γ ⊢i exists_quantify x p' ---> AC.[□↦ex , p] using (ExGen := {[x]}, SVSubst := ∅, KT := false, FP := frames_of_AC AC)
Hwfex: well_formed (ex , AC.[□↦p])
Hxfr1: evar_is_fresh_in x AC.[□↦p]
Hxfrp: evar_is_fresh_in x p
HxAC: x ∉ AC_free_evars AC
Hwf': well_formed (exists_quantify x p')
Hwfeo: well_formed p^{evar:0↦x}
Hwf'p0: well_formed (exists_quantify x (p' $ p0))
H: Γ ⊢i AC.[□↦ex , p] ---> exists_quantify x p' using (ExGen := {[x]}, SVSubst := ∅, KT := false, FP := frames_of_AC AC)
well_formed p0
Σ: Signature
Γ: Theory
AC: Application_context
p0: Pattern
Prf: well_formed p0
p: Pattern
x: evar
Hx: evar_is_fresh_in x (AC.[□↦p] $ p0)
Hwf: well_formed (ex , p) = true
p': Pattern
Heqp': p' = AC.[□↦p^{evar:0↦x}]
IH1: Γ ⊢i AC.[□↦ex , p] $ p0 ---> exists_quantify x p' $ p0 using (ExGen := {[x]}, SVSubst := ∅, KT := false, FP := {[p0 ↾ Prf]} ∪ frames_of_AC AC)
IH2: Γ ⊢i exists_quantify x p' ---> AC.[□↦ex , p] using (ExGen := {[x]}, SVSubst := ∅, KT := false, FP := frames_of_AC AC)
Hwfex: well_formed (ex , AC.[□↦p])
Hxfr1: evar_is_fresh_in x AC.[□↦p]
Hxfrp: evar_is_fresh_in x p
HxAC: x ∉ AC_free_evars AC
Hwf': well_formed (exists_quantify x p')
Hwfeo: well_formed p^{evar:0↦x}
Hwf'p0: well_formed (exists_quantify x (p' $ p0))
H: Γ ⊢i AC.[□↦ex , p] ---> exists_quantify x p' using (ExGen := {[x]}, SVSubst := ∅, KT := false, FP := frames_of_AC AC)

well_formed p0
wf_auto2.
Σ: Signature
Γ: Theory
AC: Application_context
p0: Pattern
Prf: well_formed p0
p: Pattern
x: evar
Hx: evar_is_fresh_in x (AC.[□↦p] $ p0)
Hwf: well_formed (ex , p) = true
IH1: Γ ⊢i AC.[□↦ex , p] ---> exists_quantify x AC.[□↦p^{evar:0↦x}] using (ExGen := {[x]}, SVSubst := ∅, KT := false, FP := frames_of_AC AC)
IH2: Γ ⊢i exists_quantify x AC.[□↦p^{evar:0↦x}] ---> AC.[□↦ex , p] using (ExGen := {[x]}, SVSubst := ∅, KT := false, FP := frames_of_AC AC)
Hwfex: well_formed (ex , AC.[□↦p])
Hxfr1: evar_is_fresh_in x AC.[□↦p]
Hxfrp: evar_is_fresh_in x p
HxAC: x ∉ AC_free_evars AC
Hwf': well_formed (exists_quantify x AC.[□↦p^{evar:0↦x}])
Hwfeo: well_formed p^{evar:0↦x}
Hwf'p0: well_formed (exists_quantify x (AC.[□↦p^{evar:0↦x}] $ p0))

Γ ⊢i exists_quantify x (AC.[□↦p^{evar:0↦x}] $ p0) ---> AC.[□↦ex , p] $ p0 using (ExGen := {[x]}, SVSubst := ∅, KT := false, FP := {[p0 ↾ Prf]} ∪ frames_of_AC AC)
Σ: Signature
Γ: Theory
AC: Application_context
p0: Pattern
Prf: well_formed p0
p: Pattern
x: evar
Hx: evar_is_fresh_in x (AC.[□↦p] $ p0)
Hwf: well_formed (ex , p) = true
IH2: Γ ⊢i exists_quantify x AC.[□↦p^{evar:0↦x}] ---> AC.[□↦ex , p] using (ExGen := {[x]}, SVSubst := ∅, KT := false, FP := frames_of_AC AC)
Hwfex: well_formed (ex , AC.[□↦p])
Hxfr1: evar_is_fresh_in x AC.[□↦p]
Hxfrp: evar_is_fresh_in x p
HxAC: x ∉ AC_free_evars AC
Hwf': well_formed (exists_quantify x AC.[□↦p^{evar:0↦x}])
Hwfeo: well_formed p^{evar:0↦x}
Hwf'p0: well_formed (exists_quantify x (AC.[□↦p^{evar:0↦x}] $ p0))

Γ ⊢i exists_quantify x (AC.[□↦p^{evar:0↦x}] $ p0) ---> AC.[□↦ex , p] $ p0 using (ExGen := {[x]}, SVSubst := ∅, KT := false, FP := {[p0 ↾ Prf]} ∪ frames_of_AC AC)
Σ: Signature
Γ: Theory
AC: Application_context
p0: Pattern
Prf: well_formed p0
p: Pattern
x: evar
Hx: evar_is_fresh_in x (AC.[□↦p] $ p0)
Hwf: well_formed (ex , p) = true
IH2: Γ ⊢i exists_quantify x AC.[□↦p^{evar:0↦x}] ---> AC.[□↦ex , p] using (ExGen := {[x]}, SVSubst := ∅, KT := false, FP := {[p0 ↾ Prf]} ∪ frames_of_AC AC)
Hwfex: well_formed (ex , AC.[□↦p])
Hxfr1: evar_is_fresh_in x AC.[□↦p]
Hxfrp: evar_is_fresh_in x p
HxAC: x ∉ AC_free_evars AC
Hwf': well_formed (exists_quantify x AC.[□↦p^{evar:0↦x}])
Hwfeo: well_formed p^{evar:0↦x}
Hwf'p0: well_formed (exists_quantify x (AC.[□↦p^{evar:0↦x}] $ p0))

Γ ⊢i exists_quantify x (AC.[□↦p^{evar:0↦x}] $ p0) ---> AC.[□↦ex , p] $ p0 using (ExGen := {[x]}, SVSubst := ∅, KT := false, FP := {[p0 ↾ Prf]} ∪ frames_of_AC AC)
Σ: Signature
Γ: Theory
AC: Application_context
p0: Pattern
Prf: well_formed p0
p: Pattern
x: evar
Hx: evar_is_fresh_in x (AC.[□↦p] $ p0)
Hwf: well_formed (ex , p) = true
IH2: Γ ⊢i exists_quantify x AC.[□↦p^{evar:0↦x}] $ p0 ---> AC.[□↦ex , p] $ p0 using (ExGen := {[x]}, SVSubst := ∅, KT := false, FP := {[p0 ↾ Prf]} ∪ frames_of_AC AC)
Hwfex: well_formed (ex , AC.[□↦p])
Hxfr1: evar_is_fresh_in x AC.[□↦p]
Hxfrp: evar_is_fresh_in x p
HxAC: x ∉ AC_free_evars AC
Hwf': well_formed (exists_quantify x AC.[□↦p^{evar:0↦x}])
Hwfeo: well_formed p^{evar:0↦x}
Hwf'p0: well_formed (exists_quantify x (AC.[□↦p^{evar:0↦x}] $ p0))

Γ ⊢i exists_quantify x (AC.[□↦p^{evar:0↦x}] $ p0) ---> AC.[□↦ex , p] $ p0 using (ExGen := {[x]}, SVSubst := ∅, KT := false, FP := {[p0 ↾ Prf]} ∪ frames_of_AC AC)
Σ: Signature
Γ: Theory
AC: Application_context
p0: Pattern
Prf: well_formed p0
p: Pattern
x: evar
Hx: evar_is_fresh_in x (AC.[□↦p] $ p0)
Hwf: well_formed (ex , p) = true
IH2: Γ ⊢i exists_quantify x AC.[□↦p^{evar:0↦x}] ---> AC.[□↦ex , p] using (ExGen := {[x]}, SVSubst := ∅, KT := false, FP := {[p0 ↾ Prf]} ∪ frames_of_AC AC)
Hwfex: well_formed (ex , AC.[□↦p])
Hxfr1: evar_is_fresh_in x AC.[□↦p]
Hxfrp: evar_is_fresh_in x p
HxAC: x ∉ AC_free_evars AC
Hwf': well_formed (exists_quantify x AC.[□↦p^{evar:0↦x}])
Hwfeo: well_formed p^{evar:0↦x}
Hwf'p0: well_formed (exists_quantify x (AC.[□↦p^{evar:0↦x}] $ p0))
ProofInfoLe (ExGen := ∅, SVSubst := ∅, KT := false, FP := {[p0 ↾ Prf]}) (ExGen := {[x]}, SVSubst := ∅, KT := false, FP := {[p0 ↾ Prf]} ∪ frames_of_AC AC)
Σ: Signature
Γ: Theory
AC: Application_context
p0: Pattern
Prf: well_formed p0
p: Pattern
x: evar
Hx: evar_is_fresh_in x (AC.[□↦p] $ p0)
Hwf: well_formed (ex , p) = true
IH2: Γ ⊢i exists_quantify x AC.[□↦p^{evar:0↦x}] ---> AC.[□↦ex , p] using (ExGen := {[x]}, SVSubst := ∅, KT := false, FP := {[p0 ↾ Prf]} ∪ frames_of_AC AC)
Hwfex: well_formed (ex , AC.[□↦p])
Hxfr1: evar_is_fresh_in x AC.[□↦p]
Hxfrp: evar_is_fresh_in x p
HxAC: x ∉ AC_free_evars AC
Hwf': well_formed (exists_quantify x AC.[□↦p^{evar:0↦x}])
Hwfeo: well_formed p^{evar:0↦x}
Hwf'p0: well_formed (exists_quantify x (AC.[□↦p^{evar:0↦x}] $ p0))

ProofInfoLe (ExGen := ∅, SVSubst := ∅, KT := false, FP := {[p0 ↾ Prf]}) (ExGen := {[x]}, SVSubst := ∅, KT := false, FP := {[p0 ↾ Prf]} ∪ frames_of_AC AC)
try_solve_pile.
Σ: Signature
Γ: Theory
AC: Application_context
p0: Pattern
Prf: well_formed p0
p: Pattern
x: evar
Hx: evar_is_fresh_in x (AC.[□↦p] $ p0)
Hwf: well_formed (ex , p) = true
IH2: Γ ⊢i exists_quantify x AC.[□↦p^{evar:0↦x}] $ p0 ---> AC.[□↦ex , p] $ p0 using (ExGen := {[x]}, SVSubst := ∅, KT := false, FP := {[p0 ↾ Prf]} ∪ frames_of_AC AC)
Hwfex: well_formed (ex , AC.[□↦p])
Hxfr1: evar_is_fresh_in x AC.[□↦p]
Hxfrp: evar_is_fresh_in x p
HxAC: x ∉ AC_free_evars AC
Hwf': well_formed (exists_quantify x AC.[□↦p^{evar:0↦x}])
Hwfeo: well_formed p^{evar:0↦x}
Hwf'p0: well_formed (exists_quantify x (AC.[□↦p^{evar:0↦x}] $ p0))

Γ ⊢i exists_quantify x (AC.[□↦p^{evar:0↦x}] $ p0) ---> AC.[□↦ex , p] $ p0 using (ExGen := {[x]}, SVSubst := ∅, KT := false, FP := {[p0 ↾ Prf]} ∪ frames_of_AC AC)
Σ: Signature
Γ: Theory
AC: Application_context
p0: Pattern
Prf: well_formed p0
p: Pattern
x: evar
Hx: evar_is_fresh_in x (AC.[□↦p] $ p0)
Hwf: well_formed (ex , p) = true
IH2: Γ ⊢i exists_quantify x AC.[□↦p^{evar:0↦x}] $ p0 ---> AC.[□↦ex , p] $ p0 using (ExGen := {[x]}, SVSubst := ∅, KT := false, FP := {[p0 ↾ Prf]} ∪ frames_of_AC AC)
Hwfex: well_formed (ex , AC.[□↦p])
Hxfr1: evar_is_fresh_in x AC.[□↦p]
Hxfrp: evar_is_fresh_in x p
HxAC: x ∉ AC_free_evars AC
Hwf': well_formed (exists_quantify x AC.[□↦p^{evar:0↦x}])
Hwfeo: well_formed p^{evar:0↦x}
Hwf'p0: well_formed (exists_quantify x (AC.[□↦p^{evar:0↦x}] $ p0))

well_formed (exists_quantify x (AC.[□↦p^{evar:0↦x}] $ p0))
Σ: Signature
Γ: Theory
AC: Application_context
p0: Pattern
Prf: well_formed p0
p: Pattern
x: evar
Hx: evar_is_fresh_in x (AC.[□↦p] $ p0)
Hwf: well_formed (ex , p) = true
IH2: Γ ⊢i exists_quantify x AC.[□↦p^{evar:0↦x}] $ p0 ---> AC.[□↦ex , p] $ p0 using (ExGen := {[x]}, SVSubst := ∅, KT := false, FP := {[p0 ↾ Prf]} ∪ frames_of_AC AC)
Hwfex: well_formed (ex , AC.[□↦p])
Hxfr1: evar_is_fresh_in x AC.[□↦p]
Hxfrp: evar_is_fresh_in x p
HxAC: x ∉ AC_free_evars AC
Hwf': well_formed (exists_quantify x AC.[□↦p^{evar:0↦x}])
Hwfeo: well_formed p^{evar:0↦x}
Hwf'p0: well_formed (exists_quantify x (AC.[□↦p^{evar:0↦x}] $ p0))
well_formed ?B
Σ: Signature
Γ: Theory
AC: Application_context
p0: Pattern
Prf: well_formed p0
p: Pattern
x: evar
Hx: evar_is_fresh_in x (AC.[□↦p] $ p0)
Hwf: well_formed (ex , p) = true
IH2: Γ ⊢i exists_quantify x AC.[□↦p^{evar:0↦x}] $ p0 ---> AC.[□↦ex , p] $ p0 using (ExGen := {[x]}, SVSubst := ∅, KT := false, FP := {[p0 ↾ Prf]} ∪ frames_of_AC AC)
Hwfex: well_formed (ex , AC.[□↦p])
Hxfr1: evar_is_fresh_in x AC.[□↦p]
Hxfrp: evar_is_fresh_in x p
HxAC: x ∉ AC_free_evars AC
Hwf': well_formed (exists_quantify x AC.[□↦p^{evar:0↦x}])
Hwfeo: well_formed p^{evar:0↦x}
Hwf'p0: well_formed (exists_quantify x (AC.[□↦p^{evar:0↦x}] $ p0))
well_formed (AC.[□↦ex , p] $ p0)
Σ: Signature
Γ: Theory
AC: Application_context
p0: Pattern
Prf: well_formed p0
p: Pattern
x: evar
Hx: evar_is_fresh_in x (AC.[□↦p] $ p0)
Hwf: well_formed (ex , p) = true
IH2: Γ ⊢i exists_quantify x AC.[□↦p^{evar:0↦x}] $ p0 ---> AC.[□↦ex , p] $ p0 using (ExGen := {[x]}, SVSubst := ∅, KT := false, FP := {[p0 ↾ Prf]} ∪ frames_of_AC AC)
Hwfex: well_formed (ex , AC.[□↦p])
Hxfr1: evar_is_fresh_in x AC.[□↦p]
Hxfrp: evar_is_fresh_in x p
HxAC: x ∉ AC_free_evars AC
Hwf': well_formed (exists_quantify x AC.[□↦p^{evar:0↦x}])
Hwfeo: well_formed p^{evar:0↦x}
Hwf'p0: well_formed (exists_quantify x (AC.[□↦p^{evar:0↦x}] $ p0))
Γ ⊢i exists_quantify x (AC.[□↦p^{evar:0↦x}] $ p0) ---> ?B using (ExGen := {[x]}, SVSubst := ∅, KT := false, FP := {[p0 ↾ Prf]} ∪ frames_of_AC AC)
Σ: Signature
Γ: Theory
AC: Application_context
p0: Pattern
Prf: well_formed p0
p: Pattern
x: evar
Hx: evar_is_fresh_in x (AC.[□↦p] $ p0)
Hwf: well_formed (ex , p) = true
IH2: Γ ⊢i exists_quantify x AC.[□↦p^{evar:0↦x}] $ p0 ---> AC.[□↦ex , p] $ p0 using (ExGen := {[x]}, SVSubst := ∅, KT := false, FP := {[p0 ↾ Prf]} ∪ frames_of_AC AC)
Hwfex: well_formed (ex , AC.[□↦p])
Hxfr1: evar_is_fresh_in x AC.[□↦p]
Hxfrp: evar_is_fresh_in x p
HxAC: x ∉ AC_free_evars AC
Hwf': well_formed (exists_quantify x AC.[□↦p^{evar:0↦x}])
Hwfeo: well_formed p^{evar:0↦x}
Hwf'p0: well_formed (exists_quantify x (AC.[□↦p^{evar:0↦x}] $ p0))
Γ ⊢i ?B ---> AC.[□↦ex , p] $ p0 using (ExGen := {[x]}, SVSubst := ∅, KT := false, FP := {[p0 ↾ Prf]} ∪ frames_of_AC AC)
Σ: Signature
Γ: Theory
AC: Application_context
p0: Pattern
Prf: well_formed p0
p: Pattern
x: evar
Hx: evar_is_fresh_in x (AC.[□↦p] $ p0)
Hwf: well_formed (ex , p) = true
IH2: Γ ⊢i exists_quantify x AC.[□↦p^{evar:0↦x}] $ p0 ---> AC.[□↦ex , p] $ p0 using (ExGen := {[x]}, SVSubst := ∅, KT := false, FP := {[p0 ↾ Prf]} ∪ frames_of_AC AC)
Hwfex: well_formed (ex , AC.[□↦p])
Hxfr1: evar_is_fresh_in x AC.[□↦p]
Hxfrp: evar_is_fresh_in x p
HxAC: x ∉ AC_free_evars AC
Hwf': well_formed (exists_quantify x AC.[□↦p^{evar:0↦x}])
Hwfeo: well_formed p^{evar:0↦x}
Hwf'p0: well_formed (exists_quantify x (AC.[□↦p^{evar:0↦x}] $ p0))

well_formed (exists_quantify x (AC.[□↦p^{evar:0↦x}] $ p0))
Σ: Signature
Γ: Theory
AC: Application_context
p0: Pattern
Prf: well_formed p0
p: Pattern
x: evar
Hx: evar_is_fresh_in x (AC.[□↦p] $ p0)
Hwf: well_formed (ex , p) = true
IH2: Γ ⊢i exists_quantify x AC.[□↦p^{evar:0↦x}] $ p0 ---> AC.[□↦ex , p] $ p0 using (ExGen := {[x]}, SVSubst := ∅, KT := false, FP := {[p0 ↾ Prf]} ∪ frames_of_AC AC)
Hwfex: well_formed (ex , AC.[□↦p])
Hxfr1: evar_is_fresh_in x AC.[□↦p]
Hxfrp: evar_is_fresh_in x p
HxAC: x ∉ AC_free_evars AC
Hwf': well_formed (exists_quantify x AC.[□↦p^{evar:0↦x}])
Hwfeo: well_formed p^{evar:0↦x}
Hwf'p0: well_formed (exists_quantify x (AC.[□↦p^{evar:0↦x}] $ p0))
well_formed (exists_quantify x AC.[□↦p^{evar:0↦x}] $ p0)
Σ: Signature
Γ: Theory
AC: Application_context
p0: Pattern
Prf: well_formed p0
p: Pattern
x: evar
Hx: evar_is_fresh_in x (AC.[□↦p] $ p0)
Hwf: well_formed (ex , p) = true
IH2: Γ ⊢i exists_quantify x AC.[□↦p^{evar:0↦x}] $ p0 ---> AC.[□↦ex , p] $ p0 using (ExGen := {[x]}, SVSubst := ∅, KT := false, FP := {[p0 ↾ Prf]} ∪ frames_of_AC AC)
Hwfex: well_formed (ex , AC.[□↦p])
Hxfr1: evar_is_fresh_in x AC.[□↦p]
Hxfrp: evar_is_fresh_in x p
HxAC: x ∉ AC_free_evars AC
Hwf': well_formed (exists_quantify x AC.[□↦p^{evar:0↦x}])
Hwfeo: well_formed p^{evar:0↦x}
Hwf'p0: well_formed (exists_quantify x (AC.[□↦p^{evar:0↦x}] $ p0))
well_formed (AC.[□↦ex , p] $ p0)
Σ: Signature
Γ: Theory
AC: Application_context
p0: Pattern
Prf: well_formed p0
p: Pattern
x: evar
Hx: evar_is_fresh_in x (AC.[□↦p] $ p0)
Hwf: well_formed (ex , p) = true
IH2: Γ ⊢i exists_quantify x AC.[□↦p^{evar:0↦x}] $ p0 ---> AC.[□↦ex , p] $ p0 using (ExGen := {[x]}, SVSubst := ∅, KT := false, FP := {[p0 ↾ Prf]} ∪ frames_of_AC AC)
Hwfex: well_formed (ex , AC.[□↦p])
Hxfr1: evar_is_fresh_in x AC.[□↦p]
Hxfrp: evar_is_fresh_in x p
HxAC: x ∉ AC_free_evars AC
Hwf': well_formed (exists_quantify x AC.[□↦p^{evar:0↦x}])
Hwfeo: well_formed p^{evar:0↦x}
Hwf'p0: well_formed (exists_quantify x (AC.[□↦p^{evar:0↦x}] $ p0))
Γ ⊢i exists_quantify x (AC.[□↦p^{evar:0↦x}] $ p0) ---> exists_quantify x AC.[□↦p^{evar:0↦x}] $ p0 using (ExGen := {[x]}, SVSubst := ∅, KT := false, FP := {[p0 ↾ Prf]} ∪ frames_of_AC AC)
Σ: Signature
Γ: Theory
AC: Application_context
p0: Pattern
Prf: well_formed p0
p: Pattern
x: evar
Hx: evar_is_fresh_in x (AC.[□↦p] $ p0)
Hwf: well_formed (ex , p) = true
IH2: Γ ⊢i exists_quantify x AC.[□↦p^{evar:0↦x}] $ p0 ---> AC.[□↦ex , p] $ p0 using (ExGen := {[x]}, SVSubst := ∅, KT := false, FP := {[p0 ↾ Prf]} ∪ frames_of_AC AC)
Hwfex: well_formed (ex , AC.[□↦p])
Hxfr1: evar_is_fresh_in x AC.[□↦p]
Hxfrp: evar_is_fresh_in x p
HxAC: x ∉ AC_free_evars AC
Hwf': well_formed (exists_quantify x AC.[□↦p^{evar:0↦x}])
Hwfeo: well_formed p^{evar:0↦x}
Hwf'p0: well_formed (exists_quantify x (AC.[□↦p^{evar:0↦x}] $ p0))

Γ ⊢i exists_quantify x (AC.[□↦p^{evar:0↦x}] $ p0) ---> exists_quantify x AC.[□↦p^{evar:0↦x}] $ p0 using (ExGen := {[x]}, SVSubst := ∅, KT := false, FP := {[p0 ↾ Prf]} ∪ frames_of_AC AC)
Σ: Signature
Γ: Theory
AC: Application_context
p0: Pattern
Prf: well_formed p0
p: Pattern
x: evar
Hx: evar_is_fresh_in x (AC.[□↦p] $ p0)
Hwf: well_formed (ex , p) = true
IH2: Γ ⊢i exists_quantify x AC.[□↦p^{evar:0↦x}] $ p0 ---> AC.[□↦ex , p] $ p0 using (ExGen := {[x]}, SVSubst := ∅, KT := false, FP := {[p0 ↾ Prf]} ∪ frames_of_AC AC)
Hwfex: well_formed (ex , AC.[□↦p])
Hxfr1: evar_is_fresh_in x AC.[□↦p]
Hxfrp: evar_is_fresh_in x p
HxAC: x ∉ AC_free_evars AC
Hwf': well_formed (exists_quantify x AC.[□↦p^{evar:0↦x}])
Hwfeo: well_formed p^{evar:0↦x}
Hwf'p0: well_formed (exists_quantify x (AC.[□↦p^{evar:0↦x}] $ p0))

ProofInfoLe (ExGen := {[x]}, SVSubst := ∅, KT := false, FP := ∅) (ExGen := {[x]}, SVSubst := ∅, KT := false, FP := {[p0 ↾ Prf]} ∪ frames_of_AC AC)
Σ: Signature
Γ: Theory
AC: Application_context
p0: Pattern
Prf: well_formed p0
p: Pattern
x: evar
Hx: evar_is_fresh_in x (AC.[□↦p] $ p0)
Hwf: well_formed (ex , p) = true
IH2: Γ ⊢i exists_quantify x AC.[□↦p^{evar:0↦x}] $ p0 ---> AC.[□↦ex , p] $ p0 using (ExGen := {[x]}, SVSubst := ∅, KT := false, FP := {[p0 ↾ Prf]} ∪ frames_of_AC AC)
Hwfex: well_formed (ex , AC.[□↦p])
Hxfr1: evar_is_fresh_in x AC.[□↦p]
Hxfrp: evar_is_fresh_in x p
HxAC: x ∉ AC_free_evars AC
Hwf': well_formed (exists_quantify x AC.[□↦p^{evar:0↦x}])
Hwfeo: well_formed p^{evar:0↦x}
Hwf'p0: well_formed (exists_quantify x (AC.[□↦p^{evar:0↦x}] $ p0))
x ∉ free_evars (exists_quantify x AC.[□↦p^{evar:0↦x}] $ p0)
Σ: Signature
Γ: Theory
AC: Application_context
p0: Pattern
Prf: well_formed p0
p: Pattern
x: evar
Hx: evar_is_fresh_in x (AC.[□↦p] $ p0)
Hwf: well_formed (ex , p) = true
IH2: Γ ⊢i exists_quantify x AC.[□↦p^{evar:0↦x}] $ p0 ---> AC.[□↦ex , p] $ p0 using (ExGen := {[x]}, SVSubst := ∅, KT := false, FP := {[p0 ↾ Prf]} ∪ frames_of_AC AC)
Hwfex: well_formed (ex , AC.[□↦p])
Hxfr1: evar_is_fresh_in x AC.[□↦p]
Hxfrp: evar_is_fresh_in x p
HxAC: x ∉ AC_free_evars AC
Hwf': well_formed (exists_quantify x AC.[□↦p^{evar:0↦x}])
Hwfeo: well_formed p^{evar:0↦x}
Hwf'p0: well_formed (exists_quantify x (AC.[□↦p^{evar:0↦x}] $ p0))
Γ ⊢i AC.[□↦p^{evar:0↦x}] $ p0 ---> exists_quantify x AC.[□↦p^{evar:0↦x}] $ p0 using (ExGen := {[x]}, SVSubst := ∅, KT := false, FP := {[p0 ↾ Prf]} ∪ frames_of_AC AC)
Σ: Signature
Γ: Theory
AC: Application_context
p0: Pattern
Prf: well_formed p0
p: Pattern
x: evar
Hx: evar_is_fresh_in x (AC.[□↦p] $ p0)
Hwf: well_formed (ex , p) = true
IH2: Γ ⊢i exists_quantify x AC.[□↦p^{evar:0↦x}] $ p0 ---> AC.[□↦ex , p] $ p0 using (ExGen := {[x]}, SVSubst := ∅, KT := false, FP := {[p0 ↾ Prf]} ∪ frames_of_AC AC)
Hwfex: well_formed (ex , AC.[□↦p])
Hxfr1: evar_is_fresh_in x AC.[□↦p]
Hxfrp: evar_is_fresh_in x p
HxAC: x ∉ AC_free_evars AC
Hwf': well_formed (exists_quantify x AC.[□↦p^{evar:0↦x}])
Hwfeo: well_formed p^{evar:0↦x}
Hwf'p0: well_formed (exists_quantify x (AC.[□↦p^{evar:0↦x}] $ p0))

ProofInfoLe (ExGen := {[x]}, SVSubst := ∅, KT := false, FP := ∅) (ExGen := {[x]}, SVSubst := ∅, KT := false, FP := {[p0 ↾ Prf]} ∪ frames_of_AC AC)
try_solve_pile.
Σ: Signature
Γ: Theory
AC: Application_context
p0: Pattern
Prf: well_formed p0
p: Pattern
x: evar
Hx: evar_is_fresh_in x (AC.[□↦p] $ p0)
Hwf: well_formed (ex , p) = true
IH2: Γ ⊢i exists_quantify x AC.[□↦p^{evar:0↦x}] $ p0 ---> AC.[□↦ex , p] $ p0 using (ExGen := {[x]}, SVSubst := ∅, KT := false, FP := {[p0 ↾ Prf]} ∪ frames_of_AC AC)
Hwfex: well_formed (ex , AC.[□↦p])
Hxfr1: evar_is_fresh_in x AC.[□↦p]
Hxfrp: evar_is_fresh_in x p
HxAC: x ∉ AC_free_evars AC
Hwf': well_formed (exists_quantify x AC.[□↦p^{evar:0↦x}])
Hwfeo: well_formed p^{evar:0↦x}
Hwf'p0: well_formed (exists_quantify x (AC.[□↦p^{evar:0↦x}] $ p0))

x ∉ free_evars (exists_quantify x AC.[□↦p^{evar:0↦x}] $ p0)
Σ: Signature
Γ: Theory
AC: Application_context
p0: Pattern
Prf: well_formed p0
p: Pattern
x: evar
Hx: evar_is_fresh_in x (AC.[□↦p] $ p0)
Hwf: well_formed (ex , p) = true
IH2: Γ ⊢i exists_quantify x AC.[□↦p^{evar:0↦x}] $ p0 ---> AC.[□↦ex , p] $ p0 using (ExGen := {[x]}, SVSubst := ∅, KT := false, FP := {[p0 ↾ Prf]} ∪ frames_of_AC AC)
Hwfex: well_formed (ex , AC.[□↦p])
Hxfr1: evar_is_fresh_in x AC.[□↦p]
Hxfrp: evar_is_fresh_in x p
HxAC: x ∉ AC_free_evars AC
Hwf': well_formed (exists_quantify x AC.[□↦p^{evar:0↦x}])
Hwfeo: well_formed p^{evar:0↦x}
Hwf'p0: well_formed (exists_quantify x (AC.[□↦p^{evar:0↦x}] $ p0))
Γ ⊢i AC.[□↦p^{evar:0↦x}] $ p0 ---> exists_quantify x AC.[□↦p^{evar:0↦x}] $ p0 using (ExGen := {[x]}, SVSubst := ∅, KT := false, FP := {[p0 ↾ Prf]} ∪ frames_of_AC AC)
Σ: Signature
Γ: Theory
AC: Application_context
p0: Pattern
Prf: well_formed p0
p: Pattern
x: evar
Hx: evar_is_fresh_in x (AC.[□↦p] $ p0)
Hwf: well_formed (ex , p) = true
IH2: Γ ⊢i exists_quantify x AC.[□↦p^{evar:0↦x}] $ p0 ---> AC.[□↦ex , p] $ p0 using (ExGen := {[x]}, SVSubst := ∅, KT := false, FP := {[p0 ↾ Prf]} ∪ frames_of_AC AC)
Hwfex: well_formed (ex , AC.[□↦p])
Hxfr1: evar_is_fresh_in x AC.[□↦p]
Hxfrp: evar_is_fresh_in x p
HxAC: x ∉ AC_free_evars AC
Hwf': well_formed (exists_quantify x AC.[□↦p^{evar:0↦x}])
Hwfeo: well_formed p^{evar:0↦x}
Hwf'p0: well_formed (exists_quantify x (AC.[□↦p^{evar:0↦x}] $ p0))

x ∉ free_evars (exists_quantify x AC.[□↦p^{evar:0↦x}] $ p0)
Σ: Signature
Γ: Theory
AC: Application_context
p0: Pattern
Prf: well_formed p0
p: Pattern
x: evar
Hx: evar_is_fresh_in x (AC.[□↦p] $ p0)
Hwf: well_formed (ex , p) = true
IH2: Γ ⊢i exists_quantify x AC.[□↦p^{evar:0↦x}] $ p0 ---> AC.[□↦ex , p] $ p0 using (ExGen := {[x]}, SVSubst := ∅, KT := false, FP := {[p0 ↾ Prf]} ∪ frames_of_AC AC)
Hwfex: well_formed (ex , AC.[□↦p])
Hxfr1: evar_is_fresh_in x AC.[□↦p]
Hxfrp: evar_is_fresh_in x p
HxAC: x ∉ AC_free_evars AC
Hwf': well_formed (exists_quantify x AC.[□↦p^{evar:0↦x}])
Hwfeo: well_formed p^{evar:0↦x}
Hwf'p0: well_formed (exists_quantify x (AC.[□↦p^{evar:0↦x}] $ p0))

x ∉ free_evars ((ex , AC.[□↦p^{evar:0↦x}]^{{evar:x↦0}}) $ p0)
Σ: Signature
Γ: Theory
AC: Application_context
p0: Pattern
Prf: well_formed p0
p: Pattern
x: evar
Hx: evar_is_fresh_in x (AC.[□↦p] $ p0)
Hwf: well_formed (ex , p) = true
IH2: Γ ⊢i exists_quantify x AC.[□↦p^{evar:0↦x}] $ p0 ---> AC.[□↦ex , p] $ p0 using (ExGen := {[x]}, SVSubst := ∅, KT := false, FP := {[p0 ↾ Prf]} ∪ frames_of_AC AC)
Hwfex: well_formed (ex , AC.[□↦p])
Hxfr1: evar_is_fresh_in x AC.[□↦p]
Hxfrp: evar_is_fresh_in x p
HxAC: x ∉ AC_free_evars AC
Hwf': well_formed (exists_quantify x AC.[□↦p^{evar:0↦x}])
Hwfeo: well_formed p^{evar:0↦x}
Hwf'p0: well_formed (exists_quantify x (AC.[□↦p^{evar:0↦x}] $ p0))

x ∉ free_evars AC.[□↦p^{evar:0↦x}]^{{evar:x↦0}} ∪ free_evars p0
Σ: Signature
Γ: Theory
AC: Application_context
p0: Pattern
Prf: well_formed p0
p: Pattern
x: evar
Hx: evar_is_fresh_in x (AC.[□↦p] $ p0)
Hwf: well_formed (ex , p) = true
IH2: Γ ⊢i exists_quantify x AC.[□↦p^{evar:0↦x}] $ p0 ---> AC.[□↦ex , p] $ p0 using (ExGen := {[x]}, SVSubst := ∅, KT := false, FP := {[p0 ↾ Prf]} ∪ frames_of_AC AC)
Hwfex: well_formed (ex , AC.[□↦p])
Hxfr1: evar_is_fresh_in x AC.[□↦p]
Hxfrp: evar_is_fresh_in x p
HxAC: x ∉ AC_free_evars AC
Hwf': well_formed (exists_quantify x AC.[□↦p^{evar:0↦x}])
Hwfeo: well_formed p^{evar:0↦x}
Hwf'p0: well_formed (exists_quantify x (AC.[□↦p^{evar:0↦x}] $ p0))

x ∉ free_evars AC.[□↦p^{evar:0↦x}] ∖ {[x]} ∪ free_evars p0
Σ: Signature
Γ: Theory
AC: Application_context
p0: Pattern
Prf: well_formed p0
p: Pattern
x: evar
Hx: x ∉ free_evars (AC.[□↦p] $ p0)
Hwf: well_formed (ex , p) = true
IH2: Γ ⊢i exists_quantify x AC.[□↦p^{evar:0↦x}] $ p0 ---> AC.[□↦ex , p] $ p0 using (ExGen := {[x]}, SVSubst := ∅, KT := false, FP := {[p0 ↾ Prf]} ∪ frames_of_AC AC)
Hwfex: well_formed (ex , AC.[□↦p])
Hxfr1: evar_is_fresh_in x AC.[□↦p]
Hxfrp: evar_is_fresh_in x p
HxAC: x ∉ AC_free_evars AC
Hwf': well_formed (exists_quantify x AC.[□↦p^{evar:0↦x}])
Hwfeo: well_formed p^{evar:0↦x}
Hwf'p0: well_formed (exists_quantify x (AC.[□↦p^{evar:0↦x}] $ p0))

x ∉ free_evars AC.[□↦p^{evar:0↦x}] ∖ {[x]} ∪ free_evars p0
Σ: Signature
Γ: Theory
AC: Application_context
p0: Pattern
Prf: well_formed p0
p: Pattern
x: evar
Hx: x ∉ free_evars AC.[□↦p] ∪ free_evars p0
Hwf: well_formed (ex , p) = true
IH2: Γ ⊢i exists_quantify x AC.[□↦p^{evar:0↦x}] $ p0 ---> AC.[□↦ex , p] $ p0 using (ExGen := {[x]}, SVSubst := ∅, KT := false, FP := {[p0 ↾ Prf]} ∪ frames_of_AC AC)
Hwfex: well_formed (ex , AC.[□↦p])
Hxfr1: evar_is_fresh_in x AC.[□↦p]
Hxfrp: evar_is_fresh_in x p
HxAC: x ∉ AC_free_evars AC
Hwf': well_formed (exists_quantify x AC.[□↦p^{evar:0↦x}])
Hwfeo: well_formed p^{evar:0↦x}
Hwf'p0: well_formed (exists_quantify x (AC.[□↦p^{evar:0↦x}] $ p0))

x ∉ free_evars AC.[□↦p^{evar:0↦x}] ∖ {[x]} ∪ free_evars p0
Σ: Signature
AC: Application_context
p0, p: Pattern
x: evar
Hx: x ∉ free_evars AC.[□↦p] ∪ free_evars p0

x ∉ free_evars AC.[□↦p^{evar:0↦x}] ∖ {[x]} ∪ free_evars p0
set_solver.
Σ: Signature
Γ: Theory
AC: Application_context
p0: Pattern
Prf: well_formed p0
p: Pattern
x: evar
Hx: evar_is_fresh_in x (AC.[□↦p] $ p0)
Hwf: well_formed (ex , p) = true
IH2: Γ ⊢i exists_quantify x AC.[□↦p^{evar:0↦x}] $ p0 ---> AC.[□↦ex , p] $ p0 using (ExGen := {[x]}, SVSubst := ∅, KT := false, FP := {[p0 ↾ Prf]} ∪ frames_of_AC AC)
Hwfex: well_formed (ex , AC.[□↦p])
Hxfr1: evar_is_fresh_in x AC.[□↦p]
Hxfrp: evar_is_fresh_in x p
HxAC: x ∉ AC_free_evars AC
Hwf': well_formed (exists_quantify x AC.[□↦p^{evar:0↦x}])
Hwfeo: well_formed p^{evar:0↦x}
Hwf'p0: well_formed (exists_quantify x (AC.[□↦p^{evar:0↦x}] $ p0))

Γ ⊢i AC.[□↦p^{evar:0↦x}] $ p0 ---> exists_quantify x AC.[□↦p^{evar:0↦x}] $ p0 using (ExGen := {[x]}, SVSubst := ∅, KT := false, FP := {[p0 ↾ Prf]} ∪ frames_of_AC AC)
(* TODO have some nice implicit parameters *)
Σ: Signature
Γ: Theory
AC: Application_context
p0: Pattern
Prf: well_formed p0
p: Pattern
x: evar
Hx: evar_is_fresh_in x (AC.[□↦p] $ p0)
Hwf: well_formed (ex , p) = true
IH2: Γ ⊢i exists_quantify x AC.[□↦p^{evar:0↦x}] $ p0 ---> AC.[□↦ex , p] $ p0 using (ExGen := {[x]}, SVSubst := ∅, KT := false, FP := {[p0 ↾ Prf]} ∪ frames_of_AC AC)
Hwfex: well_formed (ex , AC.[□↦p])
Hxfr1: evar_is_fresh_in x AC.[□↦p]
Hxfrp: evar_is_fresh_in x p
HxAC: x ∉ AC_free_evars AC
Hwf': well_formed (exists_quantify x AC.[□↦p^{evar:0↦x}])
Hwfeo: well_formed p^{evar:0↦x}
Hwf'p0: well_formed (exists_quantify x (AC.[□↦p^{evar:0↦x}] $ p0))

ProofInfoLe (ExGen := ?evs, SVSubst := ?svs, KT := ?kt, FP := ?fp) (ExGen := {[x]}, SVSubst := ∅, KT := false, FP := {[p0 ↾ Prf]} ∪ frames_of_AC AC)
Σ: Signature
Γ: Theory
AC: Application_context
p0: Pattern
Prf: well_formed p0
p: Pattern
x: evar
Hx: evar_is_fresh_in x (AC.[□↦p] $ p0)
Hwf: well_formed (ex , p) = true
IH2: Γ ⊢i exists_quantify x AC.[□↦p^{evar:0↦x}] $ p0 ---> AC.[□↦ex , p] $ p0 using (ExGen := {[x]}, SVSubst := ∅, KT := false, FP := {[p0 ↾ Prf]} ∪ frames_of_AC AC)
Hwfex: well_formed (ex , AC.[□↦p])
Hxfr1: evar_is_fresh_in x AC.[□↦p]
Hxfrp: evar_is_fresh_in x p
HxAC: x ∉ AC_free_evars AC
Hwf': well_formed (exists_quantify x AC.[□↦p^{evar:0↦x}])
Hwfeo: well_formed p^{evar:0↦x}
Hwf'p0: well_formed (exists_quantify x (AC.[□↦p^{evar:0↦x}] $ p0))
Γ ⊢i AC.[□↦p^{evar:0↦x}] ---> exists_quantify x AC.[□↦p^{evar:0↦x}] using (ExGen := ?evs, SVSubst := ?svs, KT := ?kt, FP := ?fp)
Σ: Signature
Γ: Theory
AC: Application_context
p0: Pattern
Prf: well_formed p0
p: Pattern
x: evar
Hx: evar_is_fresh_in x (AC.[□↦p] $ p0)
Hwf: well_formed (ex , p) = true
IH2: Γ ⊢i exists_quantify x AC.[□↦p^{evar:0↦x}] $ p0 ---> AC.[□↦ex , p] $ p0 using (ExGen := {[x]}, SVSubst := ∅, KT := false, FP := {[p0 ↾ Prf]} ∪ frames_of_AC AC)
Hwfex: well_formed (ex , AC.[□↦p])
Hxfr1: evar_is_fresh_in x AC.[□↦p]
Hxfrp: evar_is_fresh_in x p
HxAC: x ∉ AC_free_evars AC
Hwf': well_formed (exists_quantify x AC.[□↦p^{evar:0↦x}])
Hwfeo: well_formed p^{evar:0↦x}
Hwf'p0: well_formed (exists_quantify x (AC.[□↦p^{evar:0↦x}] $ p0))

Γ ⊢i AC.[□↦p^{evar:0↦x}] ---> exists_quantify x AC.[□↦p^{evar:0↦x}] using (ExGen := {[x]}, SVSubst := ∅, KT := false, FP := {[p0 ↾ Prf]} ∪ frames_of_AC AC)
Σ: Signature
Γ: Theory
AC: Application_context
p0: Pattern
Prf: well_formed p0
p: Pattern
x: evar
Hx: evar_is_fresh_in x (AC.[□↦p] $ p0)
Hwf: well_formed (ex , p) = true
IH2: Γ ⊢i exists_quantify x AC.[□↦p^{evar:0↦x}] $ p0 ---> AC.[□↦ex , p] $ p0 using (ExGen := {[x]}, SVSubst := ∅, KT := false, FP := {[p0 ↾ Prf]} ∪ frames_of_AC AC)
Hwfex: well_formed (ex , AC.[□↦p])
Hxfr1: evar_is_fresh_in x AC.[□↦p]
Hxfrp: evar_is_fresh_in x p
HxAC: x ∉ AC_free_evars AC
Hwf': well_formed (exists_quantify x AC.[□↦p^{evar:0↦x}])
Hwfeo: well_formed p^{evar:0↦x}
Hwf'p0: well_formed (exists_quantify x (AC.[□↦p^{evar:0↦x}] $ p0))

Γ ⊢i AC.[□↦p^{evar:0↦x}] ---> exists_quantify x AC.[□↦p^{evar:0↦x}] using (ExGen := {[x]}, SVSubst := ∅, KT := false, FP := {[p0 ↾ Prf]} ∪ frames_of_AC AC)
Σ: Signature
Γ: Theory
AC: Application_context
p0: Pattern
Prf: well_formed p0
p: Pattern
x: evar
Hx: evar_is_fresh_in x (AC.[□↦p] $ p0)
Hwf: well_formed (ex , p) = true
IH2: Γ ⊢i exists_quantify x AC.[□↦p^{evar:0↦x}] $ p0 ---> AC.[□↦ex , p] $ p0 using (ExGen := {[x]}, SVSubst := ∅, KT := false, FP := {[p0 ↾ Prf]} ∪ frames_of_AC AC)
Hwfex: well_formed (ex , AC.[□↦p])
Hxfr1: evar_is_fresh_in x AC.[□↦p]
Hxfrp: evar_is_fresh_in x p
HxAC: x ∉ AC_free_evars AC
Hwf': well_formed (exists_quantify x AC.[□↦p^{evar:0↦x}])
Hwfeo: well_formed p^{evar:0↦x}
Hwf'p0: well_formed (exists_quantify x (AC.[□↦p^{evar:0↦x}] $ p0))
ProofInfoLe (ExGen := ∅, SVSubst := ∅, KT := false, FP := {[p0 ↾ Prf]}) (ExGen := {[x]}, SVSubst := ∅, KT := false, FP := {[p0 ↾ Prf]} ∪ frames_of_AC AC)
Σ: Signature
Γ: Theory
AC: Application_context
p0: Pattern
Prf: well_formed p0
p: Pattern
x: evar
Hx: evar_is_fresh_in x (AC.[□↦p] $ p0)
Hwf: well_formed (ex , p) = true
IH2: Γ ⊢i exists_quantify x AC.[□↦p^{evar:0↦x}] $ p0 ---> AC.[□↦ex , p] $ p0 using (ExGen := {[x]}, SVSubst := ∅, KT := false, FP := {[p0 ↾ Prf]} ∪ frames_of_AC AC)
Hwfex: well_formed (ex , AC.[□↦p])
Hxfr1: evar_is_fresh_in x AC.[□↦p]
Hxfrp: evar_is_fresh_in x p
HxAC: x ∉ AC_free_evars AC
Hwf': well_formed (exists_quantify x AC.[□↦p^{evar:0↦x}])
Hwfeo: well_formed p^{evar:0↦x}
Hwf'p0: well_formed (exists_quantify x (AC.[□↦p^{evar:0↦x}] $ p0))

ProofInfoLe (ExGen := ∅, SVSubst := ∅, KT := false, FP := {[p0 ↾ Prf]}) (ExGen := {[x]}, SVSubst := ∅, KT := false, FP := {[p0 ↾ Prf]} ∪ frames_of_AC AC)
try_solve_pile.
Σ: Signature
Γ: Theory
AC: Application_context
p0: Pattern
Prf: well_formed p0
p: Pattern
x: evar
Hx: evar_is_fresh_in x (AC.[□↦p] $ p0)
Hwf: well_formed (ex , p) = true
IH2: Γ ⊢i exists_quantify x AC.[□↦p^{evar:0↦x}] $ p0 ---> AC.[□↦ex , p] $ p0 using (ExGen := {[x]}, SVSubst := ∅, KT := false, FP := {[p0 ↾ Prf]} ∪ frames_of_AC AC)
Hwfex: well_formed (ex , AC.[□↦p])
Hxfr1: evar_is_fresh_in x AC.[□↦p]
Hxfrp: evar_is_fresh_in x p
HxAC: x ∉ AC_free_evars AC
Hwf': well_formed (exists_quantify x AC.[□↦p^{evar:0↦x}])
Hwfeo: well_formed p^{evar:0↦x}
Hwf'p0: well_formed (exists_quantify x (AC.[□↦p^{evar:0↦x}] $ p0))

Γ ⊢i AC.[□↦p^{evar:0↦x}] ---> exists_quantify x AC.[□↦p^{evar:0↦x}] using (ExGen := {[x]}, SVSubst := ∅, KT := false, FP := {[p0 ↾ Prf]} ∪ frames_of_AC AC)
Σ: Signature
Γ: Theory
AC: Application_context
p0: Pattern
Prf: well_formed p0
p: Pattern
x: evar
Hx: evar_is_fresh_in x (AC.[□↦p] $ p0)
Hwf: well_formed (ex , p) = true
IH2: Γ ⊢i exists_quantify x AC.[□↦p^{evar:0↦x}] $ p0 ---> AC.[□↦ex , p] $ p0 using (ExGen := {[x]}, SVSubst := ∅, KT := false, FP := {[p0 ↾ Prf]} ∪ frames_of_AC AC)
Hwfex: well_formed (ex , AC.[□↦p])
Hxfr1: evar_is_fresh_in x AC.[□↦p]
Hxfrp: evar_is_fresh_in x p
HxAC: x ∉ AC_free_evars AC
Hwf': well_formed (exists_quantify x AC.[□↦p^{evar:0↦x}])
Hwfeo: well_formed p^{evar:0↦x}
Hwf'p0: well_formed (exists_quantify x (AC.[□↦p^{evar:0↦x}] $ p0))

Γ ⊢i AC.[□↦p^[evar:0↦patt_free_evar x]] ---> exists_quantify x AC.[□↦p^[evar:0↦patt_free_evar x]] using (ExGen := {[x]}, SVSubst := ∅, KT := false, FP := {[p0 ↾ Prf]} ∪ frames_of_AC AC)
Σ: Signature
Γ: Theory
AC: Application_context
p0: Pattern
Prf: well_formed p0
p: Pattern
x: evar
Hx: evar_is_fresh_in x (AC.[□↦p] $ p0)
Hwf: well_formed (ex , p) = true
IH2: Γ ⊢i exists_quantify x AC.[□↦p^{evar:0↦x}] $ p0 ---> AC.[□↦ex , p] $ p0 using (ExGen := {[x]}, SVSubst := ∅, KT := false, FP := {[p0 ↾ Prf]} ∪ frames_of_AC AC)
Hwfex: well_formed (ex , AC.[□↦p])
Hxfr1: evar_is_fresh_in x AC.[□↦p]
Hxfrp: evar_is_fresh_in x p
HxAC: x ∉ AC_free_evars AC
Hwf': well_formed (exists_quantify x AC.[□↦p^{evar:0↦x}])
Hwfeo: well_formed p^{evar:0↦x}
Hwf'p0: well_formed (exists_quantify x (AC.[□↦p^{evar:0↦x}] $ p0))

Γ ⊢i AC.[□↦p]^[evar:0↦patt_free_evar x] ---> exists_quantify x AC.[□↦p]^[evar:0↦patt_free_evar x] using (ExGen := {[x]}, SVSubst := ∅, KT := false, FP := {[p0 ↾ Prf]} ∪ frames_of_AC AC)
Σ: Signature
Γ: Theory
AC: Application_context
p0: Pattern
Prf: well_formed p0
p: Pattern
x: evar
Hx: evar_is_fresh_in x (AC.[□↦p] $ p0)
Hwf: well_formed (ex , p) = true
IH2: Γ ⊢i exists_quantify x AC.[□↦p^{evar:0↦x}] $ p0 ---> AC.[□↦ex , p] $ p0 using (ExGen := {[x]}, SVSubst := ∅, KT := false, FP := {[p0 ↾ Prf]} ∪ frames_of_AC AC)
Hwfex: well_formed (ex , AC.[□↦p])
Hxfr1: evar_is_fresh_in x AC.[□↦p]
Hxfrp: evar_is_fresh_in x p
HxAC: x ∉ AC_free_evars AC
Hwf': well_formed (exists_quantify x AC.[□↦p^{evar:0↦x}])
Hwfeo: well_formed p^{evar:0↦x}
Hwf'p0: well_formed (exists_quantify x (AC.[□↦p^{evar:0↦x}] $ p0))

Γ ⊢i AC.[□↦p]^[evar:0↦patt_free_evar x] ---> (ex , AC.[□↦p]^[evar:0↦patt_free_evar x]^{{evar:x↦0}}) using (ExGen := {[x]}, SVSubst := ∅, KT := false, FP := {[p0 ↾ Prf]} ∪ frames_of_AC AC)
Σ: Signature
Γ: Theory
AC: Application_context
p0: Pattern
Prf: well_formed p0
p: Pattern
x: evar
Hx: evar_is_fresh_in x (AC.[□↦p] $ p0)
Hwf: well_formed (ex , p) = true
IH2: Γ ⊢i exists_quantify x AC.[□↦p^{evar:0↦x}] $ p0 ---> AC.[□↦ex , p] $ p0 using (ExGen := {[x]}, SVSubst := ∅, KT := false, FP := {[p0 ↾ Prf]} ∪ frames_of_AC AC)
Hwfex: well_formed (ex , AC.[□↦p])
Hxfr1: evar_is_fresh_in x AC.[□↦p]
Hxfrp: evar_is_fresh_in x p
HxAC: x ∉ AC_free_evars AC
Hwf': well_formed (exists_quantify x AC.[□↦p^{evar:0↦x}])
Hwfeo: well_formed p^{evar:0↦x}
Hwf'p0: well_formed (exists_quantify x (AC.[□↦p^{evar:0↦x}] $ p0))

Γ ⊢i AC.[□↦p]^[evar:0↦patt_free_evar x] ---> (ex , AC.[□↦p]^[evar:0↦patt_free_evar x]^{{evar:x↦0}}) using (ExGen := {[x]}, SVSubst := ∅, KT := false, FP := {[p0 ↾ Prf]} ∪ frames_of_AC AC)
Σ: Signature
Γ: Theory
AC: Application_context
p0: Pattern
Prf: well_formed p0
p: Pattern
x: evar
Hx: evar_is_fresh_in x (AC.[□↦p] $ p0)
Hwf: well_formed (ex , p) = true
IH2: Γ ⊢i exists_quantify x AC.[□↦p^{evar:0↦x}] $ p0 ---> AC.[□↦ex , p] $ p0 using (ExGen := {[x]}, SVSubst := ∅, KT := false, FP := {[p0 ↾ Prf]} ∪ frames_of_AC AC)
Hwfex: well_formed (ex , AC.[□↦p])
Hxfr1: evar_is_fresh_in x AC.[□↦p]
Hxfrp: evar_is_fresh_in x p
HxAC: x ∉ AC_free_evars AC
Hwf': well_formed (exists_quantify x AC.[□↦p^{evar:0↦x}])
Hwfeo: well_formed p^{evar:0↦x}
Hwf'p0: well_formed (exists_quantify x (AC.[□↦p^{evar:0↦x}] $ p0))

Γ ⊢i AC.[□↦p]^{evar:0↦x} ---> (ex , AC.[□↦p]^{evar:0↦x}^{{evar:x↦0}}) using (ExGen := {[x]}, SVSubst := ∅, KT := false, FP := {[p0 ↾ Prf]} ∪ frames_of_AC AC)
Σ: Signature
Γ: Theory
AC: Application_context
p0: Pattern
Prf: well_formed p0
p: Pattern
x: evar
Hx: evar_is_fresh_in x (AC.[□↦p] $ p0)
Hwf: well_formed (ex , p) = true
IH2: Γ ⊢i exists_quantify x AC.[□↦p^{evar:0↦x}] $ p0 ---> AC.[□↦ex , p] $ p0 using (ExGen := {[x]}, SVSubst := ∅, KT := false, FP := {[p0 ↾ Prf]} ∪ frames_of_AC AC)
Hwfex: well_formed (ex , AC.[□↦p])
Hxfr1: evar_is_fresh_in x AC.[□↦p]
Hxfrp: evar_is_fresh_in x p
HxAC: x ∉ AC_free_evars AC
Hwf': well_formed (exists_quantify x AC.[□↦p^{evar:0↦x}])
Hwfeo: well_formed p^{evar:0↦x}
Hwf'p0: well_formed (exists_quantify x (AC.[□↦p^{evar:0↦x}] $ p0))

Γ ⊢i AC.[□↦p]^{evar:0↦x} ---> (ex , AC.[□↦p]) using (ExGen := {[x]}, SVSubst := ∅, KT := false, FP := {[p0 ↾ Prf]} ∪ frames_of_AC AC)
Σ: Signature
Γ: Theory
AC: Application_context
p0: Pattern
Prf: well_formed p0
p: Pattern
x: evar
Hx: evar_is_fresh_in x (AC.[□↦p] $ p0)
Hwf: well_formed (ex , p) = true
IH2: Γ ⊢i exists_quantify x AC.[□↦p^{evar:0↦x}] $ p0 ---> AC.[□↦ex , p] $ p0 using (ExGen := {[x]}, SVSubst := ∅, KT := false, FP := {[p0 ↾ Prf]} ∪ frames_of_AC AC)
Hwfex: well_formed (ex , AC.[□↦p])
Hxfr1: evar_is_fresh_in x AC.[□↦p]
Hxfrp: evar_is_fresh_in x p
HxAC: x ∉ AC_free_evars AC
Hwf': well_formed (exists_quantify x AC.[□↦p^{evar:0↦x}])
Hwfeo: well_formed p^{evar:0↦x}
Hwf'p0: well_formed (exists_quantify x (AC.[□↦p^{evar:0↦x}] $ p0))
well_formed_closed_ex_aux AC.[□↦p] 1
Σ: Signature
Γ: Theory
AC: Application_context
p0: Pattern
Prf: well_formed p0
p: Pattern
x: evar
Hx: evar_is_fresh_in x (AC.[□↦p] $ p0)
Hwf: well_formed (ex , p) = true
IH2: Γ ⊢i exists_quantify x AC.[□↦p^{evar:0↦x}] $ p0 ---> AC.[□↦ex , p] $ p0 using (ExGen := {[x]}, SVSubst := ∅, KT := false, FP := {[p0 ↾ Prf]} ∪ frames_of_AC AC)
Hwfex: well_formed (ex , AC.[□↦p])
Hxfr1: evar_is_fresh_in x AC.[□↦p]
Hxfrp: evar_is_fresh_in x p
HxAC: x ∉ AC_free_evars AC
Hwf': well_formed (exists_quantify x AC.[□↦p^{evar:0↦x}])
Hwfeo: well_formed p^{evar:0↦x}
Hwf'p0: well_formed (exists_quantify x (AC.[□↦p^{evar:0↦x}] $ p0))

Γ ⊢i AC.[□↦p]^{evar:0↦x} ---> (ex , AC.[□↦p]) using (ExGen := {[x]}, SVSubst := ∅, KT := false, FP := {[p0 ↾ Prf]} ∪ frames_of_AC AC)
Σ: Signature
Γ: Theory
AC: Application_context
p0: Pattern
Prf: well_formed p0
p: Pattern
x: evar
Hx: evar_is_fresh_in x (AC.[□↦p] $ p0)
Hwf: well_formed (ex , p) = true
IH2: Γ ⊢i exists_quantify x AC.[□↦p^{evar:0↦x}] $ p0 ---> AC.[□↦ex , p] $ p0 using (ExGen := {[x]}, SVSubst := ∅, KT := false, FP := {[p0 ↾ Prf]} ∪ frames_of_AC AC)
Hwfex: well_formed (ex , AC.[□↦p])
Hxfr1: evar_is_fresh_in x AC.[□↦p]
Hxfrp: evar_is_fresh_in x p
HxAC: x ∉ AC_free_evars AC
Hwf': well_formed (exists_quantify x AC.[□↦p^{evar:0↦x}])
Hwfeo: well_formed p^{evar:0↦x}
Hwf'p0: well_formed (exists_quantify x (AC.[□↦p^{evar:0↦x}] $ p0))

Γ ⊢i AC.[□↦p]^{evar:0↦x} ---> (ex , AC.[□↦p]) using BasicReasoning
apply Ex_quan; auto.
Σ: Signature
Γ: Theory
p0: Pattern
AC: Application_context
Prf: well_formed p0
p: Pattern
x: evar
Hx: evar_is_fresh_in x (p0 $ᵣ AC).[□↦p]
Hwf: well_formed (ex , p) = true
IHAC: evar_is_fresh_in x AC.[□↦p] → Γ ⊢i AC.[□↦ex , p] <---> exists_quantify x AC.[□↦p^{evar:0↦x}] using (ExGen := {[x]}, SVSubst := ∅, KT := false, FP := frames_of_AC AC)

Γ ⊢i p0 $ AC.[□↦ex , p] <---> exists_quantify x (p0 $ AC.[□↦p^{evar:0↦x}]) using (ExGen := {[x]}, SVSubst := ∅, KT := false, FP := {[p0 ↾ Prf]} ∪ frames_of_AC AC)
Σ: Signature
Γ: Theory
p0: Pattern
AC: Application_context
Prf: well_formed p0
p: Pattern
x: evar
Hx: evar_is_fresh_in x (p0 $ᵣ AC).[□↦p]
Hwf: well_formed (ex , p) = true
IHAC: evar_is_fresh_in x AC.[□↦p] → Γ ⊢i AC.[□↦ex , p] <---> exists_quantify x AC.[□↦p^{evar:0↦x}] using (ExGen := {[x]}, SVSubst := ∅, KT := false, FP := frames_of_AC AC)

well_formed (ex , AC.[□↦p])
Σ: Signature
Γ: Theory
p0: Pattern
AC: Application_context
Prf: well_formed p0
p: Pattern
x: evar
Hx: evar_is_fresh_in x (p0 $ᵣ AC).[□↦p]
Hwf: well_formed (ex , p) = true
IHAC: evar_is_fresh_in x AC.[□↦p] → Γ ⊢i AC.[□↦ex , p] <---> exists_quantify x AC.[□↦p^{evar:0↦x}] using (ExGen := {[x]}, SVSubst := ∅, KT := false, FP := frames_of_AC AC)
Hwfex: well_formed (ex , AC.[□↦p])
Γ ⊢i p0 $ AC.[□↦ex , p] <---> exists_quantify x (p0 $ AC.[□↦p^{evar:0↦x}]) using (ExGen := {[x]}, SVSubst := ∅, KT := false, FP := {[p0 ↾ Prf]} ∪ frames_of_AC AC)
Σ: Signature
Γ: Theory
p0: Pattern
AC: Application_context
Prf: well_formed p0
p: Pattern
x: evar
Hx: evar_is_fresh_in x (p0 $ᵣ AC).[□↦p]
Hwf: well_formed (ex , p) = true
IHAC: evar_is_fresh_in x AC.[□↦p] → Γ ⊢i AC.[□↦ex , p] <---> exists_quantify x AC.[□↦p^{evar:0↦x}] using (ExGen := {[x]}, SVSubst := ∅, KT := false, FP := frames_of_AC AC)

well_formed (ex , AC.[□↦p])
Σ: Signature
Γ: Theory
p0: Pattern
AC: Application_context
Prf: well_formed p0
p: Pattern
x: evar
Hx: evar_is_fresh_in x (p0 $ᵣ AC).[□↦p]
Hwf: well_formed (ex , p) = true
IHAC: evar_is_fresh_in x AC.[□↦p] → Γ ⊢i AC.[□↦ex , p] <---> exists_quantify x AC.[□↦p^{evar:0↦x}] using (ExGen := {[x]}, SVSubst := ∅, KT := false, FP := frames_of_AC AC)

well_formed_positive (ex , AC.[□↦p]) && well_formed_closed (ex , AC.[□↦p])
Σ: Signature
Γ: Theory
p0: Pattern
AC: Application_context
Prf: well_formed p0
p: Pattern
x: evar
Hx: evar_is_fresh_in x (p0 $ᵣ AC).[□↦p]
Hwf: well_formed (ex , p) = true
IHAC: evar_is_fresh_in x AC.[□↦p] → Γ ⊢i AC.[□↦ex , p] <---> exists_quantify x AC.[□↦p^{evar:0↦x}] using (ExGen := {[x]}, SVSubst := ∅, KT := false, FP := frames_of_AC AC)

well_formed_positive AC.[□↦p] && well_formed_closed (ex , AC.[□↦p])
Σ: Signature
Γ: Theory
p0: Pattern
AC: Application_context
Prf: well_formed p0
p: Pattern
x: evar
Hx: evar_is_fresh_in x (p0 $ᵣ AC).[□↦p]
Hwf: well_formed (ex , p) = true
IHAC: evar_is_fresh_in x AC.[□↦p] → Γ ⊢i AC.[□↦ex , p] <---> exists_quantify x AC.[□↦p^{evar:0↦x}] using (ExGen := {[x]}, SVSubst := ∅, KT := false, FP := frames_of_AC AC)
Hwf': well_formed (ex , p) = true

well_formed_positive AC.[□↦p] && well_formed_closed (ex , AC.[□↦p])
Σ: Signature
Γ: Theory
p0: Pattern
AC: Application_context
Prf: well_formed p0
p: Pattern
x: evar
Hx: evar_is_fresh_in x (p0 $ᵣ AC).[□↦p]
Hwf: well_formed_positive (ex , p) && well_formed_closed (ex , p) = true
IHAC: evar_is_fresh_in x AC.[□↦p] → Γ ⊢i AC.[□↦ex , p] <---> exists_quantify x AC.[□↦p^{evar:0↦x}] using (ExGen := {[x]}, SVSubst := ∅, KT := false, FP := frames_of_AC AC)
Hwf': well_formed (ex , p) = true

well_formed_positive AC.[□↦p] && well_formed_closed (ex , AC.[□↦p])
Σ: Signature
Γ: Theory
p0: Pattern
AC: Application_context
Prf: well_formed p0
p: Pattern
x: evar
Hx: evar_is_fresh_in x (p0 $ᵣ AC).[□↦p]
Hwf: well_formed_positive p && well_formed_closed (ex , p) = true
IHAC: evar_is_fresh_in x AC.[□↦p] → Γ ⊢i AC.[□↦ex , p] <---> exists_quantify x AC.[□↦p^{evar:0↦x}] using (ExGen := {[x]}, SVSubst := ∅, KT := false, FP := frames_of_AC AC)
Hwf': well_formed (ex , p) = true

well_formed_positive AC.[□↦p] && well_formed_closed (ex , AC.[□↦p])
Σ: Signature
Γ: Theory
p0: Pattern
AC: Application_context
Prf: well_formed p0
p: Pattern
x: evar
Hx: evar_is_fresh_in x (p0 $ᵣ AC).[□↦p]
Hwf: well_formed_positive p = true ∧ well_formed_closed (ex , p) = true
IHAC: evar_is_fresh_in x AC.[□↦p] → Γ ⊢i AC.[□↦ex , p] <---> exists_quantify x AC.[□↦p^{evar:0↦x}] using (ExGen := {[x]}, SVSubst := ∅, KT := false, FP := frames_of_AC AC)
Hwf': well_formed (ex , p) = true

well_formed_positive AC.[□↦p] && well_formed_closed (ex , AC.[□↦p])
Σ: Signature
Γ: Theory
p0: Pattern
AC: Application_context
Prf: well_formed p0
p: Pattern
x: evar
Hx: evar_is_fresh_in x (p0 $ᵣ AC).[□↦p]
Hwfp: well_formed_positive p = true
Hwfc: well_formed_closed (ex , p) = true
IHAC: evar_is_fresh_in x AC.[□↦p] → Γ ⊢i AC.[□↦ex , p] <---> exists_quantify x AC.[□↦p^{evar:0↦x}] using (ExGen := {[x]}, SVSubst := ∅, KT := false, FP := frames_of_AC AC)
Hwf': well_formed (ex , p) = true

well_formed_positive AC.[□↦p] && well_formed_closed (ex , AC.[□↦p])
Σ: Signature
Γ: Theory
p0: Pattern
AC: Application_context
Prf: well_formed p0
p: Pattern
x: evar
Hx: evar_is_fresh_in x (p0 $ᵣ AC).[□↦p]
Hwfp: well_formed_positive AC.[□↦p] = true
Hwfc: well_formed_closed (ex , p) = true
IHAC: evar_is_fresh_in x AC.[□↦p] → Γ ⊢i AC.[□↦ex , p] <---> exists_quantify x AC.[□↦p^{evar:0↦x}] using (ExGen := {[x]}, SVSubst := ∅, KT := false, FP := frames_of_AC AC)
Hwf': well_formed (ex , p) = true

well_formed_positive AC.[□↦p] && well_formed_closed (ex , AC.[□↦p])
Σ: Signature
Γ: Theory
p0: Pattern
AC: Application_context
Prf: well_formed p0
p: Pattern
x: evar
Hx: evar_is_fresh_in x (p0 $ᵣ AC).[□↦p]
Hwfp: well_formed_positive AC.[□↦p] = true
Hwfc: well_formed_closed (ex , p) = true
IHAC: evar_is_fresh_in x AC.[□↦p] → Γ ⊢i AC.[□↦ex , p] <---> exists_quantify x AC.[□↦p^{evar:0↦x}] using (ExGen := {[x]}, SVSubst := ∅, KT := false, FP := frames_of_AC AC)
Hwf': well_formed (ex , p) = true

true && well_formed_closed (ex , AC.[□↦p])
Σ: Signature
Γ: Theory
p0: Pattern
AC: Application_context
Prf: well_formed p0
p: Pattern
x: evar
Hx: evar_is_fresh_in x (p0 $ᵣ AC).[□↦p]
Hwfp: well_formed_positive AC.[□↦p] = true
Hwfc: well_formed_closed (ex , p) = true
IHAC: evar_is_fresh_in x AC.[□↦p] → Γ ⊢i AC.[□↦ex , p] <---> exists_quantify x AC.[□↦p^{evar:0↦x}] using (ExGen := {[x]}, SVSubst := ∅, KT := false, FP := frames_of_AC AC)
Hwf': well_formed (ex , p) = true

well_formed_closed (ex , AC.[□↦p])
Σ: Signature
Γ: Theory
p0: Pattern
AC: Application_context
Prf: well_formed p0
p: Pattern
x: evar
Hx: evar_is_fresh_in x (p0 $ᵣ AC).[□↦p]
Hwfc: well_formed_closed (ex , p) = true
IHAC: evar_is_fresh_in x AC.[□↦p] → Γ ⊢i AC.[□↦ex , p] <---> exists_quantify x AC.[□↦p^{evar:0↦x}] using (ExGen := {[x]}, SVSubst := ∅, KT := false, FP := frames_of_AC AC)
Hwf': well_formed (ex , p) = true

well_formed_closed (ex , AC.[□↦p])
Σ: Signature
Γ: Theory
p0: Pattern
AC: Application_context
Prf: well_formed p0
p: Pattern
x: evar
Hx: evar_is_fresh_in x (p0 $ᵣ AC).[□↦p]
Hwfc: well_formed_closed (ex , p) = true
IHAC: evar_is_fresh_in x AC.[□↦p] → Γ ⊢i AC.[□↦ex , p] <---> exists_quantify x AC.[□↦p^{evar:0↦x}] using (ExGen := {[x]}, SVSubst := ∅, KT := false, FP := frames_of_AC AC)
Hwf': well_formed (ex , p) = true

well_formed_closed_mu_aux (ex , AC.[□↦p]) 0 && well_formed_closed_ex_aux (ex , AC.[□↦p]) 0
Σ: Signature
Γ: Theory
p0: Pattern
AC: Application_context
Prf: well_formed p0
p: Pattern
x: evar
Hx: evar_is_fresh_in x (p0 $ᵣ AC).[□↦p]
Hwfc: well_formed_closed_mu_aux (ex , p) 0 && well_formed_closed_ex_aux (ex , p) 0 = true
IHAC: evar_is_fresh_in x AC.[□↦p] → Γ ⊢i AC.[□↦ex , p] <---> exists_quantify x AC.[□↦p^{evar:0↦x}] using (ExGen := {[x]}, SVSubst := ∅, KT := false, FP := frames_of_AC AC)
Hwf': well_formed (ex , p) = true

well_formed_closed_mu_aux (ex , AC.[□↦p]) 0 && well_formed_closed_ex_aux (ex , AC.[□↦p]) 0
Σ: Signature
Γ: Theory
p0: Pattern
AC: Application_context
Prf: well_formed p0
p: Pattern
x: evar
Hx: evar_is_fresh_in x (p0 $ᵣ AC).[□↦p]
Hwfc: well_formed_closed_mu_aux p 0 && well_formed_closed_ex_aux p 1 = true
IHAC: evar_is_fresh_in x AC.[□↦p] → Γ ⊢i AC.[□↦ex , p] <---> exists_quantify x AC.[□↦p^{evar:0↦x}] using (ExGen := {[x]}, SVSubst := ∅, KT := false, FP := frames_of_AC AC)
Hwf': well_formed (ex , p) = true

well_formed_closed_mu_aux (ex , AC.[□↦p]) 0 && well_formed_closed_ex_aux (ex , AC.[□↦p]) 0
Σ: Signature
Γ: Theory
p0: Pattern
AC: Application_context
Prf: well_formed p0
p: Pattern
x: evar
Hx: evar_is_fresh_in x (p0 $ᵣ AC).[□↦p]
Hwfc: well_formed_closed_mu_aux p 0 && well_formed_closed_ex_aux p 1 = true
IHAC: evar_is_fresh_in x AC.[□↦p] → Γ ⊢i AC.[□↦ex , p] <---> exists_quantify x AC.[□↦p^{evar:0↦x}] using (ExGen := {[x]}, SVSubst := ∅, KT := false, FP := frames_of_AC AC)
Hwf': well_formed (ex , p) = true

well_formed_closed_mu_aux AC.[□↦p] 0 && well_formed_closed_ex_aux AC.[□↦p] 1
Σ: Signature
Γ: Theory
p0: Pattern
AC: Application_context
Prf: well_formed p0
p: Pattern
x: evar
Hx: evar_is_fresh_in x (p0 $ᵣ AC).[□↦p]
Hwfc: well_formed_closed_mu_aux p 0 && well_formed_closed_ex_aux p 1 = true
IHAC: evar_is_fresh_in x AC.[□↦p] → Γ ⊢i AC.[□↦ex , p] <---> exists_quantify x AC.[□↦p^{evar:0↦x}] using (ExGen := {[x]}, SVSubst := ∅, KT := false, FP := frames_of_AC AC)
Hwf': well_formed (ex , p) = true

well_formed_closed_mu_aux AC.[□↦p] 0 = true
Σ: Signature
Γ: Theory
p0: Pattern
AC: Application_context
Prf: well_formed p0
p: Pattern
x: evar
Hx: evar_is_fresh_in x (p0 $ᵣ AC).[□↦p]
Hwfc: well_formed_closed_mu_aux p 0 && well_formed_closed_ex_aux p 1 = true
IHAC: evar_is_fresh_in x AC.[□↦p] → Γ ⊢i AC.[□↦ex , p] <---> exists_quantify x AC.[□↦p^{evar:0↦x}] using (ExGen := {[x]}, SVSubst := ∅, KT := false, FP := frames_of_AC AC)
Hwf': well_formed (ex , p) = true
well_formed_closed_ex_aux AC.[□↦p] 1 = true
Σ: Signature
Γ: Theory
p0: Pattern
AC: Application_context
Prf: well_formed p0
p: Pattern
x: evar
Hx: evar_is_fresh_in x (p0 $ᵣ AC).[□↦p]
Hwfc: well_formed_closed_mu_aux p 0 && well_formed_closed_ex_aux p 1 = true
IHAC: evar_is_fresh_in x AC.[□↦p] → Γ ⊢i AC.[□↦ex , p] <---> exists_quantify x AC.[□↦p^{evar:0↦x}] using (ExGen := {[x]}, SVSubst := ∅, KT := false, FP := frames_of_AC AC)
Hwf': well_formed (ex , p) = true

well_formed_closed_mu_aux AC.[□↦p] 0 = true
Σ: Signature
Γ: Theory
p0: Pattern
AC: Application_context
Prf: well_formed p0
p: Pattern
x: evar
Hx: evar_is_fresh_in x (p0 $ᵣ AC).[□↦p]
Hwfc: well_formed_closed_mu_aux p 0 && well_formed_closed_ex_aux p 1 = true
IHAC: evar_is_fresh_in x AC.[□↦p] → Γ ⊢i AC.[□↦ex , p] <---> exists_quantify x AC.[□↦p^{evar:0↦x}] using (ExGen := {[x]}, SVSubst := ∅, KT := false, FP := frames_of_AC AC)
Hwf': well_formed (ex , p) = true

well_formed_closed_mu_aux p 0 = true
Σ: Signature
Γ: Theory
p0: Pattern
AC: Application_context
Prf: well_formed p0
p: Pattern
x: evar
Hx: evar_is_fresh_in x (p0 $ᵣ AC).[□↦p]
H: well_formed_closed_mu_aux p 0 = true
H0: well_formed_closed_ex_aux p 1 = true
IHAC: evar_is_fresh_in x AC.[□↦p] → Γ ⊢i AC.[□↦ex , p] <---> exists_quantify x AC.[□↦p^{evar:0↦x}] using (ExGen := {[x]}, SVSubst := ∅, KT := false, FP := frames_of_AC AC)
Hwf': well_formed (ex , p) = true

well_formed_closed_mu_aux p 0 = true
assumption.
Σ: Signature
Γ: Theory
p0: Pattern
AC: Application_context
Prf: well_formed p0
p: Pattern
x: evar
Hx: evar_is_fresh_in x (p0 $ᵣ AC).[□↦p]
Hwfc: well_formed_closed_mu_aux p 0 && well_formed_closed_ex_aux p 1 = true
IHAC: evar_is_fresh_in x AC.[□↦p] → Γ ⊢i AC.[□↦ex , p] <---> exists_quantify x AC.[□↦p^{evar:0↦x}] using (ExGen := {[x]}, SVSubst := ∅, KT := false, FP := frames_of_AC AC)
Hwf': well_formed (ex , p) = true

well_formed_closed_ex_aux AC.[□↦p] 1 = true
Σ: Signature
Γ: Theory
p0: Pattern
AC: Application_context
Prf: well_formed p0
p: Pattern
x: evar
Hx: evar_is_fresh_in x (p0 $ᵣ AC).[□↦p]
Hwfc: well_formed_closed_mu_aux p 0 && well_formed_closed_ex_aux p 1 = true
IHAC: evar_is_fresh_in x AC.[□↦p] → Γ ⊢i AC.[□↦ex , p] <---> exists_quantify x AC.[□↦p^{evar:0↦x}] using (ExGen := {[x]}, SVSubst := ∅, KT := false, FP := frames_of_AC AC)
Hwf': well_formed (ex , p) = true

well_formed_closed_ex_aux p 1 = true
Σ: Signature
Γ: Theory
p0: Pattern
AC: Application_context
Prf: well_formed p0
p: Pattern
x: evar
Hx: evar_is_fresh_in x (p0 $ᵣ AC).[□↦p]
H: well_formed_closed_mu_aux p 0 = true
H0: well_formed_closed_ex_aux p 1 = true
IHAC: evar_is_fresh_in x AC.[□↦p] → Γ ⊢i AC.[□↦ex , p] <---> exists_quantify x AC.[□↦p^{evar:0↦x}] using (ExGen := {[x]}, SVSubst := ∅, KT := false, FP := frames_of_AC AC)
Hwf': well_formed (ex , p) = true

well_formed_closed_ex_aux p 1 = true
assumption.
Σ: Signature
Γ: Theory
p0: Pattern
AC: Application_context
Prf: well_formed p0
p: Pattern
x: evar
Hx: evar_is_fresh_in x (p0 $ᵣ AC).[□↦p]
Hwf: well_formed (ex , p) = true
IHAC: evar_is_fresh_in x AC.[□↦p] → Γ ⊢i AC.[□↦ex , p] <---> exists_quantify x AC.[□↦p^{evar:0↦x}] using (ExGen := {[x]}, SVSubst := ∅, KT := false, FP := frames_of_AC AC)
Hwfex: well_formed (ex , AC.[□↦p])

Γ ⊢i p0 $ AC.[□↦ex , p] <---> exists_quantify x (p0 $ AC.[□↦p^{evar:0↦x}]) using (ExGen := {[x]}, SVSubst := ∅, KT := false, FP := {[p0 ↾ Prf]} ∪ frames_of_AC AC)
Σ: Signature
Γ: Theory
p0: Pattern
AC: Application_context
Prf: well_formed p0
p: Pattern
x: evar
Hx: evar_is_fresh_in x (p0 $ᵣ AC).[□↦p]
Hwf: well_formed (ex , p) = true
IHAC: evar_is_fresh_in x AC.[□↦p] → Γ ⊢i AC.[□↦ex , p] <---> exists_quantify x AC.[□↦p^{evar:0↦x}] using (ExGen := {[x]}, SVSubst := ∅, KT := false, FP := frames_of_AC AC)
Hwfex: well_formed (ex , AC.[□↦p])

evar_is_fresh_in x AC.[□↦p]
Σ: Signature
Γ: Theory
p0: Pattern
AC: Application_context
Prf: well_formed p0
p: Pattern
x: evar
Hx: evar_is_fresh_in x (p0 $ᵣ AC).[□↦p]
Hwf: well_formed (ex , p) = true
IHAC: evar_is_fresh_in x AC.[□↦p] → Γ ⊢i AC.[□↦ex , p] <---> exists_quantify x AC.[□↦p^{evar:0↦x}] using (ExGen := {[x]}, SVSubst := ∅, KT := false, FP := frames_of_AC AC)
Hwfex: well_formed (ex , AC.[□↦p])
Hxfr1: evar_is_fresh_in x AC.[□↦p]
Γ ⊢i p0 $ AC.[□↦ex , p] <---> exists_quantify x (p0 $ AC.[□↦p^{evar:0↦x}]) using (ExGen := {[x]}, SVSubst := ∅, KT := false, FP := {[p0 ↾ Prf]} ∪ frames_of_AC AC)
Σ: Signature
Γ: Theory
p0: Pattern
AC: Application_context
Prf: well_formed p0
p: Pattern
x: evar
Hx: evar_is_fresh_in x (p0 $ᵣ AC).[□↦p]
Hwf: well_formed (ex , p) = true
IHAC: evar_is_fresh_in x AC.[□↦p] → Γ ⊢i AC.[□↦ex , p] <---> exists_quantify x AC.[□↦p^{evar:0↦x}] using (ExGen := {[x]}, SVSubst := ∅, KT := false, FP := frames_of_AC AC)
Hwfex: well_formed (ex , AC.[□↦p])

evar_is_fresh_in x AC.[□↦p]
Σ: Signature
Γ: Theory
p0: Pattern
AC: Application_context
Prf: well_formed p0
p: Pattern
x: evar
Hx: evar_is_fresh_in x (p0 $ AC.[□↦p])
Hwf: well_formed (ex , p) = true
IHAC: evar_is_fresh_in x AC.[□↦p] → Γ ⊢i AC.[□↦ex , p] <---> exists_quantify x AC.[□↦p^{evar:0↦x}] using (ExGen := {[x]}, SVSubst := ∅, KT := false, FP := frames_of_AC AC)
Hwfex: well_formed (ex , AC.[□↦p])

evar_is_fresh_in x AC.[□↦p]
Σ: Signature
Γ: Theory
p0: Pattern
AC: Application_context
Prf: well_formed p0
p: Pattern
x: evar
Hx: evar_is_fresh_in x (p0 $ AC.[□↦p])
Hwf: well_formed (ex , p) = true
IHAC: evar_is_fresh_in x AC.[□↦p] → Γ ⊢i AC.[□↦ex , p] <---> exists_quantify x AC.[□↦p^{evar:0↦x}] using (ExGen := {[x]}, SVSubst := ∅, KT := false, FP := frames_of_AC AC)
Hwfex: well_formed (ex , AC.[□↦p])

free_evars AC.[□↦p] ⊆ free_evars ?ϕ₂
Σ: Signature
Γ: Theory
p0: Pattern
AC: Application_context
Prf: well_formed p0
p: Pattern
x: evar
Hx: evar_is_fresh_in x (p0 $ AC.[□↦p])
Hwf: well_formed (ex , p) = true
IHAC: evar_is_fresh_in x AC.[□↦p] → Γ ⊢i AC.[□↦ex , p] <---> exists_quantify x AC.[□↦p^{evar:0↦x}] using (ExGen := {[x]}, SVSubst := ∅, KT := false, FP := frames_of_AC AC)
Hwfex: well_formed (ex , AC.[□↦p])
evar_is_fresh_in x ?ϕ₂
Σ: Signature
Γ: Theory
p0: Pattern
AC: Application_context
Prf: well_formed p0
p: Pattern
x: evar
Hx: evar_is_fresh_in x (p0 $ AC.[□↦p])
Hwf: well_formed (ex , p) = true
IHAC: evar_is_fresh_in x AC.[□↦p] → Γ ⊢i AC.[□↦ex , p] <---> exists_quantify x AC.[□↦p^{evar:0↦x}] using (ExGen := {[x]}, SVSubst := ∅, KT := false, FP := frames_of_AC AC)
Hwfex: well_formed (ex , AC.[□↦p])

evar_is_fresh_in x ?ϕ₂
apply Hx.
Σ: Signature
Γ: Theory
p0: Pattern
AC: Application_context
Prf: well_formed p0
p: Pattern
x: evar
Hx: evar_is_fresh_in x (p0 $ AC.[□↦p])
Hwf: well_formed (ex , p) = true
IHAC: evar_is_fresh_in x AC.[□↦p] → Γ ⊢i AC.[□↦ex , p] <---> exists_quantify x AC.[□↦p^{evar:0↦x}] using (ExGen := {[x]}, SVSubst := ∅, KT := false, FP := frames_of_AC AC)
Hwfex: well_formed (ex , AC.[□↦p])

free_evars AC.[□↦p] ⊆ free_evars (p0 $ AC.[□↦p])
solve_free_evars_inclusion 5.
Σ: Signature
Γ: Theory
p0: Pattern
AC: Application_context
Prf: well_formed p0
p: Pattern
x: evar
Hx: evar_is_fresh_in x (p0 $ᵣ AC).[□↦p]
Hwf: well_formed (ex , p) = true
IHAC: evar_is_fresh_in x AC.[□↦p] → Γ ⊢i AC.[□↦ex , p] <---> exists_quantify x AC.[□↦p^{evar:0↦x}] using (ExGen := {[x]}, SVSubst := ∅, KT := false, FP := frames_of_AC AC)
Hwfex: well_formed (ex , AC.[□↦p])
Hxfr1: evar_is_fresh_in x AC.[□↦p]

Γ ⊢i p0 $ AC.[□↦ex , p] <---> exists_quantify x (p0 $ AC.[□↦p^{evar:0↦x}]) using (ExGen := {[x]}, SVSubst := ∅, KT := false, FP := {[p0 ↾ Prf]} ∪ frames_of_AC AC)
Σ: Signature
Γ: Theory
p0: Pattern
AC: Application_context
Prf: well_formed p0
p: Pattern
x: evar
Hx: evar_is_fresh_in x (p0 $ AC.[□↦p])
Hwf: well_formed (ex , p) = true
IHAC: evar_is_fresh_in x AC.[□↦p] → Γ ⊢i AC.[□↦ex , p] <---> exists_quantify x AC.[□↦p^{evar:0↦x}] using (ExGen := {[x]}, SVSubst := ∅, KT := false, FP := frames_of_AC AC)
Hwfex: well_formed (ex , AC.[□↦p])
Hxfr1: evar_is_fresh_in x AC.[□↦p]

Γ ⊢i p0 $ AC.[□↦ex , p] <---> exists_quantify x (p0 $ AC.[□↦p^{evar:0↦x}]) using (ExGen := {[x]}, SVSubst := ∅, KT := false, FP := {[p0 ↾ Prf]} ∪ frames_of_AC AC)
Σ: Signature
Γ: Theory
p0: Pattern
AC: Application_context
Prf: well_formed p0
p: Pattern
x: evar
Hx: evar_is_fresh_in x (p0 $ AC.[□↦p])
Hwf: well_formed (ex , p) = true
IHAC: evar_is_fresh_in x AC.[□↦p] → Γ ⊢i AC.[□↦ex , p] <---> exists_quantify x AC.[□↦p^{evar:0↦x}] using (ExGen := {[x]}, SVSubst := ∅, KT := false, FP := frames_of_AC AC)
Hwfex: well_formed (ex , AC.[□↦p])
Hxfr1, Hxfr1': evar_is_fresh_in x AC.[□↦p]

Γ ⊢i p0 $ AC.[□↦ex , p] <---> exists_quantify x (p0 $ AC.[□↦p^{evar:0↦x}]) using (ExGen := {[x]}, SVSubst := ∅, KT := false, FP := {[p0 ↾ Prf]} ∪ frames_of_AC AC)
Σ: Signature
Γ: Theory
p0: Pattern
AC: Application_context
Prf: well_formed p0
p: Pattern
x: evar
Hx: evar_is_fresh_in x (p0 $ AC.[□↦p])
Hwf: well_formed (ex , p) = true
IHAC: evar_is_fresh_in x AC.[□↦p] → Γ ⊢i AC.[□↦ex , p] <---> exists_quantify x AC.[□↦p^{evar:0↦x}] using (ExGen := {[x]}, SVSubst := ∅, KT := false, FP := frames_of_AC AC)
Hwfex: well_formed (ex , AC.[□↦p])
Hxfr1: evar_is_fresh_in x AC.[□↦p]
Hxfr1': evar_is_fresh_in x p ∧ x ∉ AC_free_evars AC

Γ ⊢i p0 $ AC.[□↦ex , p] <---> exists_quantify x (p0 $ AC.[□↦p^{evar:0↦x}]) using (ExGen := {[x]}, SVSubst := ∅, KT := false, FP := {[p0 ↾ Prf]} ∪ frames_of_AC AC)
Σ: Signature
Γ: Theory
p0: Pattern
AC: Application_context
Prf: well_formed p0
p: Pattern
x: evar
Hx: evar_is_fresh_in x (p0 $ AC.[□↦p])
Hwf: well_formed (ex , p) = true
IHAC: evar_is_fresh_in x AC.[□↦p] → Γ ⊢i AC.[□↦ex , p] <---> exists_quantify x AC.[□↦p^{evar:0↦x}] using (ExGen := {[x]}, SVSubst := ∅, KT := false, FP := frames_of_AC AC)
Hwfex: well_formed (ex , AC.[□↦p])
Hxfr1: evar_is_fresh_in x AC.[□↦p]
Hxfrp: evar_is_fresh_in x p
HxAC: x ∉ AC_free_evars AC

Γ ⊢i p0 $ AC.[□↦ex , p] <---> exists_quantify x (p0 $ AC.[□↦p^{evar:0↦x}]) using (ExGen := {[x]}, SVSubst := ∅, KT := false, FP := {[p0 ↾ Prf]} ∪ frames_of_AC AC)
Σ: Signature
Γ: Theory
p0: Pattern
AC: Application_context
Prf: well_formed p0
p: Pattern
x: evar
Hx: evar_is_fresh_in x (p0 $ AC.[□↦p])
Hwf: well_formed (ex , p) = true
IHAC: evar_is_fresh_in x AC.[□↦p] → Γ ⊢i AC.[□↦ex , p] <---> exists_quantify x AC.[□↦p^{evar:0↦x}] using (ExGen := {[x]}, SVSubst := ∅, KT := false, FP := frames_of_AC AC)
Hwfex: well_formed (ex , AC.[□↦p])
Hxfr1: evar_is_fresh_in x AC.[□↦p]
Hxfrp: evar_is_fresh_in x p
HxAC: x ∉ AC_free_evars AC

well_formed (exists_quantify x AC.[□↦p^{evar:0↦x}])
Σ: Signature
Γ: Theory
p0: Pattern
AC: Application_context
Prf: well_formed p0
p: Pattern
x: evar
Hx: evar_is_fresh_in x (p0 $ AC.[□↦p])
Hwf: well_formed (ex , p) = true
IHAC: evar_is_fresh_in x AC.[□↦p] → Γ ⊢i AC.[□↦ex , p] <---> exists_quantify x AC.[□↦p^{evar:0↦x}] using (ExGen := {[x]}, SVSubst := ∅, KT := false, FP := frames_of_AC AC)
Hwfex: well_formed (ex , AC.[□↦p])
Hxfr1: evar_is_fresh_in x AC.[□↦p]
Hxfrp: evar_is_fresh_in x p
HxAC: x ∉ AC_free_evars AC
Hwf': well_formed (exists_quantify x AC.[□↦p^{evar:0↦x}])
Γ ⊢i p0 $ AC.[□↦ex , p] <---> exists_quantify x (p0 $ AC.[□↦p^{evar:0↦x}]) using (ExGen := {[x]}, SVSubst := ∅, KT := false, FP := {[p0 ↾ Prf]} ∪ frames_of_AC AC)
Σ: Signature
Γ: Theory
p0: Pattern
AC: Application_context
Prf: well_formed p0
p: Pattern
x: evar
Hx: evar_is_fresh_in x (p0 $ AC.[□↦p])
Hwf: well_formed (ex , p) = true
IHAC: evar_is_fresh_in x AC.[□↦p] → Γ ⊢i AC.[□↦ex , p] <---> exists_quantify x AC.[□↦p^{evar:0↦x}] using (ExGen := {[x]}, SVSubst := ∅, KT := false, FP := frames_of_AC AC)
Hwfex: well_formed (ex , AC.[□↦p])
Hxfr1: evar_is_fresh_in x AC.[□↦p]
Hxfrp: evar_is_fresh_in x p
HxAC: x ∉ AC_free_evars AC

well_formed (exists_quantify x AC.[□↦p^{evar:0↦x}])
Σ: Signature
Γ: Theory
p0: Pattern
AC: Application_context
Prf: well_formed p0
p: Pattern
x: evar
Hx: evar_is_fresh_in x (p0 $ AC.[□↦p])
Hwf: well_formed (ex , p) = true
IHAC: evar_is_fresh_in x AC.[□↦p] → Γ ⊢i AC.[□↦ex , p] <---> exists_quantify x AC.[□↦p^{evar:0↦x}] using (ExGen := {[x]}, SVSubst := ∅, KT := false, FP := frames_of_AC AC)
Hwfex: well_formed (ex , AC.[□↦p])
Hxfr1: evar_is_fresh_in x AC.[□↦p]
Hxfrp: evar_is_fresh_in x p
HxAC: x ∉ AC_free_evars AC

well_formed (ex , AC.[□↦p^{evar:0↦x}]^{{evar:x↦0}})
Σ: Signature
AC: Application_context
p: Pattern
x: evar
Hwf: well_formed (ex , p) = true
HxAC: x ∉ AC_free_evars AC

well_formed (ex , AC.[□↦p^{evar:0↦x}]^{{evar:x↦0}})
Σ: Signature
AC: Application_context
p: Pattern
x: evar
Hwf: well_formed (ex , p) = true
HxAC: x ∉ AC_free_evars AC

well_formed (ex , p) = true
apply Hwf.
Σ: Signature
Γ: Theory
p0: Pattern
AC: Application_context
Prf: well_formed p0
p: Pattern
x: evar
Hx: evar_is_fresh_in x (p0 $ AC.[□↦p])
Hwf: well_formed (ex , p) = true
IHAC: evar_is_fresh_in x AC.[□↦p] → Γ ⊢i AC.[□↦ex , p] <---> exists_quantify x AC.[□↦p^{evar:0↦x}] using (ExGen := {[x]}, SVSubst := ∅, KT := false, FP := frames_of_AC AC)
Hwfex: well_formed (ex , AC.[□↦p])
Hxfr1: evar_is_fresh_in x AC.[□↦p]
Hxfrp: evar_is_fresh_in x p
HxAC: x ∉ AC_free_evars AC
Hwf': well_formed (exists_quantify x AC.[□↦p^{evar:0↦x}])

Γ ⊢i p0 $ AC.[□↦ex , p] <---> exists_quantify x (p0 $ AC.[□↦p^{evar:0↦x}]) using (ExGen := {[x]}, SVSubst := ∅, KT := false, FP := {[p0 ↾ Prf]} ∪ frames_of_AC AC)
(* TODO automate this *)
Σ: Signature
Γ: Theory
p0: Pattern
AC: Application_context
Prf: well_formed p0
p: Pattern
x: evar
Hx: evar_is_fresh_in x (p0 $ AC.[□↦p])
Hwf: well_formed (ex , p) = true
IHAC: evar_is_fresh_in x AC.[□↦p] → Γ ⊢i AC.[□↦ex , p] <---> exists_quantify x AC.[□↦p^{evar:0↦x}] using (ExGen := {[x]}, SVSubst := ∅, KT := false, FP := frames_of_AC AC)
Hwfex: well_formed (ex , AC.[□↦p])
Hxfr1: evar_is_fresh_in x AC.[□↦p]
Hxfrp: evar_is_fresh_in x p
HxAC: x ∉ AC_free_evars AC
Hwf': well_formed (exists_quantify x AC.[□↦p^{evar:0↦x}])

well_formed p^{evar:0↦x}
Σ: Signature
Γ: Theory
p0: Pattern
AC: Application_context
Prf: well_formed p0
p: Pattern
x: evar
Hx: evar_is_fresh_in x (p0 $ AC.[□↦p])
Hwf: well_formed (ex , p) = true
IHAC: evar_is_fresh_in x AC.[□↦p] → Γ ⊢i AC.[□↦ex , p] <---> exists_quantify x AC.[□↦p^{evar:0↦x}] using (ExGen := {[x]}, SVSubst := ∅, KT := false, FP := frames_of_AC AC)
Hwfex: well_formed (ex , AC.[□↦p])
Hxfr1: evar_is_fresh_in x AC.[□↦p]
Hxfrp: evar_is_fresh_in x p
HxAC: x ∉ AC_free_evars AC
Hwf': well_formed (exists_quantify x AC.[□↦p^{evar:0↦x}])
Hwfeo: well_formed p^{evar:0↦x}
Γ ⊢i p0 $ AC.[□↦ex , p] <---> exists_quantify x (p0 $ AC.[□↦p^{evar:0↦x}]) using (ExGen := {[x]}, SVSubst := ∅, KT := false, FP := {[p0 ↾ Prf]} ∪ frames_of_AC AC)
Σ: Signature
Γ: Theory
p0: Pattern
AC: Application_context
Prf: well_formed p0
p: Pattern
x: evar
Hx: evar_is_fresh_in x (p0 $ AC.[□↦p])
Hwf: well_formed (ex , p) = true
IHAC: evar_is_fresh_in x AC.[□↦p] → Γ ⊢i AC.[□↦ex , p] <---> exists_quantify x AC.[□↦p^{evar:0↦x}] using (ExGen := {[x]}, SVSubst := ∅, KT := false, FP := frames_of_AC AC)
Hwfex: well_formed (ex , AC.[□↦p])
Hxfr1: evar_is_fresh_in x AC.[□↦p]
Hxfrp: evar_is_fresh_in x p
HxAC: x ∉ AC_free_evars AC
Hwf': well_formed (exists_quantify x AC.[□↦p^{evar:0↦x}])

well_formed p^{evar:0↦x}
Σ: Signature
Γ: Theory
p0: Pattern
AC: Application_context
Prf: well_formed p0
p: Pattern
x: evar
Hx: evar_is_fresh_in x (p0 $ AC.[□↦p])
Hwf: well_formed (ex , p) = true
IHAC: evar_is_fresh_in x AC.[□↦p] → Γ ⊢i AC.[□↦ex , p] <---> exists_quantify x AC.[□↦p^{evar:0↦x}] using (ExGen := {[x]}, SVSubst := ∅, KT := false, FP := frames_of_AC AC)
Hwfex: well_formed (ex , AC.[□↦p])
Hxfr1: evar_is_fresh_in x AC.[□↦p]
Hxfrp: evar_is_fresh_in x p
HxAC: x ∉ AC_free_evars AC
Hwf': well_formed (exists_quantify x AC.[□↦p^{evar:0↦x}])

well_formed_positive p^{evar:0↦x} && well_formed_closed p^{evar:0↦x}
Σ: Signature
Γ: Theory
p0: Pattern
AC: Application_context
Prf: well_formed p0
p: Pattern
x: evar
Hx: evar_is_fresh_in x (p0 $ AC.[□↦p])
Hwf: [&& well_formed_positive (ex , p), well_formed_closed_mu_aux (ex , p) 0 & well_formed_closed_ex_aux (ex , p) 0] = true
IHAC: evar_is_fresh_in x AC.[□↦p] → Γ ⊢i AC.[□↦ex , p] <---> exists_quantify x AC.[□↦p^{evar:0↦x}] using (ExGen := {[x]}, SVSubst := ∅, KT := false, FP := frames_of_AC AC)
Hwfex: well_formed (ex , AC.[□↦p])
Hxfr1: evar_is_fresh_in x AC.[□↦p]
Hxfrp: evar_is_fresh_in x p
HxAC: x ∉ AC_free_evars AC
Hwf': well_formed (exists_quantify x AC.[□↦p^{evar:0↦x}])

well_formed_positive p^{evar:0↦x} && well_formed_closed p^{evar:0↦x}
Σ: Signature
Γ: Theory
p0: Pattern
AC: Application_context
Prf: well_formed p0
p: Pattern
x: evar
Hx: evar_is_fresh_in x (p0 $ AC.[□↦p])
Hwf: well_formed_positive (ex , p) = true ∧ well_formed_closed_mu_aux (ex , p) 0 && well_formed_closed_ex_aux (ex , p) 0 = true
IHAC: evar_is_fresh_in x AC.[□↦p] → Γ ⊢i AC.[□↦ex , p] <---> exists_quantify x AC.[□↦p^{evar:0↦x}] using (ExGen := {[x]}, SVSubst := ∅, KT := false, FP := frames_of_AC AC)
Hwfex: well_formed (ex , AC.[□↦p])
Hxfr1: evar_is_fresh_in x AC.[□↦p]
Hxfrp: evar_is_fresh_in x p
HxAC: x ∉ AC_free_evars AC
Hwf': well_formed (exists_quantify x AC.[□↦p^{evar:0↦x}])

well_formed_positive p^{evar:0↦x} && well_formed_closed p^{evar:0↦x}
Σ: Signature
Γ: Theory
p0: Pattern
AC: Application_context
Prf: well_formed p0
p: Pattern
x: evar
Hx: evar_is_fresh_in x (p0 $ AC.[□↦p])
Hwf: well_formed_positive p = true ∧ well_formed_closed_mu_aux p 0 && well_formed_closed_ex_aux p 1 = true
IHAC: evar_is_fresh_in x AC.[□↦p] → Γ ⊢i AC.[□↦ex , p] <---> exists_quantify x AC.[□↦p^{evar:0↦x}] using (ExGen := {[x]}, SVSubst := ∅, KT := false, FP := frames_of_AC AC)
Hwfex: well_formed (ex , AC.[□↦p])
Hxfr1: evar_is_fresh_in x AC.[□↦p]
Hxfrp: evar_is_fresh_in x p
HxAC: x ∉ AC_free_evars AC
Hwf': well_formed (exists_quantify x AC.[□↦p^{evar:0↦x}])

well_formed_positive p^{evar:0↦x} && well_formed_closed p^{evar:0↦x}
Σ: Signature
Γ: Theory
p0: Pattern
AC: Application_context
Prf: well_formed p0
p: Pattern
x: evar
Hx: evar_is_fresh_in x (p0 $ AC.[□↦p])
Hwf: well_formed_positive p = true ∧ well_formed_closed_mu_aux p 0 && well_formed_closed_ex_aux p 1 = true
IHAC: evar_is_fresh_in x AC.[□↦p] → Γ ⊢i AC.[□↦ex , p] <---> exists_quantify x AC.[□↦p^{evar:0↦x}] using (ExGen := {[x]}, SVSubst := ∅, KT := false, FP := frames_of_AC AC)
Hwfex: well_formed (ex , AC.[□↦p])
Hxfr1: evar_is_fresh_in x AC.[□↦p]
Hxfrp: evar_is_fresh_in x p
HxAC: x ∉ AC_free_evars AC
Hwf': well_formed (exists_quantify x AC.[□↦p^{evar:0↦x}])

well_formed_positive p = true
Σ: Signature
Γ: Theory
p0: Pattern
AC: Application_context
Prf: well_formed p0
p: Pattern
x: evar
Hx: evar_is_fresh_in x (p0 $ AC.[□↦p])
Hwf: well_formed_positive p = true ∧ well_formed_closed_mu_aux p 0 && well_formed_closed_ex_aux p 1 = true
IHAC: evar_is_fresh_in x AC.[□↦p] → Γ ⊢i AC.[□↦ex , p] <---> exists_quantify x AC.[□↦p^{evar:0↦x}] using (ExGen := {[x]}, SVSubst := ∅, KT := false, FP := frames_of_AC AC)
Hwfex: well_formed (ex , AC.[□↦p])
Hxfr1: evar_is_fresh_in x AC.[□↦p]
Hxfrp: evar_is_fresh_in x p
HxAC: x ∉ AC_free_evars AC
Hwf': well_formed (exists_quantify x AC.[□↦p^{evar:0↦x}])
true && well_formed_closed p^{evar:0↦x}
Σ: Signature
Γ: Theory
p0: Pattern
AC: Application_context
Prf: well_formed p0
p: Pattern
x: evar
Hx: evar_is_fresh_in x (p0 $ AC.[□↦p])
Hwf: well_formed_positive p = true ∧ well_formed_closed_mu_aux p 0 && well_formed_closed_ex_aux p 1 = true
IHAC: evar_is_fresh_in x AC.[□↦p] → Γ ⊢i AC.[□↦ex , p] <---> exists_quantify x AC.[□↦p^{evar:0↦x}] using (ExGen := {[x]}, SVSubst := ∅, KT := false, FP := frames_of_AC AC)
Hwfex: well_formed (ex , AC.[□↦p])
Hxfr1: evar_is_fresh_in x AC.[□↦p]
Hxfrp: evar_is_fresh_in x p
HxAC: x ∉ AC_free_evars AC
Hwf': well_formed (exists_quantify x AC.[□↦p^{evar:0↦x}])

well_formed_positive p = true
apply Hwf.
Σ: Signature
Γ: Theory
p0: Pattern
AC: Application_context
Prf: well_formed p0
p: Pattern
x: evar
Hx: evar_is_fresh_in x (p0 $ AC.[□↦p])
Hwf: well_formed_positive p = true ∧ well_formed_closed_mu_aux p 0 && well_formed_closed_ex_aux p 1 = true
IHAC: evar_is_fresh_in x AC.[□↦p] → Γ ⊢i AC.[□↦ex , p] <---> exists_quantify x AC.[□↦p^{evar:0↦x}] using (ExGen := {[x]}, SVSubst := ∅, KT := false, FP := frames_of_AC AC)
Hwfex: well_formed (ex , AC.[□↦p])
Hxfr1: evar_is_fresh_in x AC.[□↦p]
Hxfrp: evar_is_fresh_in x p
HxAC: x ∉ AC_free_evars AC
Hwf': well_formed (exists_quantify x AC.[□↦p^{evar:0↦x}])

true && well_formed_closed p^{evar:0↦x}
Σ: Signature
Γ: Theory
p0: Pattern
AC: Application_context
Prf: well_formed p0
p: Pattern
x: evar
Hx: evar_is_fresh_in x (p0 $ AC.[□↦p])
Hwf: well_formed_positive p = true ∧ well_formed_closed_mu_aux p 0 && well_formed_closed_ex_aux p 1 = true
IHAC: evar_is_fresh_in x AC.[□↦p] → Γ ⊢i AC.[□↦ex , p] <---> exists_quantify x AC.[□↦p^{evar:0↦x}] using (ExGen := {[x]}, SVSubst := ∅, KT := false, FP := frames_of_AC AC)
Hwfex: well_formed (ex , AC.[□↦p])
Hxfr1: evar_is_fresh_in x AC.[□↦p]
Hxfrp: evar_is_fresh_in x p
HxAC: x ∉ AC_free_evars AC
Hwf': well_formed (exists_quantify x AC.[□↦p^{evar:0↦x}])

[&& true, well_formed_closed_mu_aux p^{evar:0↦x} 0 & well_formed_closed_ex_aux p^{evar:0↦x} 0]
Σ: Signature
Γ: Theory
p0: Pattern
AC: Application_context
Prf: well_formed p0
p: Pattern
x: evar
Hx: evar_is_fresh_in x (p0 $ AC.[□↦p])
H: well_formed_positive p = true
H1: well_formed_closed_mu_aux p 0 = true
H2: well_formed_closed_ex_aux p 1 = true
IHAC: evar_is_fresh_in x AC.[□↦p] → Γ ⊢i AC.[□↦ex , p] <---> exists_quantify x AC.[□↦p^{evar:0↦x}] using (ExGen := {[x]}, SVSubst := ∅, KT := false, FP := frames_of_AC AC)
Hwfex: well_formed (ex , AC.[□↦p])
Hxfr1: evar_is_fresh_in x AC.[□↦p]
Hxfrp: evar_is_fresh_in x p
HxAC: x ∉ AC_free_evars AC
Hwf': well_formed (exists_quantify x AC.[□↦p^{evar:0↦x}])

[&& true, well_formed_closed_mu_aux p^{evar:0↦x} 0 & well_formed_closed_ex_aux p^{evar:0↦x} 0]
split_and!; auto.
Σ: Signature
Γ: Theory
p0: Pattern
AC: Application_context
Prf: well_formed p0
p: Pattern
x: evar
Hx: evar_is_fresh_in x (p0 $ AC.[□↦p])
Hwf: well_formed (ex , p) = true
IHAC: evar_is_fresh_in x AC.[□↦p] → Γ ⊢i AC.[□↦ex , p] <---> exists_quantify x AC.[□↦p^{evar:0↦x}] using (ExGen := {[x]}, SVSubst := ∅, KT := false, FP := frames_of_AC AC)
Hwfex: well_formed (ex , AC.[□↦p])
Hxfr1: evar_is_fresh_in x AC.[□↦p]
Hxfrp: evar_is_fresh_in x p
HxAC: x ∉ AC_free_evars AC
Hwf': well_formed (exists_quantify x AC.[□↦p^{evar:0↦x}])
Hwfeo: well_formed p^{evar:0↦x}

Γ ⊢i p0 $ AC.[□↦ex , p] <---> exists_quantify x (p0 $ AC.[□↦p^{evar:0↦x}]) using (ExGen := {[x]}, SVSubst := ∅, KT := false, FP := {[p0 ↾ Prf]} ∪ frames_of_AC AC)
(* TODO automate this. The problem is that [well_formed_app] and others do not have [= true]; that is why [auto] does not work. But [auto] is not suitable for this anyway. A better way would be to create some `simpl_well_formed` tuple, that might use the type class mechanism for extension... *)
Σ: Signature
Γ: Theory
p0: Pattern
AC: Application_context
Prf: well_formed p0
p: Pattern
x: evar
Hx: evar_is_fresh_in x (p0 $ AC.[□↦p])
Hwf: well_formed (ex , p) = true
IHAC: evar_is_fresh_in x AC.[□↦p] → Γ ⊢i AC.[□↦ex , p] <---> exists_quantify x AC.[□↦p^{evar:0↦x}] using (ExGen := {[x]}, SVSubst := ∅, KT := false, FP := frames_of_AC AC)
Hwfex: well_formed (ex , AC.[□↦p])
Hxfr1: evar_is_fresh_in x AC.[□↦p]
Hxfrp: evar_is_fresh_in x p
HxAC: x ∉ AC_free_evars AC
Hwf': well_formed (exists_quantify x AC.[□↦p^{evar:0↦x}])
Hwfeo: well_formed p^{evar:0↦x}

well_formed (exists_quantify x (p0 $ AC.[□↦p^{evar:0↦x}]))
Σ: Signature
Γ: Theory
p0: Pattern
AC: Application_context
Prf: well_formed p0
p: Pattern
x: evar
Hx: evar_is_fresh_in x (p0 $ AC.[□↦p])
Hwf: well_formed (ex , p) = true
IHAC: evar_is_fresh_in x AC.[□↦p] → Γ ⊢i AC.[□↦ex , p] <---> exists_quantify x AC.[□↦p^{evar:0↦x}] using (ExGen := {[x]}, SVSubst := ∅, KT := false, FP := frames_of_AC AC)
Hwfex: well_formed (ex , AC.[□↦p])
Hxfr1: evar_is_fresh_in x AC.[□↦p]
Hxfrp: evar_is_fresh_in x p
HxAC: x ∉ AC_free_evars AC
Hwf': well_formed (exists_quantify x AC.[□↦p^{evar:0↦x}])
Hwfeo: well_formed p^{evar:0↦x}
Hwf'p0: well_formed (exists_quantify x (p0 $ AC.[□↦p^{evar:0↦x}]))
Γ ⊢i p0 $ AC.[□↦ex , p] <---> exists_quantify x (p0 $ AC.[□↦p^{evar:0↦x}]) using (ExGen := {[x]}, SVSubst := ∅, KT := false, FP := {[p0 ↾ Prf]} ∪ frames_of_AC AC)
Σ: Signature
Γ: Theory
p0: Pattern
AC: Application_context
Prf: well_formed p0
p: Pattern
x: evar
Hx: evar_is_fresh_in x (p0 $ AC.[□↦p])
Hwf: well_formed (ex , p) = true
IHAC: evar_is_fresh_in x AC.[□↦p] → Γ ⊢i AC.[□↦ex , p] <---> exists_quantify x AC.[□↦p^{evar:0↦x}] using (ExGen := {[x]}, SVSubst := ∅, KT := false, FP := frames_of_AC AC)
Hwfex: well_formed (ex , AC.[□↦p])
Hxfr1: evar_is_fresh_in x AC.[□↦p]
Hxfrp: evar_is_fresh_in x p
HxAC: x ∉ AC_free_evars AC
Hwf': well_formed (exists_quantify x AC.[□↦p^{evar:0↦x}])
Hwfeo: well_formed p^{evar:0↦x}

well_formed (exists_quantify x (p0 $ AC.[□↦p^{evar:0↦x}]))
Σ: Signature
Γ: Theory
p0: Pattern
AC: Application_context
Prf: well_formed p0
p: Pattern
x: evar
Hx: evar_is_fresh_in x (p0 $ AC.[□↦p])
Hwf: well_formed (ex , p) = true
IHAC: evar_is_fresh_in x AC.[□↦p] → Γ ⊢i AC.[□↦ex , p] <---> exists_quantify x AC.[□↦p^{evar:0↦x}] using (ExGen := {[x]}, SVSubst := ∅, KT := false, FP := frames_of_AC AC)
Hwfex: well_formed (ex , AC.[□↦p])
Hxfr1: evar_is_fresh_in x AC.[□↦p]
Hxfrp: evar_is_fresh_in x p
HxAC: x ∉ AC_free_evars AC
Hwf': well_formed (exists_quantify x AC.[□↦p^{evar:0↦x}])
Hwfeo: well_formed p^{evar:0↦x}

well_formed (ex , (p0 $ AC.[□↦p^{evar:0↦x}])^{{evar:x↦0}})
Σ: Signature
Γ: Theory
p0: Pattern
AC: Application_context
Prf: well_formed p0
p: Pattern
x: evar
Hx: evar_is_fresh_in x (p0 $ AC.[□↦p])
Hwf: well_formed (ex , p) = true
IHAC: evar_is_fresh_in x AC.[□↦p] → Γ ⊢i AC.[□↦ex , p] <---> exists_quantify x AC.[□↦p^{evar:0↦x}] using (ExGen := {[x]}, SVSubst := ∅, KT := false, FP := frames_of_AC AC)
Hwfex: well_formed (ex , AC.[□↦p])
Hxfr1: evar_is_fresh_in x AC.[□↦p]
Hxfrp: evar_is_fresh_in x p
HxAC: x ∉ AC_free_evars AC
Hwf': well_formed (exists_quantify x AC.[□↦p^{evar:0↦x}])
Hwfeo: well_formed p^{evar:0↦x}

well_formed (p0 $ AC.[□↦p^{evar:0↦x}]) = true
apply well_formed_app; auto.
Σ: Signature
Γ: Theory
p0: Pattern
AC: Application_context
Prf: well_formed p0
p: Pattern
x: evar
Hx: evar_is_fresh_in x (p0 $ AC.[□↦p])
Hwf: well_formed (ex , p) = true
IHAC: evar_is_fresh_in x AC.[□↦p] → Γ ⊢i AC.[□↦ex , p] <---> exists_quantify x AC.[□↦p^{evar:0↦x}] using (ExGen := {[x]}, SVSubst := ∅, KT := false, FP := frames_of_AC AC)
Hwfex: well_formed (ex , AC.[□↦p])
Hxfr1: evar_is_fresh_in x AC.[□↦p]
Hxfrp: evar_is_fresh_in x p
HxAC: x ∉ AC_free_evars AC
Hwf': well_formed (exists_quantify x AC.[□↦p^{evar:0↦x}])
Hwfeo: well_formed p^{evar:0↦x}
Hwf'p0: well_formed (exists_quantify x (p0 $ AC.[□↦p^{evar:0↦x}]))

Γ ⊢i p0 $ AC.[□↦ex , p] <---> exists_quantify x (p0 $ AC.[□↦p^{evar:0↦x}]) using (ExGen := {[x]}, SVSubst := ∅, KT := false, FP := {[p0 ↾ Prf]} ∪ frames_of_AC AC)
Σ: Signature
Γ: Theory
p0: Pattern
AC: Application_context
Prf: well_formed p0
p: Pattern
x: evar
Hx: evar_is_fresh_in x (p0 $ AC.[□↦p])
Hwf: well_formed (ex , p) = true
IHAC: ((Γ ⊢i AC.[□↦ex , p] ---> exists_quantify x AC.[□↦p^{evar:0↦x}] using (ExGen := {[x]}, SVSubst := ∅, KT := false, FP := frames_of_AC AC)) * (Γ ⊢i exists_quantify x AC.[□↦p^{evar:0↦x}] ---> AC.[□↦ex , p] using (ExGen := {[x]}, SVSubst := ∅, KT := false, FP := frames_of_AC AC)))%type
Hwfex: well_formed (ex , AC.[□↦p])
Hxfr1: evar_is_fresh_in x AC.[□↦p]
Hxfrp: evar_is_fresh_in x p
HxAC: x ∉ AC_free_evars AC
Hwf': well_formed (exists_quantify x AC.[□↦p^{evar:0↦x}])
Hwfeo: well_formed p^{evar:0↦x}
Hwf'p0: well_formed (exists_quantify x (p0 $ AC.[□↦p^{evar:0↦x}]))

Γ ⊢i p0 $ AC.[□↦ex , p] <---> exists_quantify x (p0 $ AC.[□↦p^{evar:0↦x}]) using (ExGen := {[x]}, SVSubst := ∅, KT := false, FP := {[p0 ↾ Prf]} ∪ frames_of_AC AC)
Σ: Signature
Γ: Theory
p0: Pattern
AC: Application_context
Prf: well_formed p0
p: Pattern
x: evar
Hx: evar_is_fresh_in x (p0 $ AC.[□↦p])
Hwf: well_formed (ex , p) = true
IH1: Γ ⊢i AC.[□↦ex , p] ---> exists_quantify x AC.[□↦p^{evar:0↦x}] using (ExGen := {[x]}, SVSubst := ∅, KT := false, FP := frames_of_AC AC)
IH2: Γ ⊢i exists_quantify x AC.[□↦p^{evar:0↦x}] ---> AC.[□↦ex , p] using (ExGen := {[x]}, SVSubst := ∅, KT := false, FP := frames_of_AC AC)
Hwfex: well_formed (ex , AC.[□↦p])
Hxfr1: evar_is_fresh_in x AC.[□↦p]
Hxfrp: evar_is_fresh_in x p
HxAC: x ∉ AC_free_evars AC
Hwf': well_formed (exists_quantify x AC.[□↦p^{evar:0↦x}])
Hwfeo: well_formed p^{evar:0↦x}
Hwf'p0: well_formed (exists_quantify x (p0 $ AC.[□↦p^{evar:0↦x}]))

Γ ⊢i p0 $ AC.[□↦ex , p] <---> exists_quantify x (p0 $ AC.[□↦p^{evar:0↦x}]) using (ExGen := {[x]}, SVSubst := ∅, KT := false, FP := {[p0 ↾ Prf]} ∪ frames_of_AC AC)
Σ: Signature
Γ: Theory
p0: Pattern
AC: Application_context
Prf: well_formed p0
p: Pattern
x: evar
Hx: evar_is_fresh_in x (p0 $ AC.[□↦p])
Hwf: well_formed (ex , p) = true
IH1: Γ ⊢i AC.[□↦ex , p] ---> exists_quantify x AC.[□↦p^{evar:0↦x}] using (ExGen := {[x]}, SVSubst := ∅, KT := false, FP := frames_of_AC AC)
IH2: Γ ⊢i exists_quantify x AC.[□↦p^{evar:0↦x}] ---> AC.[□↦ex , p] using (ExGen := {[x]}, SVSubst := ∅, KT := false, FP := frames_of_AC AC)
Hwfex: well_formed (ex , AC.[□↦p])
Hxfr1: evar_is_fresh_in x AC.[□↦p]
Hxfrp: evar_is_fresh_in x p
HxAC: x ∉ AC_free_evars AC
Hwf': well_formed (exists_quantify x AC.[□↦p^{evar:0↦x}])
Hwfeo: well_formed p^{evar:0↦x}
Hwf'p0: well_formed (exists_quantify x (p0 $ AC.[□↦p^{evar:0↦x}]))

Γ ⊢i p0 $ AC.[□↦ex , p] ---> exists_quantify x (p0 $ AC.[□↦p^{evar:0↦x}]) using (ExGen := {[x]}, SVSubst := ∅, KT := false, FP := {[p0 ↾ Prf]} ∪ frames_of_AC AC)
Σ: Signature
Γ: Theory
p0: Pattern
AC: Application_context
Prf: well_formed p0
p: Pattern
x: evar
Hx: evar_is_fresh_in x (p0 $ AC.[□↦p])
Hwf: well_formed (ex , p) = true
IH1: Γ ⊢i AC.[□↦ex , p] ---> exists_quantify x AC.[□↦p^{evar:0↦x}] using (ExGen := {[x]}, SVSubst := ∅, KT := false, FP := frames_of_AC AC)
IH2: Γ ⊢i exists_quantify x AC.[□↦p^{evar:0↦x}] ---> AC.[□↦ex , p] using (ExGen := {[x]}, SVSubst := ∅, KT := false, FP := frames_of_AC AC)
Hwfex: well_formed (ex , AC.[□↦p])
Hxfr1: evar_is_fresh_in x AC.[□↦p]
Hxfrp: evar_is_fresh_in x p
HxAC: x ∉ AC_free_evars AC
Hwf': well_formed (exists_quantify x AC.[□↦p^{evar:0↦x}])
Hwfeo: well_formed p^{evar:0↦x}
Hwf'p0: well_formed (exists_quantify x (p0 $ AC.[□↦p^{evar:0↦x}]))
Γ ⊢i exists_quantify x (p0 $ AC.[□↦p^{evar:0↦x}]) ---> p0 $ AC.[□↦ex , p] using (ExGen := {[x]}, SVSubst := ∅, KT := false, FP := {[p0 ↾ Prf]} ∪ frames_of_AC AC)
Σ: Signature
Γ: Theory
p0: Pattern
AC: Application_context
Prf: well_formed p0
p: Pattern
x: evar
Hx: evar_is_fresh_in x (p0 $ AC.[□↦p])
Hwf: well_formed (ex , p) = true
IH1: Γ ⊢i AC.[□↦ex , p] ---> exists_quantify x AC.[□↦p^{evar:0↦x}] using (ExGen := {[x]}, SVSubst := ∅, KT := false, FP := frames_of_AC AC)
IH2: Γ ⊢i exists_quantify x AC.[□↦p^{evar:0↦x}] ---> AC.[□↦ex , p] using (ExGen := {[x]}, SVSubst := ∅, KT := false, FP := frames_of_AC AC)
Hwfex: well_formed (ex , AC.[□↦p])
Hxfr1: evar_is_fresh_in x AC.[□↦p]
Hxfrp: evar_is_fresh_in x p
HxAC: x ∉ AC_free_evars AC
Hwf': well_formed (exists_quantify x AC.[□↦p^{evar:0↦x}])
Hwfeo: well_formed p^{evar:0↦x}
Hwf'p0: well_formed (exists_quantify x (p0 $ AC.[□↦p^{evar:0↦x}]))

Γ ⊢i p0 $ AC.[□↦ex , p] ---> exists_quantify x (p0 $ AC.[□↦p^{evar:0↦x}]) using (ExGen := {[x]}, SVSubst := ∅, KT := false, FP := {[p0 ↾ Prf]} ∪ frames_of_AC AC)
Σ: Signature
Γ: Theory
p0: Pattern
AC: Application_context
Prf: well_formed p0
p: Pattern
x: evar
Hx: evar_is_fresh_in x (p0 $ AC.[□↦p])
Hwf: well_formed (ex , p) = true
IH1: Γ ⊢i AC.[□↦ex , p] ---> exists_quantify x AC.[□↦p^{evar:0↦x}] using (ExGen := {[x]}, SVSubst := ∅, KT := false, FP := frames_of_AC AC)
IH2: Γ ⊢i exists_quantify x AC.[□↦p^{evar:0↦x}] ---> AC.[□↦ex , p] using (ExGen := {[x]}, SVSubst := ∅, KT := false, FP := frames_of_AC AC)
Hwfex: well_formed (ex , AC.[□↦p])
Hxfr1: evar_is_fresh_in x AC.[□↦p]
Hxfrp: evar_is_fresh_in x p
HxAC: x ∉ AC_free_evars AC
Hwf': well_formed (exists_quantify x AC.[□↦p^{evar:0↦x}])
Hwfeo: well_formed p^{evar:0↦x}
Hwf'p0: well_formed (exists_quantify x (p0 $ AC.[□↦p^{evar:0↦x}]))
H: Γ ⊢i AC.[□↦ex , p] ---> exists_quantify x AC.[□↦p^{evar:0↦x}] using (ExGen := {[x]}, SVSubst := ∅, KT := false, FP := frames_of_AC AC)

Γ ⊢i p0 $ AC.[□↦ex , p] ---> exists_quantify x (p0 $ AC.[□↦p^{evar:0↦x}]) using (ExGen := {[x]}, SVSubst := ∅, KT := false, FP := {[p0 ↾ Prf]} ∪ frames_of_AC AC)
Σ: Signature
Γ: Theory
p0: Pattern
AC: Application_context
Prf: well_formed p0
p: Pattern
x: evar
Hx: evar_is_fresh_in x (p0 $ AC.[□↦p])
Hwf: well_formed (ex , p) = true
IH1: Γ ⊢i AC.[□↦ex , p] ---> exists_quantify x AC.[□↦p^{evar:0↦x}] using (ExGen := {[x]}, SVSubst := ∅, KT := false, FP := {[p0 ↾ Prf]} ∪ frames_of_AC AC)
IH2: Γ ⊢i exists_quantify x AC.[□↦p^{evar:0↦x}] ---> AC.[□↦ex , p] using (ExGen := {[x]}, SVSubst := ∅, KT := false, FP := frames_of_AC AC)
Hwfex: well_formed (ex , AC.[□↦p])
Hxfr1: evar_is_fresh_in x AC.[□↦p]
Hxfrp: evar_is_fresh_in x p
HxAC: x ∉ AC_free_evars AC
Hwf': well_formed (exists_quantify x AC.[□↦p^{evar:0↦x}])
Hwfeo: well_formed p^{evar:0↦x}
Hwf'p0: well_formed (exists_quantify x (p0 $ AC.[□↦p^{evar:0↦x}]))
H: Γ ⊢i AC.[□↦ex , p] ---> exists_quantify x AC.[□↦p^{evar:0↦x}] using (ExGen := {[x]}, SVSubst := ∅, KT := false, FP := frames_of_AC AC)

Γ ⊢i p0 $ AC.[□↦ex , p] ---> exists_quantify x (p0 $ AC.[□↦p^{evar:0↦x}]) using (ExGen := {[x]}, SVSubst := ∅, KT := false, FP := {[p0 ↾ Prf]} ∪ frames_of_AC AC)
Σ: Signature
Γ: Theory
p0: Pattern
AC: Application_context
Prf: well_formed p0
p: Pattern
x: evar
Hx: evar_is_fresh_in x (p0 $ AC.[□↦p])
Hwf: well_formed (ex , p) = true
IH1: Γ ⊢i p0 $ AC.[□↦ex , p] ---> p0 $ exists_quantify x AC.[□↦p^{evar:0↦x}] using (ExGen := {[x]}, SVSubst := ∅, KT := false, FP := {[p0 ↾ Prf]} ∪ frames_of_AC AC)
IH2: Γ ⊢i exists_quantify x AC.[□↦p^{evar:0↦x}] ---> AC.[□↦ex , p] using (ExGen := {[x]}, SVSubst := ∅, KT := false, FP := frames_of_AC AC)
Hwfex: well_formed (ex , AC.[□↦p])
Hxfr1: evar_is_fresh_in x AC.[□↦p]
Hxfrp: evar_is_fresh_in x p
HxAC: x ∉ AC_free_evars AC
Hwf': well_formed (exists_quantify x AC.[□↦p^{evar:0↦x}])
Hwfeo: well_formed p^{evar:0↦x}
Hwf'p0: well_formed (exists_quantify x (p0 $ AC.[□↦p^{evar:0↦x}]))
H: Γ ⊢i AC.[□↦ex , p] ---> exists_quantify x AC.[□↦p^{evar:0↦x}] using (ExGen := {[x]}, SVSubst := ∅, KT := false, FP := frames_of_AC AC)

Γ ⊢i p0 $ AC.[□↦ex , p] ---> exists_quantify x (p0 $ AC.[□↦p^{evar:0↦x}]) using (ExGen := {[x]}, SVSubst := ∅, KT := false, FP := {[p0 ↾ Prf]} ∪ frames_of_AC AC)
Σ: Signature
Γ: Theory
p0: Pattern
AC: Application_context
Prf: well_formed p0
p: Pattern
x: evar
Hx: evar_is_fresh_in x (p0 $ AC.[□↦p])
Hwf: well_formed (ex , p) = true
IH1: Γ ⊢i AC.[□↦ex , p] ---> exists_quantify x AC.[□↦p^{evar:0↦x}] using (ExGen := {[x]}, SVSubst := ∅, KT := false, FP := {[p0 ↾ Prf]} ∪ frames_of_AC AC)
IH2: Γ ⊢i exists_quantify x AC.[□↦p^{evar:0↦x}] ---> AC.[□↦ex , p] using (ExGen := {[x]}, SVSubst := ∅, KT := false, FP := frames_of_AC AC)
Hwfex: well_formed (ex , AC.[□↦p])
Hxfr1: evar_is_fresh_in x AC.[□↦p]
Hxfrp: evar_is_fresh_in x p
HxAC: x ∉ AC_free_evars AC
Hwf': well_formed (exists_quantify x AC.[□↦p^{evar:0↦x}])
Hwfeo: well_formed p^{evar:0↦x}
Hwf'p0: well_formed (exists_quantify x (p0 $ AC.[□↦p^{evar:0↦x}]))
H: Γ ⊢i AC.[□↦ex , p] ---> exists_quantify x AC.[□↦p^{evar:0↦x}] using (ExGen := {[x]}, SVSubst := ∅, KT := false, FP := frames_of_AC AC)
ProofInfoLe (ExGen := ∅, SVSubst := ∅, KT := false, FP := {[p0 ↾ Prf]}) (ExGen := {[x]}, SVSubst := ∅, KT := false, FP := {[p0 ↾ Prf]} ∪ frames_of_AC AC)
Σ: Signature
Γ: Theory
p0: Pattern
AC: Application_context
Prf: well_formed p0
p: Pattern
x: evar
Hx: evar_is_fresh_in x (p0 $ AC.[□↦p])
Hwf: well_formed (ex , p) = true
IH1: Γ ⊢i p0 $ AC.[□↦ex , p] ---> p0 $ exists_quantify x AC.[□↦p^{evar:0↦x}] using (ExGen := {[x]}, SVSubst := ∅, KT := false, FP := {[p0 ↾ Prf]} ∪ frames_of_AC AC)
IH2: Γ ⊢i exists_quantify x AC.[□↦p^{evar:0↦x}] ---> AC.[□↦ex , p] using (ExGen := {[x]}, SVSubst := ∅, KT := false, FP := frames_of_AC AC)
Hwfex: well_formed (ex , AC.[□↦p])
Hxfr1: evar_is_fresh_in x AC.[□↦p]
Hxfrp: evar_is_fresh_in x p
HxAC: x ∉ AC_free_evars AC
Hwf': well_formed (exists_quantify x AC.[□↦p^{evar:0↦x}])
Hwfeo: well_formed p^{evar:0↦x}
Hwf'p0: well_formed (exists_quantify x (p0 $ AC.[□↦p^{evar:0↦x}]))
H: Γ ⊢i AC.[□↦ex , p] ---> exists_quantify x AC.[□↦p^{evar:0↦x}] using (ExGen := {[x]}, SVSubst := ∅, KT := false, FP := frames_of_AC AC)

Γ ⊢i p0 $ AC.[□↦ex , p] ---> exists_quantify x (p0 $ AC.[□↦p^{evar:0↦x}]) using (ExGen := {[x]}, SVSubst := ∅, KT := false, FP := {[p0 ↾ Prf]} ∪ frames_of_AC AC)
Σ: Signature
Γ: Theory
p0: Pattern
AC: Application_context
Prf: well_formed p0
p: Pattern
x: evar
Hx: evar_is_fresh_in x (p0 $ AC.[□↦p])
Hwf: well_formed (ex , p) = true
IH1: Γ ⊢i p0 $ AC.[□↦ex , p] ---> p0 $ exists_quantify x AC.[□↦p^{evar:0↦x}] using (ExGen := {[x]}, SVSubst := ∅, KT := false, FP := {[p0 ↾ Prf]} ∪ frames_of_AC AC)
IH2: Γ ⊢i exists_quantify x AC.[□↦p^{evar:0↦x}] ---> AC.[□↦ex , p] using (ExGen := {[x]}, SVSubst := ∅, KT := false, FP := frames_of_AC AC)
Hwfex: well_formed (ex , AC.[□↦p])
Hxfr1: evar_is_fresh_in x AC.[□↦p]
Hxfrp: evar_is_fresh_in x p
HxAC: x ∉ AC_free_evars AC
Hwf': well_formed (exists_quantify x AC.[□↦p^{evar:0↦x}])
Hwfeo: well_formed p^{evar:0↦x}
Hwf'p0: well_formed (exists_quantify x (p0 $ AC.[□↦p^{evar:0↦x}]))
H: Γ ⊢i AC.[□↦ex , p] ---> exists_quantify x AC.[□↦p^{evar:0↦x}] using (ExGen := {[x]}, SVSubst := ∅, KT := false, FP := frames_of_AC AC)

well_formed (p0 $ AC.[□↦ex , p])
Σ: Signature
Γ: Theory
p0: Pattern
AC: Application_context
Prf: well_formed p0
p: Pattern
x: evar
Hx: evar_is_fresh_in x (p0 $ AC.[□↦p])
Hwf: well_formed (ex , p) = true
IH1: Γ ⊢i p0 $ AC.[□↦ex , p] ---> p0 $ exists_quantify x AC.[□↦p^{evar:0↦x}] using (ExGen := {[x]}, SVSubst := ∅, KT := false, FP := {[p0 ↾ Prf]} ∪ frames_of_AC AC)
IH2: Γ ⊢i exists_quantify x AC.[□↦p^{evar:0↦x}] ---> AC.[□↦ex , p] using (ExGen := {[x]}, SVSubst := ∅, KT := false, FP := frames_of_AC AC)
Hwfex: well_formed (ex , AC.[□↦p])
Hxfr1: evar_is_fresh_in x AC.[□↦p]
Hxfrp: evar_is_fresh_in x p
HxAC: x ∉ AC_free_evars AC
Hwf': well_formed (exists_quantify x AC.[□↦p^{evar:0↦x}])
Hwfeo: well_formed p^{evar:0↦x}
Hwf'p0: well_formed (exists_quantify x (p0 $ AC.[□↦p^{evar:0↦x}]))
H: Γ ⊢i AC.[□↦ex , p] ---> exists_quantify x AC.[□↦p^{evar:0↦x}] using (ExGen := {[x]}, SVSubst := ∅, KT := false, FP := frames_of_AC AC)
well_formed ?B
Σ: Signature
Γ: Theory
p0: Pattern
AC: Application_context
Prf: well_formed p0
p: Pattern
x: evar
Hx: evar_is_fresh_in x (p0 $ AC.[□↦p])
Hwf: well_formed (ex , p) = true
IH1: Γ ⊢i p0 $ AC.[□↦ex , p] ---> p0 $ exists_quantify x AC.[□↦p^{evar:0↦x}] using (ExGen := {[x]}, SVSubst := ∅, KT := false, FP := {[p0 ↾ Prf]} ∪ frames_of_AC AC)
IH2: Γ ⊢i exists_quantify x AC.[□↦p^{evar:0↦x}] ---> AC.[□↦ex , p] using (ExGen := {[x]}, SVSubst := ∅, KT := false, FP := frames_of_AC AC)
Hwfex: well_formed (ex , AC.[□↦p])
Hxfr1: evar_is_fresh_in x AC.[□↦p]
Hxfrp: evar_is_fresh_in x p
HxAC: x ∉ AC_free_evars AC
Hwf': well_formed (exists_quantify x AC.[□↦p^{evar:0↦x}])
Hwfeo: well_formed p^{evar:0↦x}
Hwf'p0: well_formed (exists_quantify x (p0 $ AC.[□↦p^{evar:0↦x}]))
H: Γ ⊢i AC.[□↦ex , p] ---> exists_quantify x AC.[□↦p^{evar:0↦x}] using (ExGen := {[x]}, SVSubst := ∅, KT := false, FP := frames_of_AC AC)
well_formed (exists_quantify x (p0 $ AC.[□↦p^{evar:0↦x}]))
Σ: Signature
Γ: Theory
p0: Pattern
AC: Application_context
Prf: well_formed p0
p: Pattern
x: evar
Hx: evar_is_fresh_in x (p0 $ AC.[□↦p])
Hwf: well_formed (ex , p) = true
IH1: Γ ⊢i p0 $ AC.[□↦ex , p] ---> p0 $ exists_quantify x AC.[□↦p^{evar:0↦x}] using (ExGen := {[x]}, SVSubst := ∅, KT := false, FP := {[p0 ↾ Prf]} ∪ frames_of_AC AC)
IH2: Γ ⊢i exists_quantify x AC.[□↦p^{evar:0↦x}] ---> AC.[□↦ex , p] using (ExGen := {[x]}, SVSubst := ∅, KT := false, FP := frames_of_AC AC)
Hwfex: well_formed (ex , AC.[□↦p])
Hxfr1: evar_is_fresh_in x AC.[□↦p]
Hxfrp: evar_is_fresh_in x p
HxAC: x ∉ AC_free_evars AC
Hwf': well_formed (exists_quantify x AC.[□↦p^{evar:0↦x}])
Hwfeo: well_formed p^{evar:0↦x}
Hwf'p0: well_formed (exists_quantify x (p0 $ AC.[□↦p^{evar:0↦x}]))
H: Γ ⊢i AC.[□↦ex , p] ---> exists_quantify x AC.[□↦p^{evar:0↦x}] using (ExGen := {[x]}, SVSubst := ∅, KT := false, FP := frames_of_AC AC)
Γ ⊢i p0 $ AC.[□↦ex , p] ---> ?B using (ExGen := {[x]}, SVSubst := ∅, KT := false, FP := {[p0 ↾ Prf]} ∪ frames_of_AC AC)
Σ: Signature
Γ: Theory
p0: Pattern
AC: Application_context
Prf: well_formed p0
p: Pattern
x: evar
Hx: evar_is_fresh_in x (p0 $ AC.[□↦p])
Hwf: well_formed (ex , p) = true
IH1: Γ ⊢i p0 $ AC.[□↦ex , p] ---> p0 $ exists_quantify x AC.[□↦p^{evar:0↦x}] using (ExGen := {[x]}, SVSubst := ∅, KT := false, FP := {[p0 ↾ Prf]} ∪ frames_of_AC AC)
IH2: Γ ⊢i exists_quantify x AC.[□↦p^{evar:0↦x}] ---> AC.[□↦ex , p] using (ExGen := {[x]}, SVSubst := ∅, KT := false, FP := frames_of_AC AC)
Hwfex: well_formed (ex , AC.[□↦p])
Hxfr1: evar_is_fresh_in x AC.[□↦p]
Hxfrp: evar_is_fresh_in x p
HxAC: x ∉ AC_free_evars AC
Hwf': well_formed (exists_quantify x AC.[□↦p^{evar:0↦x}])
Hwfeo: well_formed p^{evar:0↦x}
Hwf'p0: well_formed (exists_quantify x (p0 $ AC.[□↦p^{evar:0↦x}]))
H: Γ ⊢i AC.[□↦ex , p] ---> exists_quantify x AC.[□↦p^{evar:0↦x}] using (ExGen := {[x]}, SVSubst := ∅, KT := false, FP := frames_of_AC AC)
Γ ⊢i ?B ---> exists_quantify x (p0 $ AC.[□↦p^{evar:0↦x}]) using (ExGen := {[x]}, SVSubst := ∅, KT := false, FP := {[p0 ↾ Prf]} ∪ frames_of_AC AC)
Σ: Signature
Γ: Theory
p0: Pattern
AC: Application_context
Prf: well_formed p0
p: Pattern
x: evar
Hx: evar_is_fresh_in x (p0 $ AC.[□↦p])
Hwf: well_formed (ex , p) = true
IH1: Γ ⊢i p0 $ AC.[□↦ex , p] ---> p0 $ exists_quantify x AC.[□↦p^{evar:0↦x}] using (ExGen := {[x]}, SVSubst := ∅, KT := false, FP := {[p0 ↾ Prf]} ∪ frames_of_AC AC)
IH2: Γ ⊢i exists_quantify x AC.[□↦p^{evar:0↦x}] ---> AC.[□↦ex , p] using (ExGen := {[x]}, SVSubst := ∅, KT := false, FP := frames_of_AC AC)
Hwfex: well_formed (ex , AC.[□↦p])
Hxfr1: evar_is_fresh_in x AC.[□↦p]
Hxfrp: evar_is_fresh_in x p
HxAC: x ∉ AC_free_evars AC
Hwf': well_formed (exists_quantify x AC.[□↦p^{evar:0↦x}])
Hwfeo: well_formed p^{evar:0↦x}
Hwf'p0: well_formed (exists_quantify x (p0 $ AC.[□↦p^{evar:0↦x}]))
H: Γ ⊢i AC.[□↦ex , p] ---> exists_quantify x AC.[□↦p^{evar:0↦x}] using (ExGen := {[x]}, SVSubst := ∅, KT := false, FP := frames_of_AC AC)

well_formed (p0 $ AC.[□↦ex , p])
Σ: Signature
Γ: Theory
p0: Pattern
AC: Application_context
Prf: well_formed p0
p: Pattern
x: evar
Hx: evar_is_fresh_in x (p0 $ AC.[□↦p])
Hwf: well_formed (ex , p) = true
IH1: Γ ⊢i p0 $ AC.[□↦ex , p] ---> p0 $ exists_quantify x AC.[□↦p^{evar:0↦x}] using (ExGen := {[x]}, SVSubst := ∅, KT := false, FP := {[p0 ↾ Prf]} ∪ frames_of_AC AC)
IH2: Γ ⊢i exists_quantify x AC.[□↦p^{evar:0↦x}] ---> AC.[□↦ex , p] using (ExGen := {[x]}, SVSubst := ∅, KT := false, FP := frames_of_AC AC)
Hwfex: well_formed (ex , AC.[□↦p])
Hxfr1: evar_is_fresh_in x AC.[□↦p]
Hxfrp: evar_is_fresh_in x p
HxAC: x ∉ AC_free_evars AC
Hwf': well_formed (exists_quantify x AC.[□↦p^{evar:0↦x}])
Hwfeo: well_formed p^{evar:0↦x}
Hwf'p0: well_formed (exists_quantify x (p0 $ AC.[□↦p^{evar:0↦x}]))
H: Γ ⊢i AC.[□↦ex , p] ---> exists_quantify x AC.[□↦p^{evar:0↦x}] using (ExGen := {[x]}, SVSubst := ∅, KT := false, FP := frames_of_AC AC)
well_formed (p0 $ exists_quantify x AC.[□↦p^{evar:0↦x}])
Σ: Signature
Γ: Theory
p0: Pattern
AC: Application_context
Prf: well_formed p0
p: Pattern
x: evar
Hx: evar_is_fresh_in x (p0 $ AC.[□↦p])
Hwf: well_formed (ex , p) = true
IH1: Γ ⊢i p0 $ AC.[□↦ex , p] ---> p0 $ exists_quantify x AC.[□↦p^{evar:0↦x}] using (ExGen := {[x]}, SVSubst := ∅, KT := false, FP := {[p0 ↾ Prf]} ∪ frames_of_AC AC)
IH2: Γ ⊢i exists_quantify x AC.[□↦p^{evar:0↦x}] ---> AC.[□↦ex , p] using (ExGen := {[x]}, SVSubst := ∅, KT := false, FP := frames_of_AC AC)
Hwfex: well_formed (ex , AC.[□↦p])
Hxfr1: evar_is_fresh_in x AC.[□↦p]
Hxfrp: evar_is_fresh_in x p
HxAC: x ∉ AC_free_evars AC
Hwf': well_formed (exists_quantify x AC.[□↦p^{evar:0↦x}])
Hwfeo: well_formed p^{evar:0↦x}
Hwf'p0: well_formed (exists_quantify x (p0 $ AC.[□↦p^{evar:0↦x}]))
H: Γ ⊢i AC.[□↦ex , p] ---> exists_quantify x AC.[□↦p^{evar:0↦x}] using (ExGen := {[x]}, SVSubst := ∅, KT := false, FP := frames_of_AC AC)
well_formed (exists_quantify x (p0 $ AC.[□↦p^{evar:0↦x}]))
Σ: Signature
Γ: Theory
p0: Pattern
AC: Application_context
Prf: well_formed p0
p: Pattern
x: evar
Hx: evar_is_fresh_in x (p0 $ AC.[□↦p])
Hwf: well_formed (ex , p) = true
IH1: Γ ⊢i p0 $ AC.[□↦ex , p] ---> p0 $ exists_quantify x AC.[□↦p^{evar:0↦x}] using (ExGen := {[x]}, SVSubst := ∅, KT := false, FP := {[p0 ↾ Prf]} ∪ frames_of_AC AC)
IH2: Γ ⊢i exists_quantify x AC.[□↦p^{evar:0↦x}] ---> AC.[□↦ex , p] using (ExGen := {[x]}, SVSubst := ∅, KT := false, FP := frames_of_AC AC)
Hwfex: well_formed (ex , AC.[□↦p])
Hxfr1: evar_is_fresh_in x AC.[□↦p]
Hxfrp: evar_is_fresh_in x p
HxAC: x ∉ AC_free_evars AC
Hwf': well_formed (exists_quantify x AC.[□↦p^{evar:0↦x}])
Hwfeo: well_formed p^{evar:0↦x}
Hwf'p0: well_formed (exists_quantify x (p0 $ AC.[□↦p^{evar:0↦x}]))
H: Γ ⊢i AC.[□↦ex , p] ---> exists_quantify x AC.[□↦p^{evar:0↦x}] using (ExGen := {[x]}, SVSubst := ∅, KT := false, FP := frames_of_AC AC)
Γ ⊢i p0 $ exists_quantify x AC.[□↦p^{evar:0↦x}] ---> exists_quantify x (p0 $ AC.[□↦p^{evar:0↦x}]) using (ExGen := {[x]}, SVSubst := ∅, KT := false, FP := {[p0 ↾ Prf]} ∪ frames_of_AC AC)
Σ: Signature
Γ: Theory
p0: Pattern
AC: Application_context
Prf: well_formed p0
p: Pattern
x: evar
Hx: evar_is_fresh_in x (p0 $ AC.[□↦p])
Hwf: well_formed (ex , p) = true
IH1: Γ ⊢i p0 $ AC.[□↦ex , p] ---> p0 $ exists_quantify x AC.[□↦p^{evar:0↦x}] using (ExGen := {[x]}, SVSubst := ∅, KT := false, FP := {[p0 ↾ Prf]} ∪ frames_of_AC AC)
IH2: Γ ⊢i exists_quantify x AC.[□↦p^{evar:0↦x}] ---> AC.[□↦ex , p] using (ExGen := {[x]}, SVSubst := ∅, KT := false, FP := frames_of_AC AC)
Hwfex: well_formed (ex , AC.[□↦p])
Hxfr1: evar_is_fresh_in x AC.[□↦p]
Hxfrp: evar_is_fresh_in x p
HxAC: x ∉ AC_free_evars AC
Hwf': well_formed (exists_quantify x AC.[□↦p^{evar:0↦x}])
Hwfeo: well_formed p^{evar:0↦x}
Hwf'p0: well_formed (exists_quantify x (p0 $ AC.[□↦p^{evar:0↦x}]))
H: Γ ⊢i AC.[□↦ex , p] ---> exists_quantify x AC.[□↦p^{evar:0↦x}] using (ExGen := {[x]}, SVSubst := ∅, KT := false, FP := frames_of_AC AC)

Γ ⊢i p0 $ exists_quantify x AC.[□↦p^{evar:0↦x}] ---> exists_quantify x (p0 $ AC.[□↦p^{evar:0↦x}]) using (ExGen := {[x]}, SVSubst := ∅, KT := false, FP := {[p0 ↾ Prf]} ∪ frames_of_AC AC)
Σ: Signature
Γ: Theory
p0: Pattern
AC: Application_context
Prf: well_formed p0
p: Pattern
x: evar
Hx: evar_is_fresh_in x (p0 $ AC.[□↦p])
Hwf: well_formed (ex , p) = true
p': Pattern
Heqp': p' = AC.[□↦p^{evar:0↦x}]
IH1: Γ ⊢i p0 $ AC.[□↦ex , p] ---> p0 $ exists_quantify x p' using (ExGen := {[x]}, SVSubst := ∅, KT := false, FP := {[p0 ↾ Prf]} ∪ frames_of_AC AC)
IH2: Γ ⊢i exists_quantify x p' ---> AC.[□↦ex , p] using (ExGen := {[x]}, SVSubst := ∅, KT := false, FP := frames_of_AC AC)
Hwfex: well_formed (ex , AC.[□↦p])
Hxfr1: evar_is_fresh_in x AC.[□↦p]
Hxfrp: evar_is_fresh_in x p
HxAC: x ∉ AC_free_evars AC
Hwf': well_formed (exists_quantify x p')
Hwfeo: well_formed p^{evar:0↦x}
Hwf'p0: well_formed (exists_quantify x (p0 $ p'))
H: Γ ⊢i AC.[□↦ex , p] ---> exists_quantify x p' using (ExGen := {[x]}, SVSubst := ∅, KT := false, FP := frames_of_AC AC)

Γ ⊢i p0 $ exists_quantify x p' ---> exists_quantify x (p0 $ p') using (ExGen := {[x]}, SVSubst := ∅, KT := false, FP := {[p0 ↾ Prf]} ∪ frames_of_AC AC)
Σ: Signature
Γ: Theory
p0: Pattern
AC: Application_context
Prf: well_formed p0
p: Pattern
x: evar
Hx: evar_is_fresh_in x (p0 $ AC.[□↦p])
Hwf: well_formed (ex , p) = true
p': Pattern
Heqp': p' = AC.[□↦p^{evar:0↦x}]
IH1: Γ ⊢i p0 $ AC.[□↦ex , p] ---> p0 $ exists_quantify x p' using (ExGen := {[x]}, SVSubst := ∅, KT := false, FP := {[p0 ↾ Prf]} ∪ frames_of_AC AC)
IH2: Γ ⊢i exists_quantify x p' ---> AC.[□↦ex , p] using (ExGen := {[x]}, SVSubst := ∅, KT := false, FP := frames_of_AC AC)
Hwfex: well_formed (ex , AC.[□↦p])
Hxfr1: evar_is_fresh_in x AC.[□↦p]
Hxfrp: evar_is_fresh_in x p
HxAC: x ∉ AC_free_evars AC
Hwf': well_formed (exists_quantify x p')
Hwfeo: well_formed p^{evar:0↦x}
Hwf'p0: well_formed (exists_quantify x (p0 $ p'))
H: Γ ⊢i AC.[□↦ex , p] ---> exists_quantify x p' using (ExGen := {[x]}, SVSubst := ∅, KT := false, FP := frames_of_AC AC)

Γ ⊢i p0 $ (ex , p'^{{evar:x↦0}}) ---> (ex , (p0 $ p')^{{evar:x↦0}}) using (ExGen := {[x]}, SVSubst := ∅, KT := false, FP := {[p0 ↾ Prf]} ∪ frames_of_AC AC)
Σ: Signature
Γ: Theory
p0: Pattern
AC: Application_context
Prf: well_formed p0
p: Pattern
x: evar
Hx: evar_is_fresh_in x (p0 $ AC.[□↦p])
Hwf: well_formed (ex , p) = true
p': Pattern
Heqp': p' = AC.[□↦p^{evar:0↦x}]
IH1: Γ ⊢i p0 $ AC.[□↦ex , p] ---> p0 $ exists_quantify x p' using (ExGen := {[x]}, SVSubst := ∅, KT := false, FP := {[p0 ↾ Prf]} ∪ frames_of_AC AC)
IH2: Γ ⊢i exists_quantify x p' ---> AC.[□↦ex , p] using (ExGen := {[x]}, SVSubst := ∅, KT := false, FP := frames_of_AC AC)
Hwfex: well_formed (ex , AC.[□↦p])
Hxfr1: evar_is_fresh_in x AC.[□↦p]
Hxfrp: evar_is_fresh_in x p
HxAC: x ∉ AC_free_evars AC
Hwf': well_formed (exists_quantify x p')
Hwfeo: well_formed p^{evar:0↦x}
Hwf'p0: well_formed (exists_quantify x (p0 $ p'))
H: Γ ⊢i AC.[□↦ex , p] ---> exists_quantify x p' using (ExGen := {[x]}, SVSubst := ∅, KT := false, FP := frames_of_AC AC)

Γ ⊢i p0 $ (ex , p'^{{evar:x↦0}}) ---> (ex , p0^{{evar:x↦0}} $ p'^{{evar:x↦0}}) using (ExGen := {[x]}, SVSubst := ∅, KT := false, FP := {[p0 ↾ Prf]} ∪ frames_of_AC AC)
Σ: Signature
Γ: Theory
p0: Pattern
AC: Application_context
Prf: well_formed p0
p: Pattern
x: evar
Hx: evar_is_fresh_in x (p0 $ AC.[□↦p])
Hwf: well_formed (ex , p) = true
p': Pattern
Heqp': p' = AC.[□↦p^{evar:0↦x}]
IH1: Γ ⊢i p0 $ AC.[□↦ex , p] ---> p0 $ exists_quantify x p' using (ExGen := {[x]}, SVSubst := ∅, KT := false, FP := {[p0 ↾ Prf]} ∪ frames_of_AC AC)
IH2: Γ ⊢i exists_quantify x p' ---> AC.[□↦ex , p] using (ExGen := {[x]}, SVSubst := ∅, KT := false, FP := frames_of_AC AC)
Hwfex: well_formed (ex , AC.[□↦p])
Hxfr1: evar_is_fresh_in x AC.[□↦p]
Hxfrp: evar_is_fresh_in x p
HxAC: x ∉ AC_free_evars AC
Hwf': well_formed (exists_quantify x p')
Hwfeo: well_formed p^{evar:0↦x}
Hwf'p0: well_formed (exists_quantify x (p0 $ p'))
H: Γ ⊢i AC.[□↦ex , p] ---> exists_quantify x p' using (ExGen := {[x]}, SVSubst := ∅, KT := false, FP := frames_of_AC AC)

evar_is_fresh_in x p0
Σ: Signature
Γ: Theory
p0: Pattern
AC: Application_context
Prf: well_formed p0
p: Pattern
x: evar
Hx: evar_is_fresh_in x (p0 $ AC.[□↦p])
Hwf: well_formed (ex , p) = true
p': Pattern
Heqp': p' = AC.[□↦p^{evar:0↦x}]
IH1: Γ ⊢i p0 $ AC.[□↦ex , p] ---> p0 $ exists_quantify x p' using (ExGen := {[x]}, SVSubst := ∅, KT := false, FP := {[p0 ↾ Prf]} ∪ frames_of_AC AC)
IH2: Γ ⊢i exists_quantify x p' ---> AC.[□↦ex , p] using (ExGen := {[x]}, SVSubst := ∅, KT := false, FP := frames_of_AC AC)
Hwfex: well_formed (ex , AC.[□↦p])
Hxfr1: evar_is_fresh_in x AC.[□↦p]
Hxfrp: evar_is_fresh_in x p
HxAC: x ∉ AC_free_evars AC
Hwf': well_formed (exists_quantify x p')
Hwfeo: well_formed p^{evar:0↦x}
Hwf'p0: well_formed (exists_quantify x (p0 $ p'))
H: Γ ⊢i AC.[□↦ex , p] ---> exists_quantify x p' using (ExGen := {[x]}, SVSubst := ∅, KT := false, FP := frames_of_AC AC)
Γ ⊢i p0 $ (ex , p'^{{evar:x↦0}}) ---> (ex , p0 $ p'^{{evar:x↦0}}) using (ExGen := {[x]}, SVSubst := ∅, KT := false, FP := {[p0 ↾ Prf]} ∪ frames_of_AC AC)
Σ: Signature
Γ: Theory
p0: Pattern
AC: Application_context
Prf: well_formed p0
p: Pattern
x: evar
Hx: evar_is_fresh_in x (p0 $ AC.[□↦p])
Hwf: well_formed (ex , p) = true
p': Pattern
Heqp': p' = AC.[□↦p^{evar:0↦x}]
IH1: Γ ⊢i p0 $ AC.[□↦ex , p] ---> p0 $ exists_quantify x p' using (ExGen := {[x]}, SVSubst := ∅, KT := false, FP := {[p0 ↾ Prf]} ∪ frames_of_AC AC)
IH2: Γ ⊢i exists_quantify x p' ---> AC.[□↦ex , p] using (ExGen := {[x]}, SVSubst := ∅, KT := false, FP := frames_of_AC AC)
Hwfex: well_formed (ex , AC.[□↦p])
Hxfr1: evar_is_fresh_in x AC.[□↦p]
Hxfrp: evar_is_fresh_in x p
HxAC: x ∉ AC_free_evars AC
Hwf': well_formed (exists_quantify x p')
Hwfeo: well_formed p^{evar:0↦x}
Hwf'p0: well_formed (exists_quantify x (p0 $ p'))
H: Γ ⊢i AC.[□↦ex , p] ---> exists_quantify x p' using (ExGen := {[x]}, SVSubst := ∅, KT := false, FP := frames_of_AC AC)

evar_is_fresh_in x p0
Σ: Signature
Γ: Theory
p0: Pattern
AC: Application_context
Prf: well_formed p0
p: Pattern
x: evar
Hx: evar_is_fresh_in x (p0 $ AC.[□↦p])
Hwf: well_formed (ex , p) = true
p': Pattern
Heqp': p' = AC.[□↦p^{evar:0↦x}]
IH1: Γ ⊢i p0 $ AC.[□↦ex , p] ---> p0 $ exists_quantify x p' using (ExGen := {[x]}, SVSubst := ∅, KT := false, FP := {[p0 ↾ Prf]} ∪ frames_of_AC AC)
IH2: Γ ⊢i exists_quantify x p' ---> AC.[□↦ex , p] using (ExGen := {[x]}, SVSubst := ∅, KT := false, FP := frames_of_AC AC)
Hwfex: well_formed (ex , AC.[□↦p])
Hxfr1: evar_is_fresh_in x AC.[□↦p]
Hxfrp: evar_is_fresh_in x p
HxAC: x ∉ AC_free_evars AC
Hwf': well_formed (exists_quantify x p')
Hwfeo: well_formed p^{evar:0↦x}
Hwf'p0: well_formed (exists_quantify x (p0 $ p'))
H: Γ ⊢i AC.[□↦ex , p] ---> exists_quantify x p' using (ExGen := {[x]}, SVSubst := ∅, KT := false, FP := frames_of_AC AC)

evar_is_fresh_in x (p0 $ ?ϕ₂)
apply Hx.
Σ: Signature
Γ: Theory
p0: Pattern
AC: Application_context
Prf: well_formed p0
p: Pattern
x: evar
Hx: evar_is_fresh_in x (p0 $ AC.[□↦p])
Hwf: well_formed (ex , p) = true
p': Pattern
Heqp': p' = AC.[□↦p^{evar:0↦x}]
IH1: Γ ⊢i p0 $ AC.[□↦ex , p] ---> p0 $ exists_quantify x p' using (ExGen := {[x]}, SVSubst := ∅, KT := false, FP := {[p0 ↾ Prf]} ∪ frames_of_AC AC)
IH2: Γ ⊢i exists_quantify x p' ---> AC.[□↦ex , p] using (ExGen := {[x]}, SVSubst := ∅, KT := false, FP := frames_of_AC AC)
Hwfex: well_formed (ex , AC.[□↦p])
Hxfr1: evar_is_fresh_in x AC.[□↦p]
Hxfrp: evar_is_fresh_in x p
HxAC: x ∉ AC_free_evars AC
Hwf': well_formed (exists_quantify x p')
Hwfeo: well_formed p^{evar:0↦x}
Hwf'p0: well_formed (exists_quantify x (p0 $ p'))
H: Γ ⊢i AC.[□↦ex , p] ---> exists_quantify x p' using (ExGen := {[x]}, SVSubst := ∅, KT := false, FP := frames_of_AC AC)

Γ ⊢i p0 $ (ex , p'^{{evar:x↦0}}) ---> (ex , p0 $ p'^{{evar:x↦0}}) using (ExGen := {[x]}, SVSubst := ∅, KT := false, FP := {[p0 ↾ Prf]} ∪ frames_of_AC AC)
Σ: Signature
Γ: Theory
p0: Pattern
AC: Application_context
Prf: well_formed p0
p: Pattern
x: evar
Hx: evar_is_fresh_in x (p0 $ AC.[□↦p])
Hwf: well_formed (ex , p) = true
p': Pattern
Heqp': p' = AC.[□↦p^{evar:0↦x}]
IH1: Γ ⊢i p0 $ AC.[□↦ex , p] ---> p0 $ exists_quantify x p' using (ExGen := {[x]}, SVSubst := ∅, KT := false, FP := {[p0 ↾ Prf]} ∪ frames_of_AC AC)
IH2: Γ ⊢i exists_quantify x p' ---> AC.[□↦ex , p] using (ExGen := {[x]}, SVSubst := ∅, KT := false, FP := frames_of_AC AC)
Hwfex: well_formed (ex , AC.[□↦p])
Hxfr1: evar_is_fresh_in x AC.[□↦p]
Hxfrp: evar_is_fresh_in x p
HxAC: x ∉ AC_free_evars AC
Hwf': well_formed (exists_quantify x p')
Hwfeo: well_formed p^{evar:0↦x}
Hwf'p0: well_formed (exists_quantify x (p0 $ p'))
H: Γ ⊢i AC.[□↦ex , p] ---> exists_quantify x p' using (ExGen := {[x]}, SVSubst := ∅, KT := false, FP := frames_of_AC AC)

Γ ⊢i p0 $ (ex , p'^{{evar:x↦0}}) ---> (ex , p0 $ p'^{{evar:x↦0}}) using BasicReasoning
Σ: Signature
Γ: Theory
p0: Pattern
AC: Application_context
Prf: well_formed p0
p: Pattern
x: evar
Hx: evar_is_fresh_in x (p0 $ AC.[□↦p])
Hwf: well_formed (ex , p) = true
p': Pattern
Heqp': p' = AC.[□↦p^{evar:0↦x}]
IH1: Γ ⊢i p0 $ AC.[□↦ex , p] ---> p0 $ exists_quantify x p' using (ExGen := {[x]}, SVSubst := ∅, KT := false, FP := {[p0 ↾ Prf]} ∪ frames_of_AC AC)
IH2: Γ ⊢i exists_quantify x p' ---> AC.[□↦ex , p] using (ExGen := {[x]}, SVSubst := ∅, KT := false, FP := frames_of_AC AC)
Hwfex: well_formed (ex , AC.[□↦p])
Hxfr1: evar_is_fresh_in x AC.[□↦p]
Hxfrp: evar_is_fresh_in x p
HxAC: x ∉ AC_free_evars AC
Hwf': well_formed (exists_quantify x p')
Hwfeo: well_formed p^{evar:0↦x}
Hwf'p0: well_formed (exists_quantify x (p0 $ p'))
H: Γ ⊢i AC.[□↦ex , p] ---> exists_quantify x p' using (ExGen := {[x]}, SVSubst := ∅, KT := false, FP := frames_of_AC AC)

well_formed (ex , p'^{{evar:x↦0}})
Σ: Signature
Γ: Theory
p0: Pattern
AC: Application_context
Prf: well_formed p0
p: Pattern
x: evar
Hx: evar_is_fresh_in x (p0 $ AC.[□↦p])
Hwf: well_formed (ex , p) = true
p': Pattern
Heqp': p' = AC.[□↦p^{evar:0↦x}]
IH1: Γ ⊢i p0 $ AC.[□↦ex , p] ---> p0 $ exists_quantify x p' using (ExGen := {[x]}, SVSubst := ∅, KT := false, FP := {[p0 ↾ Prf]} ∪ frames_of_AC AC)
IH2: Γ ⊢i exists_quantify x p' ---> AC.[□↦ex , p] using (ExGen := {[x]}, SVSubst := ∅, KT := false, FP := frames_of_AC AC)
Hwfex: well_formed (ex , AC.[□↦p])
Hxfr1: evar_is_fresh_in x AC.[□↦p]
Hxfrp: evar_is_fresh_in x p
HxAC: x ∉ AC_free_evars AC
Hwf': well_formed (exists_quantify x p')
Hwfeo: well_formed p^{evar:0↦x}
Hwf'p0: well_formed (exists_quantify x (p0 $ p'))
H: Γ ⊢i AC.[□↦ex , p] ---> exists_quantify x p' using (ExGen := {[x]}, SVSubst := ∅, KT := false, FP := frames_of_AC AC)
well_formed p0
Σ: Signature
Γ: Theory
p0: Pattern
AC: Application_context
Prf: well_formed p0
p: Pattern
x: evar
Hx: evar_is_fresh_in x (p0 $ AC.[□↦p])
Hwf: well_formed (ex , p) = true
p': Pattern
Heqp': p' = AC.[□↦p^{evar:0↦x}]
IH1: Γ ⊢i p0 $ AC.[□↦ex , p] ---> p0 $ exists_quantify x p' using (ExGen := {[x]}, SVSubst := ∅, KT := false, FP := {[p0 ↾ Prf]} ∪ frames_of_AC AC)
IH2: Γ ⊢i exists_quantify x p' ---> AC.[□↦ex , p] using (ExGen := {[x]}, SVSubst := ∅, KT := false, FP := frames_of_AC AC)
Hwfex: well_formed (ex , AC.[□↦p])
Hxfr1: evar_is_fresh_in x AC.[□↦p]
Hxfrp: evar_is_fresh_in x p
HxAC: x ∉ AC_free_evars AC
Hwf': well_formed (exists_quantify x p')
Hwfeo: well_formed p^{evar:0↦x}
Hwf'p0: well_formed (exists_quantify x (p0 $ p'))
H: Γ ⊢i AC.[□↦ex , p] ---> exists_quantify x p' using (ExGen := {[x]}, SVSubst := ∅, KT := false, FP := frames_of_AC AC)

well_formed p0
wf_auto2.
Σ: Signature
Γ: Theory
p0: Pattern
AC: Application_context
Prf: well_formed p0
p: Pattern
x: evar
Hx: evar_is_fresh_in x (p0 $ AC.[□↦p])
Hwf: well_formed (ex , p) = true
IH1: Γ ⊢i AC.[□↦ex , p] ---> exists_quantify x AC.[□↦p^{evar:0↦x}] using (ExGen := {[x]}, SVSubst := ∅, KT := false, FP := frames_of_AC AC)
IH2: Γ ⊢i exists_quantify x AC.[□↦p^{evar:0↦x}] ---> AC.[□↦ex , p] using (ExGen := {[x]}, SVSubst := ∅, KT := false, FP := frames_of_AC AC)
Hwfex: well_formed (ex , AC.[□↦p])
Hxfr1: evar_is_fresh_in x AC.[□↦p]
Hxfrp: evar_is_fresh_in x p
HxAC: x ∉ AC_free_evars AC
Hwf': well_formed (exists_quantify x AC.[□↦p^{evar:0↦x}])
Hwfeo: well_formed p^{evar:0↦x}
Hwf'p0: well_formed (exists_quantify x (p0 $ AC.[□↦p^{evar:0↦x}]))

Γ ⊢i exists_quantify x (p0 $ AC.[□↦p^{evar:0↦x}]) ---> p0 $ AC.[□↦ex , p] using (ExGen := {[x]}, SVSubst := ∅, KT := false, FP := {[p0 ↾ Prf]} ∪ frames_of_AC AC)
Σ: Signature
Γ: Theory
p0: Pattern
AC: Application_context
Prf: well_formed p0
p: Pattern
x: evar
Hx: evar_is_fresh_in x (p0 $ AC.[□↦p])
Hwf: well_formed (ex , p) = true
IH2: Γ ⊢i exists_quantify x AC.[□↦p^{evar:0↦x}] ---> AC.[□↦ex , p] using (ExGen := {[x]}, SVSubst := ∅, KT := false, FP := frames_of_AC AC)
Hwfex: well_formed (ex , AC.[□↦p])
Hxfr1: evar_is_fresh_in x AC.[□↦p]
Hxfrp: evar_is_fresh_in x p
HxAC: x ∉ AC_free_evars AC
Hwf': well_formed (exists_quantify x AC.[□↦p^{evar:0↦x}])
Hwfeo: well_formed p^{evar:0↦x}
Hwf'p0: well_formed (exists_quantify x (p0 $ AC.[□↦p^{evar:0↦x}]))

Γ ⊢i exists_quantify x (p0 $ AC.[□↦p^{evar:0↦x}]) ---> p0 $ AC.[□↦ex , p] using (ExGen := {[x]}, SVSubst := ∅, KT := false, FP := {[p0 ↾ Prf]} ∪ frames_of_AC AC)
Σ: Signature
Γ: Theory
p0: Pattern
AC: Application_context
Prf: well_formed p0
p: Pattern
x: evar
Hx: evar_is_fresh_in x (p0 $ AC.[□↦p])
Hwf: well_formed (ex , p) = true
IH2: Γ ⊢i exists_quantify x AC.[□↦p^{evar:0↦x}] ---> AC.[□↦ex , p] using (ExGen := {[x]}, SVSubst := ∅, KT := false, FP := {[p0 ↾ Prf]} ∪ frames_of_AC AC)
Hwfex: well_formed (ex , AC.[□↦p])
Hxfr1: evar_is_fresh_in x AC.[□↦p]
Hxfrp: evar_is_fresh_in x p
HxAC: x ∉ AC_free_evars AC
Hwf': well_formed (exists_quantify x AC.[□↦p^{evar:0↦x}])
Hwfeo: well_formed p^{evar:0↦x}
Hwf'p0: well_formed (exists_quantify x (p0 $ AC.[□↦p^{evar:0↦x}]))

Γ ⊢i exists_quantify x (p0 $ AC.[□↦p^{evar:0↦x}]) ---> p0 $ AC.[□↦ex , p] using (ExGen := {[x]}, SVSubst := ∅, KT := false, FP := {[p0 ↾ Prf]} ∪ frames_of_AC AC)
Σ: Signature
Γ: Theory
p0: Pattern
AC: Application_context
Prf: well_formed p0
p: Pattern
x: evar
Hx: evar_is_fresh_in x (p0 $ AC.[□↦p])
Hwf: well_formed (ex , p) = true
IH2: Γ ⊢i p0 $ exists_quantify x AC.[□↦p^{evar:0↦x}] ---> p0 $ AC.[□↦ex , p] using (ExGen := {[x]}, SVSubst := ∅, KT := false, FP := {[p0 ↾ Prf]} ∪ frames_of_AC AC)
Hwfex: well_formed (ex , AC.[□↦p])
Hxfr1: evar_is_fresh_in x AC.[□↦p]
Hxfrp: evar_is_fresh_in x p
HxAC: x ∉ AC_free_evars AC
Hwf': well_formed (exists_quantify x AC.[□↦p^{evar:0↦x}])
Hwfeo: well_formed p^{evar:0↦x}
Hwf'p0: well_formed (exists_quantify x (p0 $ AC.[□↦p^{evar:0↦x}]))

Γ ⊢i exists_quantify x (p0 $ AC.[□↦p^{evar:0↦x}]) ---> p0 $ AC.[□↦ex , p] using (ExGen := {[x]}, SVSubst := ∅, KT := false, FP := {[p0 ↾ Prf]} ∪ frames_of_AC AC)
Σ: Signature
Γ: Theory
p0: Pattern
AC: Application_context
Prf: well_formed p0
p: Pattern
x: evar
Hx: evar_is_fresh_in x (p0 $ AC.[□↦p])
Hwf: well_formed (ex , p) = true
IH2: Γ ⊢i p0 $ exists_quantify x AC.[□↦p^{evar:0↦x}] ---> p0 $ AC.[□↦ex , p] using (ExGen := {[x]}, SVSubst := ∅, KT := false, FP := {[p0 ↾ Prf]} ∪ frames_of_AC AC)
Hwfex: well_formed (ex , AC.[□↦p])
Hxfr1: evar_is_fresh_in x AC.[□↦p]
Hxfrp: evar_is_fresh_in x p
HxAC: x ∉ AC_free_evars AC
Hwf': well_formed (exists_quantify x AC.[□↦p^{evar:0↦x}])
Hwfeo: well_formed p^{evar:0↦x}
Hwf'p0: well_formed (exists_quantify x (p0 $ AC.[□↦p^{evar:0↦x}]))

well_formed (exists_quantify x (p0 $ AC.[□↦p^{evar:0↦x}]))
Σ: Signature
Γ: Theory
p0: Pattern
AC: Application_context
Prf: well_formed p0
p: Pattern
x: evar
Hx: evar_is_fresh_in x (p0 $ AC.[□↦p])
Hwf: well_formed (ex , p) = true
IH2: Γ ⊢i p0 $ exists_quantify x AC.[□↦p^{evar:0↦x}] ---> p0 $ AC.[□↦ex , p] using (ExGen := {[x]}, SVSubst := ∅, KT := false, FP := {[p0 ↾ Prf]} ∪ frames_of_AC AC)
Hwfex: well_formed (ex , AC.[□↦p])
Hxfr1: evar_is_fresh_in x AC.[□↦p]
Hxfrp: evar_is_fresh_in x p
HxAC: x ∉ AC_free_evars AC
Hwf': well_formed (exists_quantify x AC.[□↦p^{evar:0↦x}])
Hwfeo: well_formed p^{evar:0↦x}
Hwf'p0: well_formed (exists_quantify x (p0 $ AC.[□↦p^{evar:0↦x}]))
well_formed ?B
Σ: Signature
Γ: Theory
p0: Pattern
AC: Application_context
Prf: well_formed p0
p: Pattern
x: evar
Hx: evar_is_fresh_in x (p0 $ AC.[□↦p])
Hwf: well_formed (ex , p) = true
IH2: Γ ⊢i p0 $ exists_quantify x AC.[□↦p^{evar:0↦x}] ---> p0 $ AC.[□↦ex , p] using (ExGen := {[x]}, SVSubst := ∅, KT := false, FP := {[p0 ↾ Prf]} ∪ frames_of_AC AC)
Hwfex: well_formed (ex , AC.[□↦p])
Hxfr1: evar_is_fresh_in x AC.[□↦p]
Hxfrp: evar_is_fresh_in x p
HxAC: x ∉ AC_free_evars AC
Hwf': well_formed (exists_quantify x AC.[□↦p^{evar:0↦x}])
Hwfeo: well_formed p^{evar:0↦x}
Hwf'p0: well_formed (exists_quantify x (p0 $ AC.[□↦p^{evar:0↦x}]))
well_formed (p0 $ AC.[□↦ex , p])
Σ: Signature
Γ: Theory
p0: Pattern
AC: Application_context
Prf: well_formed p0
p: Pattern
x: evar
Hx: evar_is_fresh_in x (p0 $ AC.[□↦p])
Hwf: well_formed (ex , p) = true
IH2: Γ ⊢i p0 $ exists_quantify x AC.[□↦p^{evar:0↦x}] ---> p0 $ AC.[□↦ex , p] using (ExGen := {[x]}, SVSubst := ∅, KT := false, FP := {[p0 ↾ Prf]} ∪ frames_of_AC AC)
Hwfex: well_formed (ex , AC.[□↦p])
Hxfr1: evar_is_fresh_in x AC.[□↦p]
Hxfrp: evar_is_fresh_in x p
HxAC: x ∉ AC_free_evars AC
Hwf': well_formed (exists_quantify x AC.[□↦p^{evar:0↦x}])
Hwfeo: well_formed p^{evar:0↦x}
Hwf'p0: well_formed (exists_quantify x (p0 $ AC.[□↦p^{evar:0↦x}]))
Γ ⊢i exists_quantify x (p0 $ AC.[□↦p^{evar:0↦x}]) ---> ?B using (ExGen := {[x]}, SVSubst := ∅, KT := false, FP := {[p0 ↾ Prf]} ∪ frames_of_AC AC)
Σ: Signature
Γ: Theory
p0: Pattern
AC: Application_context
Prf: well_formed p0
p: Pattern
x: evar
Hx: evar_is_fresh_in x (p0 $ AC.[□↦p])
Hwf: well_formed (ex , p) = true
IH2: Γ ⊢i p0 $ exists_quantify x AC.[□↦p^{evar:0↦x}] ---> p0 $ AC.[□↦ex , p] using (ExGen := {[x]}, SVSubst := ∅, KT := false, FP := {[p0 ↾ Prf]} ∪ frames_of_AC AC)
Hwfex: well_formed (ex , AC.[□↦p])
Hxfr1: evar_is_fresh_in x AC.[□↦p]
Hxfrp: evar_is_fresh_in x p
HxAC: x ∉ AC_free_evars AC
Hwf': well_formed (exists_quantify x AC.[□↦p^{evar:0↦x}])
Hwfeo: well_formed p^{evar:0↦x}
Hwf'p0: well_formed (exists_quantify x (p0 $ AC.[□↦p^{evar:0↦x}]))
Γ ⊢i ?B ---> p0 $ AC.[□↦ex , p] using (ExGen := {[x]}, SVSubst := ∅, KT := false, FP := {[p0 ↾ Prf]} ∪ frames_of_AC AC)
Σ: Signature
Γ: Theory
p0: Pattern
AC: Application_context
Prf: well_formed p0
p: Pattern
x: evar
Hx: evar_is_fresh_in x (p0 $ AC.[□↦p])
Hwf: well_formed (ex , p) = true
IH2: Γ ⊢i p0 $ exists_quantify x AC.[□↦p^{evar:0↦x}] ---> p0 $ AC.[□↦ex , p] using (ExGen := {[x]}, SVSubst := ∅, KT := false, FP := {[p0 ↾ Prf]} ∪ frames_of_AC AC)
Hwfex: well_formed (ex , AC.[□↦p])
Hxfr1: evar_is_fresh_in x AC.[□↦p]
Hxfrp: evar_is_fresh_in x p
HxAC: x ∉ AC_free_evars AC
Hwf': well_formed (exists_quantify x AC.[□↦p^{evar:0↦x}])
Hwfeo: well_formed p^{evar:0↦x}
Hwf'p0: well_formed (exists_quantify x (p0 $ AC.[□↦p^{evar:0↦x}]))

well_formed (exists_quantify x (p0 $ AC.[□↦p^{evar:0↦x}]))
Σ: Signature
Γ: Theory
p0: Pattern
AC: Application_context
Prf: well_formed p0
p: Pattern
x: evar
Hx: evar_is_fresh_in x (p0 $ AC.[□↦p])
Hwf: well_formed (ex , p) = true
IH2: Γ ⊢i p0 $ exists_quantify x AC.[□↦p^{evar:0↦x}] ---> p0 $ AC.[□↦ex , p] using (ExGen := {[x]}, SVSubst := ∅, KT := false, FP := {[p0 ↾ Prf]} ∪ frames_of_AC AC)
Hwfex: well_formed (ex , AC.[□↦p])
Hxfr1: evar_is_fresh_in x AC.[□↦p]
Hxfrp: evar_is_fresh_in x p
HxAC: x ∉ AC_free_evars AC
Hwf': well_formed (exists_quantify x AC.[□↦p^{evar:0↦x}])
Hwfeo: well_formed p^{evar:0↦x}
Hwf'p0: well_formed (exists_quantify x (p0 $ AC.[□↦p^{evar:0↦x}]))
well_formed (p0 $ exists_quantify x AC.[□↦p^{evar:0↦x}])
Σ: Signature
Γ: Theory
p0: Pattern
AC: Application_context
Prf: well_formed p0
p: Pattern
x: evar
Hx: evar_is_fresh_in x (p0 $ AC.[□↦p])
Hwf: well_formed (ex , p) = true
IH2: Γ ⊢i p0 $ exists_quantify x AC.[□↦p^{evar:0↦x}] ---> p0 $ AC.[□↦ex , p] using (ExGen := {[x]}, SVSubst := ∅, KT := false, FP := {[p0 ↾ Prf]} ∪ frames_of_AC AC)
Hwfex: well_formed (ex , AC.[□↦p])
Hxfr1: evar_is_fresh_in x AC.[□↦p]
Hxfrp: evar_is_fresh_in x p
HxAC: x ∉ AC_free_evars AC
Hwf': well_formed (exists_quantify x AC.[□↦p^{evar:0↦x}])
Hwfeo: well_formed p^{evar:0↦x}
Hwf'p0: well_formed (exists_quantify x (p0 $ AC.[□↦p^{evar:0↦x}]))
well_formed (p0 $ AC.[□↦ex , p])
Σ: Signature
Γ: Theory
p0: Pattern
AC: Application_context
Prf: well_formed p0
p: Pattern
x: evar
Hx: evar_is_fresh_in x (p0 $ AC.[□↦p])
Hwf: well_formed (ex , p) = true
IH2: Γ ⊢i p0 $ exists_quantify x AC.[□↦p^{evar:0↦x}] ---> p0 $ AC.[□↦ex , p] using (ExGen := {[x]}, SVSubst := ∅, KT := false, FP := {[p0 ↾ Prf]} ∪ frames_of_AC AC)
Hwfex: well_formed (ex , AC.[□↦p])
Hxfr1: evar_is_fresh_in x AC.[□↦p]
Hxfrp: evar_is_fresh_in x p
HxAC: x ∉ AC_free_evars AC
Hwf': well_formed (exists_quantify x AC.[□↦p^{evar:0↦x}])
Hwfeo: well_formed p^{evar:0↦x}
Hwf'p0: well_formed (exists_quantify x (p0 $ AC.[□↦p^{evar:0↦x}]))
Γ ⊢i exists_quantify x (p0 $ AC.[□↦p^{evar:0↦x}]) ---> p0 $ exists_quantify x AC.[□↦p^{evar:0↦x}] using (ExGen := {[x]}, SVSubst := ∅, KT := false, FP := {[p0 ↾ Prf]} ∪ frames_of_AC AC)
Σ: Signature
Γ: Theory
p0: Pattern
AC: Application_context
Prf: well_formed p0
p: Pattern
x: evar
Hx: evar_is_fresh_in x (p0 $ AC.[□↦p])
Hwf: well_formed (ex , p) = true
IH2: Γ ⊢i p0 $ exists_quantify x AC.[□↦p^{evar:0↦x}] ---> p0 $ AC.[□↦ex , p] using (ExGen := {[x]}, SVSubst := ∅, KT := false, FP := {[p0 ↾ Prf]} ∪ frames_of_AC AC)
Hwfex: well_formed (ex , AC.[□↦p])
Hxfr1: evar_is_fresh_in x AC.[□↦p]
Hxfrp: evar_is_fresh_in x p
HxAC: x ∉ AC_free_evars AC
Hwf': well_formed (exists_quantify x AC.[□↦p^{evar:0↦x}])
Hwfeo: well_formed p^{evar:0↦x}
Hwf'p0: well_formed (exists_quantify x (p0 $ AC.[□↦p^{evar:0↦x}]))

Γ ⊢i exists_quantify x (p0 $ AC.[□↦p^{evar:0↦x}]) ---> p0 $ exists_quantify x AC.[□↦p^{evar:0↦x}] using (ExGen := {[x]}, SVSubst := ∅, KT := false, FP := {[p0 ↾ Prf]} ∪ frames_of_AC AC)
Σ: Signature
Γ: Theory
p0: Pattern
AC: Application_context
Prf: well_formed p0
p: Pattern
x: evar
Hx: evar_is_fresh_in x (p0 $ AC.[□↦p])
Hwf: well_formed (ex , p) = true
IH2: Γ ⊢i p0 $ exists_quantify x AC.[□↦p^{evar:0↦x}] ---> p0 $ AC.[□↦ex , p] using (ExGen := {[x]}, SVSubst := ∅, KT := false, FP := {[p0 ↾ Prf]} ∪ frames_of_AC AC)
Hwfex: well_formed (ex , AC.[□↦p])
Hxfr1: evar_is_fresh_in x AC.[□↦p]
Hxfrp: evar_is_fresh_in x p
HxAC: x ∉ AC_free_evars AC
Hwf': well_formed (exists_quantify x AC.[□↦p^{evar:0↦x}])
Hwfeo: well_formed p^{evar:0↦x}
Hwf'p0: well_formed (exists_quantify x (p0 $ AC.[□↦p^{evar:0↦x}]))

Γ ⊢i exists_quantify x (p0 $ AC.[□↦p^{evar:0↦x}]) ---> p0 $ exists_quantify x AC.[□↦p^{evar:0↦x}] using (ExGen := {[x]}, SVSubst := ∅, KT := false, FP := {[p0 ↾ Prf]} ∪ frames_of_AC AC)
Σ: Signature
Γ: Theory
p0: Pattern
AC: Application_context
Prf: well_formed p0
p: Pattern
x: evar
Hx: evar_is_fresh_in x (p0 $ AC.[□↦p])
Hwf: well_formed (ex , p) = true
IH2: Γ ⊢i exists_quantify x AC.[□↦p^{evar:0↦x}] ---> AC.[□↦ex , p] using (ExGen := {[x]}, SVSubst := ∅, KT := false, FP := {[p0 ↾ Prf]} ∪ frames_of_AC AC)
Hwfex: well_formed (ex , AC.[□↦p])
Hxfr1: evar_is_fresh_in x AC.[□↦p]
Hxfrp: evar_is_fresh_in x p
HxAC: x ∉ AC_free_evars AC
Hwf': well_formed (exists_quantify x AC.[□↦p^{evar:0↦x}])
Hwfeo: well_formed p^{evar:0↦x}
Hwf'p0: well_formed (exists_quantify x (p0 $ AC.[□↦p^{evar:0↦x}]))
ProofInfoLe (ExGen := ∅, SVSubst := ∅, KT := false, FP := {[p0 ↾ Prf]}) (ExGen := {[x]}, SVSubst := ∅, KT := false, FP := {[p0 ↾ Prf]} ∪ frames_of_AC AC)
Σ: Signature
Γ: Theory
p0: Pattern
AC: Application_context
Prf: well_formed p0
p: Pattern
x: evar
Hx: evar_is_fresh_in x (p0 $ AC.[□↦p])
Hwf: well_formed (ex , p) = true
IH2: Γ ⊢i exists_quantify x AC.[□↦p^{evar:0↦x}] ---> AC.[□↦ex , p] using (ExGen := {[x]}, SVSubst := ∅, KT := false, FP := {[p0 ↾ Prf]} ∪ frames_of_AC AC)
Hwfex: well_formed (ex , AC.[□↦p])
Hxfr1: evar_is_fresh_in x AC.[□↦p]
Hxfrp: evar_is_fresh_in x p
HxAC: x ∉ AC_free_evars AC
Hwf': well_formed (exists_quantify x AC.[□↦p^{evar:0↦x}])
Hwfeo: well_formed p^{evar:0↦x}
Hwf'p0: well_formed (exists_quantify x (p0 $ AC.[□↦p^{evar:0↦x}]))

ProofInfoLe (ExGen := ∅, SVSubst := ∅, KT := false, FP := {[p0 ↾ Prf]}) (ExGen := {[x]}, SVSubst := ∅, KT := false, FP := {[p0 ↾ Prf]} ∪ frames_of_AC AC)
try_solve_pile.
Σ: Signature
Γ: Theory
p0: Pattern
AC: Application_context
Prf: well_formed p0
p: Pattern
x: evar
Hx: evar_is_fresh_in x (p0 $ AC.[□↦p])
Hwf: well_formed (ex , p) = true
IH2: Γ ⊢i p0 $ exists_quantify x AC.[□↦p^{evar:0↦x}] ---> p0 $ AC.[□↦ex , p] using (ExGen := {[x]}, SVSubst := ∅, KT := false, FP := {[p0 ↾ Prf]} ∪ frames_of_AC AC)
Hwfex: well_formed (ex , AC.[□↦p])
Hxfr1: evar_is_fresh_in x AC.[□↦p]
Hxfrp: evar_is_fresh_in x p
HxAC: x ∉ AC_free_evars AC
Hwf': well_formed (exists_quantify x AC.[□↦p^{evar:0↦x}])
Hwfeo: well_formed p^{evar:0↦x}
Hwf'p0: well_formed (exists_quantify x (p0 $ AC.[□↦p^{evar:0↦x}]))

Γ ⊢i exists_quantify x (p0 $ AC.[□↦p^{evar:0↦x}]) ---> p0 $ exists_quantify x AC.[□↦p^{evar:0↦x}] using (ExGen := {[x]}, SVSubst := ∅, KT := false, FP := {[p0 ↾ Prf]} ∪ frames_of_AC AC)
Σ: Signature
Γ: Theory
p0: Pattern
AC: Application_context
Prf: well_formed p0
p: Pattern
x: evar
Hx: evar_is_fresh_in x (p0 $ AC.[□↦p])
Hwf: well_formed (ex , p) = true
IH2: Γ ⊢i p0 $ exists_quantify x AC.[□↦p^{evar:0↦x}] ---> p0 $ AC.[□↦ex , p] using (ExGen := {[x]}, SVSubst := ∅, KT := false, FP := {[p0 ↾ Prf]} ∪ frames_of_AC AC)
Hwfex: well_formed (ex , AC.[□↦p])
Hxfr1: evar_is_fresh_in x AC.[□↦p]
Hxfrp: evar_is_fresh_in x p
HxAC: x ∉ AC_free_evars AC
Hwf': well_formed (exists_quantify x AC.[□↦p^{evar:0↦x}])
Hwfeo: well_formed p^{evar:0↦x}
Hwf'p0: well_formed (exists_quantify x (p0 $ AC.[□↦p^{evar:0↦x}]))

ProofInfoLe (ExGen := {[x]}, SVSubst := ∅, KT := false, FP := ∅) (ExGen := {[x]}, SVSubst := ∅, KT := false, FP := {[p0 ↾ Prf]} ∪ frames_of_AC AC)
Σ: Signature
Γ: Theory
p0: Pattern
AC: Application_context
Prf: well_formed p0
p: Pattern
x: evar
Hx: evar_is_fresh_in x (p0 $ AC.[□↦p])
Hwf: well_formed (ex , p) = true
IH2: Γ ⊢i p0 $ exists_quantify x AC.[□↦p^{evar:0↦x}] ---> p0 $ AC.[□↦ex , p] using (ExGen := {[x]}, SVSubst := ∅, KT := false, FP := {[p0 ↾ Prf]} ∪ frames_of_AC AC)
Hwfex: well_formed (ex , AC.[□↦p])
Hxfr1: evar_is_fresh_in x AC.[□↦p]
Hxfrp: evar_is_fresh_in x p
HxAC: x ∉ AC_free_evars AC
Hwf': well_formed (exists_quantify x AC.[□↦p^{evar:0↦x}])
Hwfeo: well_formed p^{evar:0↦x}
Hwf'p0: well_formed (exists_quantify x (p0 $ AC.[□↦p^{evar:0↦x}]))
x ∉ free_evars (p0 $ exists_quantify x AC.[□↦p^{evar:0↦x}])
Σ: Signature
Γ: Theory
p0: Pattern
AC: Application_context
Prf: well_formed p0
p: Pattern
x: evar
Hx: evar_is_fresh_in x (p0 $ AC.[□↦p])
Hwf: well_formed (ex , p) = true
IH2: Γ ⊢i p0 $ exists_quantify x AC.[□↦p^{evar:0↦x}] ---> p0 $ AC.[□↦ex , p] using (ExGen := {[x]}, SVSubst := ∅, KT := false, FP := {[p0 ↾ Prf]} ∪ frames_of_AC AC)
Hwfex: well_formed (ex , AC.[□↦p])
Hxfr1: evar_is_fresh_in x AC.[□↦p]
Hxfrp: evar_is_fresh_in x p
HxAC: x ∉ AC_free_evars AC
Hwf': well_formed (exists_quantify x AC.[□↦p^{evar:0↦x}])
Hwfeo: well_formed p^{evar:0↦x}
Hwf'p0: well_formed (exists_quantify x (p0 $ AC.[□↦p^{evar:0↦x}]))
Γ ⊢i p0 $ AC.[□↦p^{evar:0↦x}] ---> p0 $ exists_quantify x AC.[□↦p^{evar:0↦x}] using (ExGen := {[x]}, SVSubst := ∅, KT := false, FP := {[p0 ↾ Prf]} ∪ frames_of_AC AC)
Σ: Signature
Γ: Theory
p0: Pattern
AC: Application_context
Prf: well_formed p0
p: Pattern
x: evar
Hx: evar_is_fresh_in x (p0 $ AC.[□↦p])
Hwf: well_formed (ex , p) = true
IH2: Γ ⊢i p0 $ exists_quantify x AC.[□↦p^{evar:0↦x}] ---> p0 $ AC.[□↦ex , p] using (ExGen := {[x]}, SVSubst := ∅, KT := false, FP := {[p0 ↾ Prf]} ∪ frames_of_AC AC)
Hwfex: well_formed (ex , AC.[□↦p])
Hxfr1: evar_is_fresh_in x AC.[□↦p]
Hxfrp: evar_is_fresh_in x p
HxAC: x ∉ AC_free_evars AC
Hwf': well_formed (exists_quantify x AC.[□↦p^{evar:0↦x}])
Hwfeo: well_formed p^{evar:0↦x}
Hwf'p0: well_formed (exists_quantify x (p0 $ AC.[□↦p^{evar:0↦x}]))

ProofInfoLe (ExGen := {[x]}, SVSubst := ∅, KT := false, FP := ∅) (ExGen := {[x]}, SVSubst := ∅, KT := false, FP := {[p0 ↾ Prf]} ∪ frames_of_AC AC)
try_solve_pile.
Σ: Signature
Γ: Theory
p0: Pattern
AC: Application_context
Prf: well_formed p0
p: Pattern
x: evar
Hx: evar_is_fresh_in x (p0 $ AC.[□↦p])
Hwf: well_formed (ex , p) = true
IH2: Γ ⊢i p0 $ exists_quantify x AC.[□↦p^{evar:0↦x}] ---> p0 $ AC.[□↦ex , p] using (ExGen := {[x]}, SVSubst := ∅, KT := false, FP := {[p0 ↾ Prf]} ∪ frames_of_AC AC)
Hwfex: well_formed (ex , AC.[□↦p])
Hxfr1: evar_is_fresh_in x AC.[□↦p]
Hxfrp: evar_is_fresh_in x p
HxAC: x ∉ AC_free_evars AC
Hwf': well_formed (exists_quantify x AC.[□↦p^{evar:0↦x}])
Hwfeo: well_formed p^{evar:0↦x}
Hwf'p0: well_formed (exists_quantify x (p0 $ AC.[□↦p^{evar:0↦x}]))

x ∉ free_evars (p0 $ exists_quantify x AC.[□↦p^{evar:0↦x}])
Σ: Signature
Γ: Theory
p0: Pattern
AC: Application_context
Prf: well_formed p0
p: Pattern
x: evar
Hx: evar_is_fresh_in x (p0 $ AC.[□↦p])
Hwf: well_formed (ex , p) = true
IH2: Γ ⊢i p0 $ exists_quantify x AC.[□↦p^{evar:0↦x}] ---> p0 $ AC.[□↦ex , p] using (ExGen := {[x]}, SVSubst := ∅, KT := false, FP := {[p0 ↾ Prf]} ∪ frames_of_AC AC)
Hwfex: well_formed (ex , AC.[□↦p])
Hxfr1: evar_is_fresh_in x AC.[□↦p]
Hxfrp: evar_is_fresh_in x p
HxAC: x ∉ AC_free_evars AC
Hwf': well_formed (exists_quantify x AC.[□↦p^{evar:0↦x}])
Hwfeo: well_formed p^{evar:0↦x}
Hwf'p0: well_formed (exists_quantify x (p0 $ AC.[□↦p^{evar:0↦x}]))
Γ ⊢i p0 $ AC.[□↦p^{evar:0↦x}] ---> p0 $ exists_quantify x AC.[□↦p^{evar:0↦x}] using (ExGen := {[x]}, SVSubst := ∅, KT := false, FP := {[p0 ↾ Prf]} ∪ frames_of_AC AC)
Σ: Signature
Γ: Theory
p0: Pattern
AC: Application_context
Prf: well_formed p0
p: Pattern
x: evar
Hx: evar_is_fresh_in x (p0 $ AC.[□↦p])
Hwf: well_formed (ex , p) = true
IH2: Γ ⊢i p0 $ exists_quantify x AC.[□↦p^{evar:0↦x}] ---> p0 $ AC.[□↦ex , p] using (ExGen := {[x]}, SVSubst := ∅, KT := false, FP := {[p0 ↾ Prf]} ∪ frames_of_AC AC)
Hwfex: well_formed (ex , AC.[□↦p])
Hxfr1: evar_is_fresh_in x AC.[□↦p]
Hxfrp: evar_is_fresh_in x p
HxAC: x ∉ AC_free_evars AC
Hwf': well_formed (exists_quantify x AC.[□↦p^{evar:0↦x}])
Hwfeo: well_formed p^{evar:0↦x}
Hwf'p0: well_formed (exists_quantify x (p0 $ AC.[□↦p^{evar:0↦x}]))

x ∉ free_evars (p0 $ exists_quantify x AC.[□↦p^{evar:0↦x}])
Σ: Signature
Γ: Theory
p0: Pattern
AC: Application_context
Prf: well_formed p0
p: Pattern
x: evar
Hx: evar_is_fresh_in x (p0 $ AC.[□↦p])
Hwf: well_formed (ex , p) = true
IH2: Γ ⊢i p0 $ exists_quantify x AC.[□↦p^{evar:0↦x}] ---> p0 $ AC.[□↦ex , p] using (ExGen := {[x]}, SVSubst := ∅, KT := false, FP := {[p0 ↾ Prf]} ∪ frames_of_AC AC)
Hwfex: well_formed (ex , AC.[□↦p])
Hxfr1: evar_is_fresh_in x AC.[□↦p]
Hxfrp: evar_is_fresh_in x p
HxAC: x ∉ AC_free_evars AC
Hwf': well_formed (exists_quantify x AC.[□↦p^{evar:0↦x}])
Hwfeo: well_formed p^{evar:0↦x}
Hwf'p0: well_formed (exists_quantify x (p0 $ AC.[□↦p^{evar:0↦x}]))

x ∉ free_evars (p0 $ (ex , AC.[□↦p^{evar:0↦x}]^{{evar:x↦0}}))
Σ: Signature
Γ: Theory
p0: Pattern
AC: Application_context
Prf: well_formed p0
p: Pattern
x: evar
Hx: evar_is_fresh_in x (p0 $ AC.[□↦p])
Hwf: well_formed (ex , p) = true
IH2: Γ ⊢i p0 $ exists_quantify x AC.[□↦p^{evar:0↦x}] ---> p0 $ AC.[□↦ex , p] using (ExGen := {[x]}, SVSubst := ∅, KT := false, FP := {[p0 ↾ Prf]} ∪ frames_of_AC AC)
Hwfex: well_formed (ex , AC.[□↦p])
Hxfr1: evar_is_fresh_in x AC.[□↦p]
Hxfrp: evar_is_fresh_in x p
HxAC: x ∉ AC_free_evars AC
Hwf': well_formed (exists_quantify x AC.[□↦p^{evar:0↦x}])
Hwfeo: well_formed p^{evar:0↦x}
Hwf'p0: well_formed (exists_quantify x (p0 $ AC.[□↦p^{evar:0↦x}]))

x ∉ free_evars p0 ∪ free_evars AC.[□↦p^{evar:0↦x}]^{{evar:x↦0}}
Σ: Signature
Γ: Theory
p0: Pattern
AC: Application_context
Prf: well_formed p0
p: Pattern
x: evar
Hx: evar_is_fresh_in x (p0 $ AC.[□↦p])
Hwf: well_formed (ex , p) = true
IH2: Γ ⊢i p0 $ exists_quantify x AC.[□↦p^{evar:0↦x}] ---> p0 $ AC.[□↦ex , p] using (ExGen := {[x]}, SVSubst := ∅, KT := false, FP := {[p0 ↾ Prf]} ∪ frames_of_AC AC)
Hwfex: well_formed (ex , AC.[□↦p])
Hxfr1: evar_is_fresh_in x AC.[□↦p]
Hxfrp: evar_is_fresh_in x p
HxAC: x ∉ AC_free_evars AC
Hwf': well_formed (exists_quantify x AC.[□↦p^{evar:0↦x}])
Hwfeo: well_formed p^{evar:0↦x}
Hwf'p0: well_formed (exists_quantify x (p0 $ AC.[□↦p^{evar:0↦x}]))

x ∉ free_evars p0 ∪ free_evars AC.[□↦p^{evar:0↦x}] ∖ {[x]}
Σ: Signature
Γ: Theory
p0: Pattern
AC: Application_context
Prf: well_formed p0
p: Pattern
x: evar
Hx: x ∉ free_evars (p0 $ AC.[□↦p])
Hwf: well_formed (ex , p) = true
IH2: Γ ⊢i p0 $ exists_quantify x AC.[□↦p^{evar:0↦x}] ---> p0 $ AC.[□↦ex , p] using (ExGen := {[x]}, SVSubst := ∅, KT := false, FP := {[p0 ↾ Prf]} ∪ frames_of_AC AC)
Hwfex: well_formed (ex , AC.[□↦p])
Hxfr1: evar_is_fresh_in x AC.[□↦p]
Hxfrp: evar_is_fresh_in x p
HxAC: x ∉ AC_free_evars AC
Hwf': well_formed (exists_quantify x AC.[□↦p^{evar:0↦x}])
Hwfeo: well_formed p^{evar:0↦x}
Hwf'p0: well_formed (exists_quantify x (p0 $ AC.[□↦p^{evar:0↦x}]))

x ∉ free_evars p0 ∪ free_evars AC.[□↦p^{evar:0↦x}] ∖ {[x]}
Σ: Signature
Γ: Theory
p0: Pattern
AC: Application_context
Prf: well_formed p0
p: Pattern
x: evar
Hx: x ∉ free_evars p0 ∪ free_evars AC.[□↦p]
Hwf: well_formed (ex , p) = true
IH2: Γ ⊢i p0 $ exists_quantify x AC.[□↦p^{evar:0↦x}] ---> p0 $ AC.[□↦ex , p] using (ExGen := {[x]}, SVSubst := ∅, KT := false, FP := {[p0 ↾ Prf]} ∪ frames_of_AC AC)
Hwfex: well_formed (ex , AC.[□↦p])
Hxfr1: evar_is_fresh_in x AC.[□↦p]
Hxfrp: evar_is_fresh_in x p
HxAC: x ∉ AC_free_evars AC
Hwf': well_formed (exists_quantify x AC.[□↦p^{evar:0↦x}])
Hwfeo: well_formed p^{evar:0↦x}
Hwf'p0: well_formed (exists_quantify x (p0 $ AC.[□↦p^{evar:0↦x}]))

x ∉ free_evars p0 ∪ free_evars AC.[□↦p^{evar:0↦x}] ∖ {[x]}
Σ: Signature
p0: Pattern
AC: Application_context
p: Pattern
x: evar
Hx: x ∉ free_evars p0 ∪ free_evars AC.[□↦p]

x ∉ free_evars p0 ∪ free_evars AC.[□↦p^{evar:0↦x}] ∖ {[x]}
set_solver.
Σ: Signature
Γ: Theory
p0: Pattern
AC: Application_context
Prf: well_formed p0
p: Pattern
x: evar
Hx: evar_is_fresh_in x (p0 $ AC.[□↦p])
Hwf: well_formed (ex , p) = true
IH2: Γ ⊢i p0 $ exists_quantify x AC.[□↦p^{evar:0↦x}] ---> p0 $ AC.[□↦ex , p] using (ExGen := {[x]}, SVSubst := ∅, KT := false, FP := {[p0 ↾ Prf]} ∪ frames_of_AC AC)
Hwfex: well_formed (ex , AC.[□↦p])
Hxfr1: evar_is_fresh_in x AC.[□↦p]
Hxfrp: evar_is_fresh_in x p
HxAC: x ∉ AC_free_evars AC
Hwf': well_formed (exists_quantify x AC.[□↦p^{evar:0↦x}])
Hwfeo: well_formed p^{evar:0↦x}
Hwf'p0: well_formed (exists_quantify x (p0 $ AC.[□↦p^{evar:0↦x}]))

Γ ⊢i p0 $ AC.[□↦p^{evar:0↦x}] ---> p0 $ exists_quantify x AC.[□↦p^{evar:0↦x}] using (ExGen := {[x]}, SVSubst := ∅, KT := false, FP := {[p0 ↾ Prf]} ∪ frames_of_AC AC)
Σ: Signature
Γ: Theory
p0: Pattern
AC: Application_context
Prf: well_formed p0
p: Pattern
x: evar
Hx: evar_is_fresh_in x (p0 $ AC.[□↦p])
Hwf: well_formed (ex , p) = true
IH2: Γ ⊢i p0 $ exists_quantify x AC.[□↦p^{evar:0↦x}] ---> p0 $ AC.[□↦ex , p] using (ExGen := {[x]}, SVSubst := ∅, KT := false, FP := {[p0 ↾ Prf]} ∪ frames_of_AC AC)
Hwfex: well_formed (ex , AC.[□↦p])
Hxfr1: evar_is_fresh_in x AC.[□↦p]
Hxfrp: evar_is_fresh_in x p
HxAC: x ∉ AC_free_evars AC
Hwf': well_formed (exists_quantify x AC.[□↦p^{evar:0↦x}])
Hwfeo: well_formed p^{evar:0↦x}
Hwf'p0: well_formed (exists_quantify x (p0 $ AC.[□↦p^{evar:0↦x}]))

Γ ⊢i AC.[□↦p^{evar:0↦x}] ---> exists_quantify x AC.[□↦p^{evar:0↦x}] using (ExGen := {[x]}, SVSubst := ∅, KT := false, FP := {[p0 ↾ Prf]} ∪ frames_of_AC AC)
Σ: Signature
Γ: Theory
p0: Pattern
AC: Application_context
Prf: well_formed p0
p: Pattern
x: evar
Hx: evar_is_fresh_in x (p0 $ AC.[□↦p])
Hwf: well_formed (ex , p) = true
IH2: Γ ⊢i p0 $ exists_quantify x AC.[□↦p^{evar:0↦x}] ---> p0 $ AC.[□↦ex , p] using (ExGen := {[x]}, SVSubst := ∅, KT := false, FP := {[p0 ↾ Prf]} ∪ frames_of_AC AC)
Hwfex: well_formed (ex , AC.[□↦p])
Hxfr1: evar_is_fresh_in x AC.[□↦p]
Hxfrp: evar_is_fresh_in x p
HxAC: x ∉ AC_free_evars AC
Hwf': well_formed (exists_quantify x AC.[□↦p^{evar:0↦x}])
Hwfeo: well_formed p^{evar:0↦x}
Hwf'p0: well_formed (exists_quantify x (p0 $ AC.[□↦p^{evar:0↦x}]))

Γ ⊢i AC.[□↦p^{evar:0↦x}] ---> exists_quantify x AC.[□↦p^{evar:0↦x}] using (ExGen := {[x]}, SVSubst := ∅, KT := false, FP := {[p0 ↾ Prf]} ∪ frames_of_AC AC)
Σ: Signature
Γ: Theory
p0: Pattern
AC: Application_context
Prf: well_formed p0
p: Pattern
x: evar
Hx: evar_is_fresh_in x (p0 $ AC.[□↦p])
Hwf: well_formed (ex , p) = true
IH2: Γ ⊢i p0 $ exists_quantify x AC.[□↦p^{evar:0↦x}] ---> p0 $ AC.[□↦ex , p] using (ExGen := {[x]}, SVSubst := ∅, KT := false, FP := {[p0 ↾ Prf]} ∪ frames_of_AC AC)
Hwfex: well_formed (ex , AC.[□↦p])
Hxfr1: evar_is_fresh_in x AC.[□↦p]
Hxfrp: evar_is_fresh_in x p
HxAC: x ∉ AC_free_evars AC
Hwf': well_formed (exists_quantify x AC.[□↦p^{evar:0↦x}])
Hwfeo: well_formed p^{evar:0↦x}
Hwf'p0: well_formed (exists_quantify x (p0 $ AC.[□↦p^{evar:0↦x}]))
ProofInfoLe (ExGen := ∅, SVSubst := ∅, KT := false, FP := {[p0 ↾ Prf]}) (ExGen := {[x]}, SVSubst := ∅, KT := false, FP := {[p0 ↾ Prf]} ∪ frames_of_AC AC)
Σ: Signature
Γ: Theory
p0: Pattern
AC: Application_context
Prf: well_formed p0
p: Pattern
x: evar
Hx: evar_is_fresh_in x (p0 $ AC.[□↦p])
Hwf: well_formed (ex , p) = true
IH2: Γ ⊢i p0 $ exists_quantify x AC.[□↦p^{evar:0↦x}] ---> p0 $ AC.[□↦ex , p] using (ExGen := {[x]}, SVSubst := ∅, KT := false, FP := {[p0 ↾ Prf]} ∪ frames_of_AC AC)
Hwfex: well_formed (ex , AC.[□↦p])
Hxfr1: evar_is_fresh_in x AC.[□↦p]
Hxfrp: evar_is_fresh_in x p
HxAC: x ∉ AC_free_evars AC
Hwf': well_formed (exists_quantify x AC.[□↦p^{evar:0↦x}])
Hwfeo: well_formed p^{evar:0↦x}
Hwf'p0: well_formed (exists_quantify x (p0 $ AC.[□↦p^{evar:0↦x}]))

ProofInfoLe (ExGen := ∅, SVSubst := ∅, KT := false, FP := {[p0 ↾ Prf]}) (ExGen := {[x]}, SVSubst := ∅, KT := false, FP := {[p0 ↾ Prf]} ∪ frames_of_AC AC)
try_solve_pile.
Σ: Signature
Γ: Theory
p0: Pattern
AC: Application_context
Prf: well_formed p0
p: Pattern
x: evar
Hx: evar_is_fresh_in x (p0 $ AC.[□↦p])
Hwf: well_formed (ex , p) = true
IH2: Γ ⊢i p0 $ exists_quantify x AC.[□↦p^{evar:0↦x}] ---> p0 $ AC.[□↦ex , p] using (ExGen := {[x]}, SVSubst := ∅, KT := false, FP := {[p0 ↾ Prf]} ∪ frames_of_AC AC)
Hwfex: well_formed (ex , AC.[□↦p])
Hxfr1: evar_is_fresh_in x AC.[□↦p]
Hxfrp: evar_is_fresh_in x p
HxAC: x ∉ AC_free_evars AC
Hwf': well_formed (exists_quantify x AC.[□↦p^{evar:0↦x}])
Hwfeo: well_formed p^{evar:0↦x}
Hwf'p0: well_formed (exists_quantify x (p0 $ AC.[□↦p^{evar:0↦x}]))

Γ ⊢i AC.[□↦p^{evar:0↦x}] ---> exists_quantify x AC.[□↦p^{evar:0↦x}] using (ExGen := {[x]}, SVSubst := ∅, KT := false, FP := {[p0 ↾ Prf]} ∪ frames_of_AC AC)
Σ: Signature
Γ: Theory
p0: Pattern
AC: Application_context
Prf: well_formed p0
p: Pattern
x: evar
Hx: evar_is_fresh_in x (p0 $ AC.[□↦p])
Hwf: well_formed (ex , p) = true
IH2: Γ ⊢i p0 $ exists_quantify x AC.[□↦p^{evar:0↦x}] ---> p0 $ AC.[□↦ex , p] using (ExGen := {[x]}, SVSubst := ∅, KT := false, FP := {[p0 ↾ Prf]} ∪ frames_of_AC AC)
Hwfex: well_formed (ex , AC.[□↦p])
Hxfr1: evar_is_fresh_in x AC.[□↦p]
Hxfrp: evar_is_fresh_in x p
HxAC: x ∉ AC_free_evars AC
Hwf': well_formed (exists_quantify x AC.[□↦p^{evar:0↦x}])
Hwfeo: well_formed p^{evar:0↦x}
Hwf'p0: well_formed (exists_quantify x (p0 $ AC.[□↦p^{evar:0↦x}]))

Γ ⊢i AC.[□↦p^{evar:0↦x}] ---> exists_quantify x AC.[□↦p^{evar:0↦x}] using (ExGen := {[x]}, SVSubst := ∅, KT := false, FP := {[p0 ↾ Prf]} ∪ frames_of_AC AC)
Σ: Signature
Γ: Theory
p0: Pattern
AC: Application_context
Prf: well_formed p0
p: Pattern
x: evar
Hx: evar_is_fresh_in x (p0 $ AC.[□↦p])
Hwf: well_formed (ex , p) = true
IH2: Γ ⊢i p0 $ exists_quantify x AC.[□↦p^{evar:0↦x}] ---> p0 $ AC.[□↦ex , p] using (ExGen := {[x]}, SVSubst := ∅, KT := false, FP := {[p0 ↾ Prf]} ∪ frames_of_AC AC)
Hwfex: well_formed (ex , AC.[□↦p])
Hxfr1: evar_is_fresh_in x AC.[□↦p]
Hxfrp: evar_is_fresh_in x p
HxAC: x ∉ AC_free_evars AC
Hwf': well_formed (exists_quantify x AC.[□↦p^{evar:0↦x}])
Hwfeo: well_formed p^{evar:0↦x}
Hwf'p0: well_formed (exists_quantify x (p0 $ AC.[□↦p^{evar:0↦x}]))

Γ ⊢i AC.[□↦p^[evar:0↦patt_free_evar x]] ---> exists_quantify x AC.[□↦p^[evar:0↦patt_free_evar x]] using (ExGen := {[x]}, SVSubst := ∅, KT := false, FP := {[p0 ↾ Prf]} ∪ frames_of_AC AC)
Σ: Signature
Γ: Theory
p0: Pattern
AC: Application_context
Prf: well_formed p0
p: Pattern
x: evar
Hx: evar_is_fresh_in x (p0 $ AC.[□↦p])
Hwf: well_formed (ex , p) = true
IH2: Γ ⊢i p0 $ exists_quantify x AC.[□↦p^{evar:0↦x}] ---> p0 $ AC.[□↦ex , p] using (ExGen := {[x]}, SVSubst := ∅, KT := false, FP := {[p0 ↾ Prf]} ∪ frames_of_AC AC)
Hwfex: well_formed (ex , AC.[□↦p])
Hxfr1: evar_is_fresh_in x AC.[□↦p]
Hxfrp: evar_is_fresh_in x p
HxAC: x ∉ AC_free_evars AC
Hwf': well_formed (exists_quantify x AC.[□↦p^{evar:0↦x}])
Hwfeo: well_formed p^{evar:0↦x}
Hwf'p0: well_formed (exists_quantify x (p0 $ AC.[□↦p^{evar:0↦x}]))

Γ ⊢i AC.[□↦p]^[evar:0↦patt_free_evar x] ---> exists_quantify x AC.[□↦p]^[evar:0↦patt_free_evar x] using (ExGen := {[x]}, SVSubst := ∅, KT := false, FP := {[p0 ↾ Prf]} ∪ frames_of_AC AC)
Σ: Signature
Γ: Theory
p0: Pattern
AC: Application_context
Prf: well_formed p0
p: Pattern
x: evar
Hx: evar_is_fresh_in x (p0 $ AC.[□↦p])
Hwf: well_formed (ex , p) = true
IH2: Γ ⊢i p0 $ exists_quantify x AC.[□↦p^{evar:0↦x}] ---> p0 $ AC.[□↦ex , p] using (ExGen := {[x]}, SVSubst := ∅, KT := false, FP := {[p0 ↾ Prf]} ∪ frames_of_AC AC)
Hwfex: well_formed (ex , AC.[□↦p])
Hxfr1: evar_is_fresh_in x AC.[□↦p]
Hxfrp: evar_is_fresh_in x p
HxAC: x ∉ AC_free_evars AC
Hwf': well_formed (exists_quantify x AC.[□↦p^{evar:0↦x}])
Hwfeo: well_formed p^{evar:0↦x}
Hwf'p0: well_formed (exists_quantify x (p0 $ AC.[□↦p^{evar:0↦x}]))

Γ ⊢i AC.[□↦p]^[evar:0↦patt_free_evar x] ---> (ex , AC.[□↦p]^[evar:0↦patt_free_evar x]^{{evar:x↦0}}) using (ExGen := {[x]}, SVSubst := ∅, KT := false, FP := {[p0 ↾ Prf]} ∪ frames_of_AC AC)
Σ: Signature
Γ: Theory
p0: Pattern
AC: Application_context
Prf: well_formed p0
p: Pattern
x: evar
Hx: evar_is_fresh_in x (p0 $ AC.[□↦p])
Hwf: well_formed (ex , p) = true
IH2: Γ ⊢i p0 $ exists_quantify x AC.[□↦p^{evar:0↦x}] ---> p0 $ AC.[□↦ex , p] using (ExGen := {[x]}, SVSubst := ∅, KT := false, FP := {[p0 ↾ Prf]} ∪ frames_of_AC AC)
Hwfex: well_formed (ex , AC.[□↦p])
Hxfr1: evar_is_fresh_in x AC.[□↦p]
Hxfrp: evar_is_fresh_in x p
HxAC: x ∉ AC_free_evars AC
Hwf': well_formed (exists_quantify x AC.[□↦p^{evar:0↦x}])
Hwfeo: well_formed p^{evar:0↦x}
Hwf'p0: well_formed (exists_quantify x (p0 $ AC.[□↦p^{evar:0↦x}]))

Γ ⊢i AC.[□↦p]^[evar:0↦patt_free_evar x] ---> (ex , AC.[□↦p]^[evar:0↦patt_free_evar x]^{{evar:x↦0}}) using (ExGen := {[x]}, SVSubst := ∅, KT := false, FP := {[p0 ↾ Prf]} ∪ frames_of_AC AC)
Σ: Signature
Γ: Theory
p0: Pattern
AC: Application_context
Prf: well_formed p0
p: Pattern
x: evar
Hx: evar_is_fresh_in x (p0 $ AC.[□↦p])
Hwf: well_formed (ex , p) = true
IH2: Γ ⊢i p0 $ exists_quantify x AC.[□↦p^{evar:0↦x}] ---> p0 $ AC.[□↦ex , p] using (ExGen := {[x]}, SVSubst := ∅, KT := false, FP := {[p0 ↾ Prf]} ∪ frames_of_AC AC)
Hwfex: well_formed (ex , AC.[□↦p])
Hxfr1: evar_is_fresh_in x AC.[□↦p]
Hxfrp: evar_is_fresh_in x p
HxAC: x ∉ AC_free_evars AC
Hwf': well_formed (exists_quantify x AC.[□↦p^{evar:0↦x}])
Hwfeo: well_formed p^{evar:0↦x}
Hwf'p0: well_formed (exists_quantify x (p0 $ AC.[□↦p^{evar:0↦x}]))

Γ ⊢i AC.[□↦p]^{evar:0↦x} ---> (ex , AC.[□↦p]^{evar:0↦x}^{{evar:x↦0}}) using (ExGen := {[x]}, SVSubst := ∅, KT := false, FP := {[p0 ↾ Prf]} ∪ frames_of_AC AC)
Σ: Signature
Γ: Theory
p0: Pattern
AC: Application_context
Prf: well_formed p0
p: Pattern
x: evar
Hx: evar_is_fresh_in x (p0 $ AC.[□↦p])
Hwf: well_formed (ex , p) = true
IH2: Γ ⊢i p0 $ exists_quantify x AC.[□↦p^{evar:0↦x}] ---> p0 $ AC.[□↦ex , p] using (ExGen := {[x]}, SVSubst := ∅, KT := false, FP := {[p0 ↾ Prf]} ∪ frames_of_AC AC)
Hwfex: well_formed (ex , AC.[□↦p])
Hxfr1: evar_is_fresh_in x AC.[□↦p]
Hxfrp: evar_is_fresh_in x p
HxAC: x ∉ AC_free_evars AC
Hwf': well_formed (exists_quantify x AC.[□↦p^{evar:0↦x}])
Hwfeo: well_formed p^{evar:0↦x}
Hwf'p0: well_formed (exists_quantify x (p0 $ AC.[□↦p^{evar:0↦x}]))

Γ ⊢i AC.[□↦p]^{evar:0↦x} ---> (ex , AC.[□↦p]) using (ExGen := {[x]}, SVSubst := ∅, KT := false, FP := {[p0 ↾ Prf]} ∪ frames_of_AC AC)
Σ: Signature
Γ: Theory
p0: Pattern
AC: Application_context
Prf: well_formed p0
p: Pattern
x: evar
Hx: evar_is_fresh_in x (p0 $ AC.[□↦p])
Hwf: well_formed (ex , p) = true
IH2: Γ ⊢i p0 $ exists_quantify x AC.[□↦p^{evar:0↦x}] ---> p0 $ AC.[□↦ex , p] using (ExGen := {[x]}, SVSubst := ∅, KT := false, FP := {[p0 ↾ Prf]} ∪ frames_of_AC AC)
Hwfex: well_formed (ex , AC.[□↦p])
Hxfr1: evar_is_fresh_in x AC.[□↦p]
Hxfrp: evar_is_fresh_in x p
HxAC: x ∉ AC_free_evars AC
Hwf': well_formed (exists_quantify x AC.[□↦p^{evar:0↦x}])
Hwfeo: well_formed p^{evar:0↦x}
Hwf'p0: well_formed (exists_quantify x (p0 $ AC.[□↦p^{evar:0↦x}]))
well_formed_closed_ex_aux AC.[□↦p] 1
Σ: Signature
Γ: Theory
p0: Pattern
AC: Application_context
Prf: well_formed p0
p: Pattern
x: evar
Hx: evar_is_fresh_in x (p0 $ AC.[□↦p])
Hwf: well_formed (ex , p) = true
IH2: Γ ⊢i p0 $ exists_quantify x AC.[□↦p^{evar:0↦x}] ---> p0 $ AC.[□↦ex , p] using (ExGen := {[x]}, SVSubst := ∅, KT := false, FP := {[p0 ↾ Prf]} ∪ frames_of_AC AC)
Hwfex: well_formed (ex , AC.[□↦p])
Hxfr1: evar_is_fresh_in x AC.[□↦p]
Hxfrp: evar_is_fresh_in x p
HxAC: x ∉ AC_free_evars AC
Hwf': well_formed (exists_quantify x AC.[□↦p^{evar:0↦x}])
Hwfeo: well_formed p^{evar:0↦x}
Hwf'p0: well_formed (exists_quantify x (p0 $ AC.[□↦p^{evar:0↦x}]))

Γ ⊢i AC.[□↦p]^{evar:0↦x} ---> (ex , AC.[□↦p]) using (ExGen := {[x]}, SVSubst := ∅, KT := false, FP := {[p0 ↾ Prf]} ∪ frames_of_AC AC)
Σ: Signature
Γ: Theory
p0: Pattern
AC: Application_context
Prf: well_formed p0
p: Pattern
x: evar
Hx: evar_is_fresh_in x (p0 $ AC.[□↦p])
Hwf: well_formed (ex , p) = true
IH2: Γ ⊢i p0 $ exists_quantify x AC.[□↦p^{evar:0↦x}] ---> p0 $ AC.[□↦ex , p] using (ExGen := {[x]}, SVSubst := ∅, KT := false, FP := {[p0 ↾ Prf]} ∪ frames_of_AC AC)
Hwfex: well_formed (ex , AC.[□↦p])
Hxfr1: evar_is_fresh_in x AC.[□↦p]
Hxfrp: evar_is_fresh_in x p
HxAC: x ∉ AC_free_evars AC
Hwf': well_formed (exists_quantify x AC.[□↦p^{evar:0↦x}])
Hwfeo: well_formed p^{evar:0↦x}
Hwf'p0: well_formed (exists_quantify x (p0 $ AC.[□↦p^{evar:0↦x}]))

Γ ⊢i AC.[□↦p]^{evar:0↦x} ---> (ex , AC.[□↦p]) using BasicReasoning
apply Ex_quan; auto. } Defined.
Σ: Signature
Γ: Theory
x: evar
n: db_index
ϕ, p, q: Pattern
E: evar
i: ProofInfo

x ≠ E → well_formed p = true → well_formed q = true → Γ ⊢i ϕ^{evar:n↦x}^[[evar:E↦p]] <---> ϕ^{evar:n↦x}^[[evar:E↦q]] using i → Γ ⊢i ϕ^[[evar:E↦p]]^{evar:n↦x} <---> ϕ^[[evar:E↦q]]^{evar:n↦x} using i
Σ: Signature
Γ: Theory
x: evar
n: db_index
ϕ, p, q: Pattern
E: evar
i: ProofInfo

x ≠ E → well_formed p = true → well_formed q = true → Γ ⊢i ϕ^{evar:n↦x}^[[evar:E↦p]] <---> ϕ^{evar:n↦x}^[[evar:E↦q]] using i → Γ ⊢i ϕ^[[evar:E↦p]]^{evar:n↦x} <---> ϕ^[[evar:E↦q]]^{evar:n↦x} using i
Σ: Signature
Γ: Theory
x: evar
n: db_index
ϕ, p, q: Pattern
E: evar
i: ProofInfo
Hx: x ≠ E
wfp: well_formed p = true
wfq: well_formed q = true
H: Γ ⊢i ϕ^{evar:n↦x}^[[evar:E↦p]] <---> ϕ^{evar:n↦x}^[[evar:E↦q]] using i

Γ ⊢i ϕ^[[evar:E↦p]]^{evar:n↦x} <---> ϕ^[[evar:E↦q]]^{evar:n↦x} using i
Σ: Signature
Γ: Theory
x: evar
n: db_index
ϕ, p, q: Pattern
E: evar
i: ProofInfo
Hx: x ≠ E
wfp: well_formed p = true
wfq: well_formed q = true
H: Γ ⊢i ϕ^{evar:n↦x}^[[evar:E↦p]] <---> ϕ^{evar:n↦x}^[[evar:E↦q]] using i

(ϕ^[[evar:E↦p]]^{evar:n↦x} <---> ϕ^[[evar:E↦q]]^{evar:n↦x}) = (ϕ^{evar:n↦x}^[[evar:E↦p]] <---> ϕ^{evar:n↦x}^[[evar:E↦q]])
Σ: Signature
Γ: Theory
x: evar
n: db_index
ϕ, p, q: Pattern
E: evar
i: ProofInfo
Hx: x ≠ E
wfp: well_formed p = true
wfq: well_formed q = true
H: Γ ⊢i ϕ^{evar:n↦x}^[[evar:E↦p]] <---> ϕ^{evar:n↦x}^[[evar:E↦q]] using i

(ϕ^{evar:n↦x}^[[evar:E↦p]] <---> ϕ^[[evar:E↦q]]^{evar:n↦x}) = (ϕ^{evar:n↦x}^[[evar:E↦p]] <---> ϕ^{evar:n↦x}^[[evar:E↦q]])
Σ: Signature
Γ: Theory
x: evar
n: db_index
ϕ, p, q: Pattern
E: evar
i: ProofInfo
Hx: x ≠ E
wfp: well_formed p = true
wfq: well_formed q = true
H: Γ ⊢i ϕ^{evar:n↦x}^[[evar:E↦p]] <---> ϕ^{evar:n↦x}^[[evar:E↦q]] using i

(ϕ^{evar:n↦x}^[[evar:E↦p]] <---> ϕ^{evar:n↦x}^[[evar:E↦q]]) = (ϕ^{evar:n↦x}^[[evar:E↦p]] <---> ϕ^{evar:n↦x}^[[evar:E↦q]])
reflexivity. Defined.
Σ: Signature
Γ: Theory
ϕ, p, q: Pattern
E: evar
X: svar
i: ProofInfo

well_formed_closed_mu_aux p 0 = true → well_formed_closed_mu_aux q 0 = true → Γ ⊢i ϕ^{svar:0↦X}^[[evar:E↦p]] <---> ϕ^{svar:0↦X}^[[evar:E↦q]] using i → Γ ⊢i ϕ^[[evar:E↦p]]^[svar:0↦patt_free_svar X] <---> ϕ^[[evar:E↦q]]^[svar:0↦patt_free_svar X] using i
Σ: Signature
Γ: Theory
ϕ, p, q: Pattern
E: evar
X: svar
i: ProofInfo

well_formed_closed_mu_aux p 0 = true → well_formed_closed_mu_aux q 0 = true → Γ ⊢i ϕ^{svar:0↦X}^[[evar:E↦p]] <---> ϕ^{svar:0↦X}^[[evar:E↦q]] using i → Γ ⊢i ϕ^[[evar:E↦p]]^[svar:0↦patt_free_svar X] <---> ϕ^[[evar:E↦q]]^[svar:0↦patt_free_svar X] using i
Σ: Signature
Γ: Theory
ϕ, p, q: Pattern
E: evar
X: svar
i: ProofInfo
wfp: well_formed_closed_mu_aux p 0 = true
wfq: well_formed_closed_mu_aux q 0 = true
H: Γ ⊢i ϕ^{svar:0↦X}^[[evar:E↦p]] <---> ϕ^{svar:0↦X}^[[evar:E↦q]] using i

Γ ⊢i ϕ^[[evar:E↦p]]^[svar:0↦patt_free_svar X] <---> ϕ^[[evar:E↦q]]^[svar:0↦patt_free_svar X] using i
Σ: Signature
Γ: Theory
ϕ, p, q: Pattern
E: evar
X: svar
i: ProofInfo
wfp: well_formed_closed_mu_aux p 0 = true
wfq: well_formed_closed_mu_aux q 0 = true
H: Γ ⊢i ϕ^{svar:0↦X}^[[evar:E↦p]] <---> ϕ^{svar:0↦X}^[[evar:E↦q]] using i

(ϕ^[[evar:E↦p]]^[svar:0↦patt_free_svar X] <---> ϕ^[[evar:E↦q]]^[svar:0↦patt_free_svar X]) = (ϕ^{svar:0↦X}^[[evar:E↦p]] <---> ϕ^{svar:0↦X}^[[evar:E↦q]])
abstract ( unfold svar_open in H; rewrite <- free_evar_subst_bsvar_subst; [idtac|wf_auto2| unfold evar_is_fresh_in; simpl; clear; set_solver]; rewrite <- free_evar_subst_bsvar_subst; [idtac|wf_auto2|unfold evar_is_fresh_in; simpl; clear; set_solver]; reflexivity ). Defined.
Σ: Signature
Γ: Theory
ϕ, p, q: Pattern
E: evar
X: svar
i: ProofInfo

well_formed_closed_mu_aux ϕ^[[evar:E↦p]] 1 → well_formed_closed_mu_aux ϕ^[[evar:E↦q]] 1 → X ∉ free_svars ϕ^[[evar:E↦p]] → X ∉ free_svars ϕ^[[evar:E↦q]] → Γ ⊢i (mu , ϕ^[[evar:E↦p]]^{svar:0↦X}^{{svar:X↦0}}) <---> (mu , ϕ^[[evar:E↦q]]^{svar:0↦X}^{{svar:X↦0}}) using i → Γ ⊢i (mu , ϕ^[[evar:E↦p]]) <---> (mu , ϕ^[[evar:E↦q]]) using i
Σ: Signature
Γ: Theory
ϕ, p, q: Pattern
E: evar
X: svar
i: ProofInfo

well_formed_closed_mu_aux ϕ^[[evar:E↦p]] 1 → well_formed_closed_mu_aux ϕ^[[evar:E↦q]] 1 → X ∉ free_svars ϕ^[[evar:E↦p]] → X ∉ free_svars ϕ^[[evar:E↦q]] → Γ ⊢i (mu , ϕ^[[evar:E↦p]]^{svar:0↦X}^{{svar:X↦0}}) <---> (mu , ϕ^[[evar:E↦q]]^{svar:0↦X}^{{svar:X↦0}}) using i → Γ ⊢i (mu , ϕ^[[evar:E↦p]]) <---> (mu , ϕ^[[evar:E↦q]]) using i
Σ: Signature
Γ: Theory
ϕ, p, q: Pattern
E: evar
X: svar
i: ProofInfo
wfp': well_formed_closed_mu_aux ϕ^[[evar:E↦p]] 1
wfq': well_formed_closed_mu_aux ϕ^[[evar:E↦q]] 1
Xfrp: X ∉ free_svars ϕ^[[evar:E↦p]]
Xfrq: X ∉ free_svars ϕ^[[evar:E↦q]]
H: Γ ⊢i (mu , ϕ^[[evar:E↦p]]^{svar:0↦X}^{{svar:X↦0}}) <---> (mu , ϕ^[[evar:E↦q]]^{svar:0↦X}^{{svar:X↦0}}) using i

Γ ⊢i (mu , ϕ^[[evar:E↦p]]) <---> (mu , ϕ^[[evar:E↦q]]) using i
Σ: Signature
Γ: Theory
ϕ, p, q: Pattern
E: evar
X: svar
i: ProofInfo
wfp': well_formed_closed_mu_aux ϕ^[[evar:E↦p]] 1
wfq': well_formed_closed_mu_aux ϕ^[[evar:E↦q]] 1
Xfrp: X ∉ free_svars ϕ^[[evar:E↦p]]
Xfrq: X ∉ free_svars ϕ^[[evar:E↦q]]
H: Γ ⊢i (mu , ϕ^[[evar:E↦p]]^{svar:0↦X}^{{svar:X↦0}}) <---> (mu , ϕ^[[evar:E↦q]]^{svar:0↦X}^{{svar:X↦0}}) using i

((mu , ϕ^[[evar:E↦p]]) <---> (mu , ϕ^[[evar:E↦q]])) = ((mu , ϕ^[[evar:E↦p]]^{svar:0↦X}^{{svar:X↦0}}) <---> (mu , ϕ^[[evar:E↦q]]^{svar:0↦X}^{{svar:X↦0}}))
abstract ( rewrite -{1}[ϕ^[[evar: E ↦ p]]](@svar_quantify_svar_open _ X 0); [assumption| auto | auto]; rewrite -{1}[ϕ^[[evar: E ↦ q]]](@svar_quantify_svar_open _ X 0); [assumption| auto | auto]; reflexivity ). Defined. Add Search Blacklist "_elim". Add Search Blacklist "_graph_rect". Add Search Blacklist "_graph_mut". Add Search Blacklist "FunctionalElimination_". Section FOL_helpers. Context {Σ : Signature}. Fixpoint maximal_exists_depth_of_evar_in_pattern' (depth : nat) (E : evar) (ψ : Pattern) : nat := match ψ with | patt_bott => 0 | patt_sym _ => 0 | patt_bound_evar _ => 0 | patt_bound_svar _ => 0 | patt_free_svar _ => 0 | patt_free_evar E' => match (decide (E' = E)) with | left _ => depth | right _ => 0 end | patt_imp ψ₁ ψ₂ => Nat.max (maximal_exists_depth_of_evar_in_pattern' depth E ψ₁) (maximal_exists_depth_of_evar_in_pattern' depth E ψ₂) | patt_app ψ₁ ψ₂ => Nat.max (maximal_exists_depth_of_evar_in_pattern' depth E ψ₁) (maximal_exists_depth_of_evar_in_pattern' depth E ψ₂) | patt_exists ψ' => maximal_exists_depth_of_evar_in_pattern' (S depth) E ψ' | patt_mu ψ' => maximal_exists_depth_of_evar_in_pattern' depth E ψ' end. Definition maximal_exists_depth_of_evar_in_pattern (E : evar) (ψ : Pattern) : nat := maximal_exists_depth_of_evar_in_pattern' 0 E ψ. Definition pf_ite {P : Prop} (i : ProofInfo) (dec: {P} + {~P}) (Γ : Theory) (ϕ : Pattern) (pf1: P -> Γ ⊢i ϕ using i) (pf2: (~P) -> Γ ⊢i ϕ using i) : Γ ⊢i ϕ using i := match dec with | left pf => pf1 pf | right pf => pf2 pf end.
Σ: Signature
EvS: EVarSet
n1, n2: nat

list_to_set (evar_fresh_seq EvS n1) ⊆ list_to_set (evar_fresh_seq EvS (n1 `max` n2))
Σ: Signature
EvS: EVarSet
n1, n2: nat

list_to_set (evar_fresh_seq EvS n1) ⊆ list_to_set (evar_fresh_seq EvS (n1 `max` n2))
Σ: Signature
n1: nat

(EvS : EVarSet) (n2 : nat), list_to_set (evar_fresh_seq EvS n1) ⊆ list_to_set (evar_fresh_seq EvS (n1 `max` n2))
Σ: Signature
EvS: EVarSet
n2: nat

list_to_set (evar_fresh_seq EvS 0) ⊆ list_to_set (evar_fresh_seq EvS (0 `max` n2))
Σ: Signature
n1: nat
IHn1: (EvS : EVarSet) (n2 : nat), list_to_set (evar_fresh_seq EvS n1) ⊆ list_to_set (evar_fresh_seq EvS (n1 `max` n2))
EvS: EVarSet
n2: nat
list_to_set (evar_fresh_seq EvS (S n1)) ⊆ list_to_set (evar_fresh_seq EvS (S n1 `max` n2))
Σ: Signature
EvS: EVarSet
n2: nat

list_to_set (evar_fresh_seq EvS 0) ⊆ list_to_set (evar_fresh_seq EvS (0 `max` n2))
Σ: Signature
EvS: EVarSet
n2: nat

∅ ⊆ list_to_set (evar_fresh_seq EvS n2)
set_solver.
Σ: Signature
n1: nat
IHn1: (EvS : EVarSet) (n2 : nat), list_to_set (evar_fresh_seq EvS n1) ⊆ list_to_set (evar_fresh_seq EvS (n1 `max` n2))
EvS: EVarSet
n2: nat

list_to_set (evar_fresh_seq EvS (S n1)) ⊆ list_to_set (evar_fresh_seq EvS (S n1 `max` n2))
Σ: Signature
n1: nat
IHn1: (EvS : EVarSet) (n2 : nat), list_to_set (evar_fresh_seq EvS n1) ⊆ list_to_set (evar_fresh_seq EvS (n1 `max` n2))
EvS: EVarSet
n2: nat

list_to_set (evar_fresh_seq EvS (S n1)) ⊆ list_to_set (evar_fresh_seq EvS (S n1 `max` n2))
Σ: Signature
n1: nat
IHn1: (EvS : EVarSet) (n2 : nat), list_to_set (evar_fresh_seq EvS n1) ⊆ list_to_set (evar_fresh_seq EvS (n1 `max` n2))
EvS: EVarSet
n2: nat

{[evar_fresh_s EvS]} ∪ list_to_set (evar_fresh_seq ({[evar_fresh_s EvS]} ∪ EvS) n1) ⊆ list_to_set (evar_fresh_seq EvS (S n1 `max` n2))
Σ: Signature
n1: nat
IHn1: (EvS : EVarSet) (n2 : nat), list_to_set (evar_fresh_seq EvS n1) ⊆ list_to_set (evar_fresh_seq EvS (n1 `max` n2))
EvS: EVarSet

{[evar_fresh_s EvS]} ∪ list_to_set (evar_fresh_seq ({[evar_fresh_s EvS]} ∪ EvS) n1) ⊆ list_to_set (evar_fresh_seq EvS (S n1 `max` 0))
Σ: Signature
n1: nat
IHn1: (EvS : EVarSet) (n2 : nat), list_to_set (evar_fresh_seq EvS n1) ⊆ list_to_set (evar_fresh_seq EvS (n1 `max` n2))
EvS: EVarSet
n2: nat
{[evar_fresh_s EvS]} ∪ list_to_set (evar_fresh_seq ({[evar_fresh_s EvS]} ∪ EvS) n1) ⊆ list_to_set (evar_fresh_seq EvS (S n1 `max` S n2))
Σ: Signature
n1: nat
IHn1: (EvS : EVarSet) (n2 : nat), list_to_set (evar_fresh_seq EvS n1) ⊆ list_to_set (evar_fresh_seq EvS (n1 `max` n2))
EvS: EVarSet

{[evar_fresh_s EvS]} ∪ list_to_set (evar_fresh_seq ({[evar_fresh_s EvS]} ∪ EvS) n1) ⊆ list_to_set (evar_fresh_seq EvS (S n1 `max` 0))
Σ: Signature
n1: nat
IHn1: (EvS : EVarSet) (n2 : nat), list_to_set (evar_fresh_seq EvS n1) ⊆ list_to_set (evar_fresh_seq EvS (n1 `max` n2))
EvS: EVarSet

{[evar_fresh_s EvS]} ∪ list_to_set (evar_fresh_seq ({[evar_fresh_s EvS]} ∪ EvS) n1) ⊆ {[evar_fresh_s EvS]} ∪ list_to_set (evar_fresh_seq ({[evar_fresh_s EvS]} ∪ EvS) n1)
set_solver.
Σ: Signature
n1: nat
IHn1: (EvS : EVarSet) (n2 : nat), list_to_set (evar_fresh_seq EvS n1) ⊆ list_to_set (evar_fresh_seq EvS (n1 `max` n2))
EvS: EVarSet
n2: nat

{[evar_fresh_s EvS]} ∪ list_to_set (evar_fresh_seq ({[evar_fresh_s EvS]} ∪ EvS) n1) ⊆ list_to_set (evar_fresh_seq EvS (S n1 `max` S n2))
Σ: Signature
n1: nat
IHn1: (EvS : EVarSet) (n2 : nat), list_to_set (evar_fresh_seq EvS n1) ⊆ list_to_set (evar_fresh_seq EvS (n1 `max` n2))
EvS: EVarSet
n2: nat

{[evar_fresh_s EvS]} ∪ list_to_set (evar_fresh_seq ({[evar_fresh_s EvS]} ∪ EvS) n1) ⊆ list_to_set (evar_fresh_seq EvS (S n1 `max` S n2))
Σ: Signature
n1: nat
IHn1: (EvS : EVarSet) (n2 : nat), list_to_set (evar_fresh_seq EvS n1) ⊆ list_to_set (evar_fresh_seq EvS (n1 `max` n2))
EvS: EVarSet
n2: nat

{[evar_fresh_s EvS]} ∪ list_to_set (evar_fresh_seq ({[evar_fresh_s EvS]} ∪ EvS) n1) ⊆ {[evar_fresh_s EvS]} ∪ list_to_set (evar_fresh_seq ({[evar_fresh_s EvS]} ∪ EvS) (n1 `max` n2))
Σ: Signature
n1: nat
IHn1: (EvS : EVarSet) (n2 : nat), list_to_set (evar_fresh_seq EvS n1) ⊆ list_to_set (evar_fresh_seq EvS (n1 `max` n2))
EvS: EVarSet
n2: nat

list_to_set (evar_fresh_seq ({[evar_fresh_s EvS]} ∪ EvS) n1) ⊆ list_to_set (evar_fresh_seq ({[evar_fresh_s EvS]} ∪ EvS) (n1 `max` n2)) → {[evar_fresh_s EvS]} ∪ list_to_set (evar_fresh_seq ({[evar_fresh_s EvS]} ∪ EvS) n1) ⊆ {[evar_fresh_s EvS]} ∪ list_to_set (evar_fresh_seq ({[evar_fresh_s EvS]} ∪ EvS) (n1 `max` n2))
Σ: Signature
n1: nat
IHn1: (EvS : EVarSet) (n2 : nat), list_to_set (evar_fresh_seq EvS n1) ⊆ list_to_set (evar_fresh_seq EvS (n1 `max` n2))
EvS: EVarSet
n2: nat
list_to_set (evar_fresh_seq ({[evar_fresh_s EvS]} ∪ EvS) n1) ⊆ list_to_set (evar_fresh_seq ({[evar_fresh_s EvS]} ∪ EvS) (n1 `max` n2))
Σ: Signature
n1: nat
IHn1: (EvS : EVarSet) (n2 : nat), list_to_set (evar_fresh_seq EvS n1) ⊆ list_to_set (evar_fresh_seq EvS (n1 `max` n2))
EvS: EVarSet
n2: nat

list_to_set (evar_fresh_seq ({[evar_fresh_s EvS]} ∪ EvS) n1) ⊆ list_to_set (evar_fresh_seq ({[evar_fresh_s EvS]} ∪ EvS) (n1 `max` n2)) → {[evar_fresh_s EvS]} ∪ list_to_set (evar_fresh_seq ({[evar_fresh_s EvS]} ∪ EvS) n1) ⊆ {[evar_fresh_s EvS]} ∪ list_to_set (evar_fresh_seq ({[evar_fresh_s EvS]} ∪ EvS) (n1 `max` n2))
set_solver.
Σ: Signature
n1: nat
IHn1: (EvS : EVarSet) (n2 : nat), list_to_set (evar_fresh_seq EvS n1) ⊆ list_to_set (evar_fresh_seq EvS (n1 `max` n2))
EvS: EVarSet
n2: nat

list_to_set (evar_fresh_seq ({[evar_fresh_s EvS]} ∪ EvS) n1) ⊆ list_to_set (evar_fresh_seq ({[evar_fresh_s EvS]} ∪ EvS) (n1 `max` n2))
Σ: Signature
n1: nat
EvS: EVarSet
n2: nat
IHn1: list_to_set (evar_fresh_seq ({[evar_fresh_s EvS]} ∪ EvS) n1) ⊆ list_to_set (evar_fresh_seq ({[evar_fresh_s EvS]} ∪ EvS) (n1 `max` n2))

list_to_set (evar_fresh_seq ({[evar_fresh_s EvS]} ∪ EvS) n1) ⊆ list_to_set (evar_fresh_seq ({[evar_fresh_s EvS]} ∪ EvS) (n1 `max` n2))
apply IHn1. } } Qed.
Σ: Signature
depth: nat
E: evar
n: db_index
x: evar
ψ: Pattern

E ≠ x → maximal_exists_depth_of_evar_in_pattern' depth E ψ^{evar:n↦x} = maximal_exists_depth_of_evar_in_pattern' depth E ψ
Σ: Signature
depth: nat
E: evar
n: db_index
x: evar
ψ: Pattern

E ≠ x → maximal_exists_depth_of_evar_in_pattern' depth E ψ^{evar:n↦x} = maximal_exists_depth_of_evar_in_pattern' depth E ψ
Σ: Signature
depth: nat
E: evar
n: db_index
x: evar
ψ: Pattern
HEnex: E ≠ x

maximal_exists_depth_of_evar_in_pattern' depth E ψ^{evar:n↦x} = maximal_exists_depth_of_evar_in_pattern' depth E ψ
Σ: Signature
depth: nat
E: evar
n: db_index
x: evar
ψ: Pattern
HEnex: E ≠ x

maximal_exists_depth_of_evar_in_pattern' depth E ψ^[evar:n↦patt_free_evar x] = maximal_exists_depth_of_evar_in_pattern' depth E ψ
Σ: Signature
E, x: evar
ψ: Pattern
HEnex: E ≠ x

(depth : nat) (n : db_index), maximal_exists_depth_of_evar_in_pattern' depth E ψ^[evar:n↦patt_free_evar x] = maximal_exists_depth_of_evar_in_pattern' depth E ψ
Σ: Signature
E, x: evar
n: db_index
HEnex: E ≠ x
depth: nat
n': db_index

maximal_exists_depth_of_evar_in_pattern' depth E match compare_nat n n' with | Nat_less _ _ _ => patt_bound_evar n | Nat_equal _ _ _ => patt_free_evar x | Nat_greater _ _ _ => patt_bound_evar (Nat.pred n) end = 0
Σ: Signature
E, x: evar
ψ1, ψ2: Pattern
HEnex: E ≠ x
IHψ1: (depth : nat) (n : db_index), maximal_exists_depth_of_evar_in_pattern' depth E ψ1^[evar:n↦patt_free_evar x] = maximal_exists_depth_of_evar_in_pattern' depth E ψ1
IHψ2: (depth : nat) (n : db_index), maximal_exists_depth_of_evar_in_pattern' depth E ψ2^[evar:n↦patt_free_evar x] = maximal_exists_depth_of_evar_in_pattern' depth E ψ2
depth: nat
n': db_index
maximal_exists_depth_of_evar_in_pattern' depth E ψ1^[evar:n'↦patt_free_evar x] `max` maximal_exists_depth_of_evar_in_pattern' depth E ψ2^[evar:n'↦patt_free_evar x] = maximal_exists_depth_of_evar_in_pattern' depth E ψ1 `max` maximal_exists_depth_of_evar_in_pattern' depth E ψ2
Σ: Signature
E, x: evar
ψ1, ψ2: Pattern
HEnex: E ≠ x
IHψ1: (depth : nat) (n : db_index), maximal_exists_depth_of_evar_in_pattern' depth E ψ1^[evar:n↦patt_free_evar x] = maximal_exists_depth_of_evar_in_pattern' depth E ψ1
IHψ2: (depth : nat) (n : db_index), maximal_exists_depth_of_evar_in_pattern' depth E ψ2^[evar:n↦patt_free_evar x] = maximal_exists_depth_of_evar_in_pattern' depth E ψ2
depth: nat
n': db_index
maximal_exists_depth_of_evar_in_pattern' depth E ψ1^[evar:n'↦patt_free_evar x] `max` maximal_exists_depth_of_evar_in_pattern' depth E ψ2^[evar:n'↦patt_free_evar x] = maximal_exists_depth_of_evar_in_pattern' depth E ψ1 `max` maximal_exists_depth_of_evar_in_pattern' depth E ψ2
Σ: Signature
E, x: evar
ψ: Pattern
HEnex: E ≠ x
IHψ: (depth : nat) (n : db_index), maximal_exists_depth_of_evar_in_pattern' depth E ψ^[evar:n↦patt_free_evar x] = maximal_exists_depth_of_evar_in_pattern' depth E ψ
depth: nat
n': db_index
maximal_exists_depth_of_evar_in_pattern' (S depth) E ψ^[evar:S n'↦ patt_free_evar x] = maximal_exists_depth_of_evar_in_pattern' (S depth) E ψ
Σ: Signature
E, x: evar
ψ: Pattern
HEnex: E ≠ x
IHψ: (depth : nat) (n : db_index), maximal_exists_depth_of_evar_in_pattern' depth E ψ^[evar:n↦patt_free_evar x] = maximal_exists_depth_of_evar_in_pattern' depth E ψ
depth: nat
n': db_index
maximal_exists_depth_of_evar_in_pattern' depth E ψ^[evar:n'↦patt_free_evar x] = maximal_exists_depth_of_evar_in_pattern' depth E ψ
Σ: Signature
E, x: evar
n: db_index
HEnex: E ≠ x
depth: nat
n': db_index

maximal_exists_depth_of_evar_in_pattern' depth E match compare_nat n n' with | Nat_less _ _ _ => patt_bound_evar n | Nat_equal _ _ _ => patt_free_evar x | Nat_greater _ _ _ => patt_bound_evar (Nat.pred n) end = 0
Σ: Signature
E, x: evar
n: db_index
HEnex: E ≠ x
depth: nat
n': db_index
e: n = n'
H: compare_nat n n' = Nat_equal n n' e

(if decide (x = E) then depth else 0) = 0
Σ: Signature
E, x: evar
n: db_index
HEnex: E ≠ x
depth: nat
n': db_index
e: n = n'
H: compare_nat n n' = Nat_equal n n' e
e0: x = E
H0: decide (x = E) = left e0

depth = 0
Σ: Signature
E: evar
HEnex: E ≠ E
depth: nat
n': db_index
H: compare_nat n' n' = Nat_equal n' n' erefl
H0: decide (E = E) = left erefl

depth = 0
contradiction.
Σ: Signature
E, x: evar
ψ1, ψ2: Pattern
HEnex: E ≠ x
IHψ1: (depth : nat) (n : db_index), maximal_exists_depth_of_evar_in_pattern' depth E ψ1^[evar:n↦patt_free_evar x] = maximal_exists_depth_of_evar_in_pattern' depth E ψ1
IHψ2: (depth : nat) (n : db_index), maximal_exists_depth_of_evar_in_pattern' depth E ψ2^[evar:n↦patt_free_evar x] = maximal_exists_depth_of_evar_in_pattern' depth E ψ2
depth: nat
n': db_index

maximal_exists_depth_of_evar_in_pattern' depth E ψ1^[evar:n'↦patt_free_evar x] `max` maximal_exists_depth_of_evar_in_pattern' depth E ψ2^[evar:n'↦patt_free_evar x] = maximal_exists_depth_of_evar_in_pattern' depth E ψ1 `max` maximal_exists_depth_of_evar_in_pattern' depth E ψ2
Σ: Signature
E, x: evar
ψ1, ψ2: Pattern
HEnex: E ≠ x
IHψ1: (depth : nat) (n : db_index), maximal_exists_depth_of_evar_in_pattern' depth E ψ1^[evar:n↦patt_free_evar x] = maximal_exists_depth_of_evar_in_pattern' depth E ψ1
IHψ2: (depth : nat) (n : db_index), maximal_exists_depth_of_evar_in_pattern' depth E ψ2^[evar:n↦patt_free_evar x] = maximal_exists_depth_of_evar_in_pattern' depth E ψ2
depth: nat
n': db_index
maximal_exists_depth_of_evar_in_pattern' depth E ψ1^[evar:n'↦patt_free_evar x] `max` maximal_exists_depth_of_evar_in_pattern' depth E ψ2^[evar:n'↦patt_free_evar x] = maximal_exists_depth_of_evar_in_pattern' depth E ψ1 `max` maximal_exists_depth_of_evar_in_pattern' depth E ψ2
Σ: Signature
E, x: evar
ψ: Pattern
HEnex: E ≠ x
IHψ: (depth : nat) (n : db_index), maximal_exists_depth_of_evar_in_pattern' depth E ψ^[evar:n↦patt_free_evar x] = maximal_exists_depth_of_evar_in_pattern' depth E ψ
depth: nat
n': db_index
maximal_exists_depth_of_evar_in_pattern' (S depth) E ψ^[evar:S n'↦ patt_free_evar x] = maximal_exists_depth_of_evar_in_pattern' (S depth) E ψ
Σ: Signature
E, x: evar
ψ: Pattern
HEnex: E ≠ x
IHψ: (depth : nat) (n : db_index), maximal_exists_depth_of_evar_in_pattern' depth E ψ^[evar:n↦patt_free_evar x] = maximal_exists_depth_of_evar_in_pattern' depth E ψ
depth: nat
n': db_index
maximal_exists_depth_of_evar_in_pattern' depth E ψ^[evar:n'↦patt_free_evar x] = maximal_exists_depth_of_evar_in_pattern' depth E ψ
Σ: Signature
E, x: evar
ψ1, ψ2: Pattern
HEnex: E ≠ x
IHψ1: (depth : nat) (n : db_index), maximal_exists_depth_of_evar_in_pattern' depth E ψ1^[evar:n↦patt_free_evar x] = maximal_exists_depth_of_evar_in_pattern' depth E ψ1
IHψ2: (depth : nat) (n : db_index), maximal_exists_depth_of_evar_in_pattern' depth E ψ2^[evar:n↦patt_free_evar x] = maximal_exists_depth_of_evar_in_pattern' depth E ψ2
depth: nat
n': db_index

maximal_exists_depth_of_evar_in_pattern' depth E ψ1^[evar:n'↦patt_free_evar x] `max` maximal_exists_depth_of_evar_in_pattern' depth E ψ2^[evar:n'↦patt_free_evar x] = maximal_exists_depth_of_evar_in_pattern' depth E ψ1 `max` maximal_exists_depth_of_evar_in_pattern' depth E ψ2
Σ: Signature
E, x: evar
ψ1, ψ2: Pattern
HEnex: E ≠ x
IHψ1: (depth : nat) (n : db_index), maximal_exists_depth_of_evar_in_pattern' depth E ψ1^[evar:n↦patt_free_evar x] = maximal_exists_depth_of_evar_in_pattern' depth E ψ1
IHψ2: (depth : nat) (n : db_index), maximal_exists_depth_of_evar_in_pattern' depth E ψ2^[evar:n↦patt_free_evar x] = maximal_exists_depth_of_evar_in_pattern' depth E ψ2
depth: nat
n': db_index

maximal_exists_depth_of_evar_in_pattern' depth E ψ1 `max` maximal_exists_depth_of_evar_in_pattern' depth E ψ2^[evar:n'↦patt_free_evar x] = maximal_exists_depth_of_evar_in_pattern' depth E ψ1 `max` maximal_exists_depth_of_evar_in_pattern' depth E ψ2
Σ: Signature
E, x: evar
ψ1, ψ2: Pattern
HEnex: E ≠ x
IHψ1: (depth : nat) (n : db_index), maximal_exists_depth_of_evar_in_pattern' depth E ψ1^[evar:n↦patt_free_evar x] = maximal_exists_depth_of_evar_in_pattern' depth E ψ1
IHψ2: (depth : nat) (n : db_index), maximal_exists_depth_of_evar_in_pattern' depth E ψ2^[evar:n↦patt_free_evar x] = maximal_exists_depth_of_evar_in_pattern' depth E ψ2
depth: nat
n': db_index

maximal_exists_depth_of_evar_in_pattern' depth E ψ1 `max` maximal_exists_depth_of_evar_in_pattern' depth E ψ2 = maximal_exists_depth_of_evar_in_pattern' depth E ψ1 `max` maximal_exists_depth_of_evar_in_pattern' depth E ψ2
reflexivity.
Σ: Signature
E, x: evar
ψ1, ψ2: Pattern
HEnex: E ≠ x
IHψ1: (depth : nat) (n : db_index), maximal_exists_depth_of_evar_in_pattern' depth E ψ1^[evar:n↦patt_free_evar x] = maximal_exists_depth_of_evar_in_pattern' depth E ψ1
IHψ2: (depth : nat) (n : db_index), maximal_exists_depth_of_evar_in_pattern' depth E ψ2^[evar:n↦patt_free_evar x] = maximal_exists_depth_of_evar_in_pattern' depth E ψ2
depth: nat
n': db_index

maximal_exists_depth_of_evar_in_pattern' depth E ψ1^[evar:n'↦patt_free_evar x] `max` maximal_exists_depth_of_evar_in_pattern' depth E ψ2^[evar:n'↦patt_free_evar x] = maximal_exists_depth_of_evar_in_pattern' depth E ψ1 `max` maximal_exists_depth_of_evar_in_pattern' depth E ψ2
Σ: Signature
E, x: evar
ψ: Pattern
HEnex: E ≠ x
IHψ: (depth : nat) (n : db_index), maximal_exists_depth_of_evar_in_pattern' depth E ψ^[evar:n↦patt_free_evar x] = maximal_exists_depth_of_evar_in_pattern' depth E ψ
depth: nat
n': db_index
maximal_exists_depth_of_evar_in_pattern' (S depth) E ψ^[evar:S n'↦ patt_free_evar x] = maximal_exists_depth_of_evar_in_pattern' (S depth) E ψ
Σ: Signature
E, x: evar
ψ: Pattern
HEnex: E ≠ x
IHψ: (depth : nat) (n : db_index), maximal_exists_depth_of_evar_in_pattern' depth E ψ^[evar:n↦patt_free_evar x] = maximal_exists_depth_of_evar_in_pattern' depth E ψ
depth: nat
n': db_index
maximal_exists_depth_of_evar_in_pattern' depth E ψ^[evar:n'↦patt_free_evar x] = maximal_exists_depth_of_evar_in_pattern' depth E ψ
Σ: Signature
E, x: evar
ψ1, ψ2: Pattern
HEnex: E ≠ x
IHψ1: (depth : nat) (n : db_index), maximal_exists_depth_of_evar_in_pattern' depth E ψ1^[evar:n↦patt_free_evar x] = maximal_exists_depth_of_evar_in_pattern' depth E ψ1
IHψ2: (depth : nat) (n : db_index), maximal_exists_depth_of_evar_in_pattern' depth E ψ2^[evar:n↦patt_free_evar x] = maximal_exists_depth_of_evar_in_pattern' depth E ψ2
depth: nat
n': db_index

maximal_exists_depth_of_evar_in_pattern' depth E ψ1^[evar:n'↦patt_free_evar x] `max` maximal_exists_depth_of_evar_in_pattern' depth E ψ2^[evar:n'↦patt_free_evar x] = maximal_exists_depth_of_evar_in_pattern' depth E ψ1 `max` maximal_exists_depth_of_evar_in_pattern' depth E ψ2
Σ: Signature
E, x: evar
ψ1, ψ2: Pattern
HEnex: E ≠ x
IHψ1: (depth : nat) (n : db_index), maximal_exists_depth_of_evar_in_pattern' depth E ψ1^[evar:n↦patt_free_evar x] = maximal_exists_depth_of_evar_in_pattern' depth E ψ1
IHψ2: (depth : nat) (n : db_index), maximal_exists_depth_of_evar_in_pattern' depth E ψ2^[evar:n↦patt_free_evar x] = maximal_exists_depth_of_evar_in_pattern' depth E ψ2
depth: nat
n': db_index

maximal_exists_depth_of_evar_in_pattern' depth E ψ1 `max` maximal_exists_depth_of_evar_in_pattern' depth E ψ2^[evar:n'↦patt_free_evar x] = maximal_exists_depth_of_evar_in_pattern' depth E ψ1 `max` maximal_exists_depth_of_evar_in_pattern' depth E ψ2
Σ: Signature
E, x: evar
ψ1, ψ2: Pattern
HEnex: E ≠ x
IHψ1: (depth : nat) (n : db_index), maximal_exists_depth_of_evar_in_pattern' depth E ψ1^[evar:n↦patt_free_evar x] = maximal_exists_depth_of_evar_in_pattern' depth E ψ1
IHψ2: (depth : nat) (n : db_index), maximal_exists_depth_of_evar_in_pattern' depth E ψ2^[evar:n↦patt_free_evar x] = maximal_exists_depth_of_evar_in_pattern' depth E ψ2
depth: nat
n': db_index

maximal_exists_depth_of_evar_in_pattern' depth E ψ1 `max` maximal_exists_depth_of_evar_in_pattern' depth E ψ2 = maximal_exists_depth_of_evar_in_pattern' depth E ψ1 `max` maximal_exists_depth_of_evar_in_pattern' depth E ψ2
reflexivity.
Σ: Signature
E, x: evar
ψ: Pattern
HEnex: E ≠ x
IHψ: (depth : nat) (n : db_index), maximal_exists_depth_of_evar_in_pattern' depth E ψ^[evar:n↦patt_free_evar x] = maximal_exists_depth_of_evar_in_pattern' depth E ψ
depth: nat
n': db_index

maximal_exists_depth_of_evar_in_pattern' (S depth) E ψ^[evar:S n'↦patt_free_evar x] = maximal_exists_depth_of_evar_in_pattern' (S depth) E ψ
Σ: Signature
E, x: evar
ψ: Pattern
HEnex: E ≠ x
IHψ: (depth : nat) (n : db_index), maximal_exists_depth_of_evar_in_pattern' depth E ψ^[evar:n↦patt_free_evar x] = maximal_exists_depth_of_evar_in_pattern' depth E ψ
depth: nat
n': db_index
maximal_exists_depth_of_evar_in_pattern' depth E ψ^[evar:n'↦patt_free_evar x] = maximal_exists_depth_of_evar_in_pattern' depth E ψ
Σ: Signature
E, x: evar
ψ: Pattern
HEnex: E ≠ x
IHψ: (depth : nat) (n : db_index), maximal_exists_depth_of_evar_in_pattern' depth E ψ^[evar:n↦patt_free_evar x] = maximal_exists_depth_of_evar_in_pattern' depth E ψ
depth: nat
n': db_index

maximal_exists_depth_of_evar_in_pattern' (S depth) E ψ^[evar:S n'↦patt_free_evar x] = maximal_exists_depth_of_evar_in_pattern' (S depth) E ψ
Σ: Signature
E, x: evar
ψ: Pattern
HEnex: E ≠ x
IHψ: (depth : nat) (n : db_index), maximal_exists_depth_of_evar_in_pattern' depth E ψ^[evar:n↦patt_free_evar x] = maximal_exists_depth_of_evar_in_pattern' depth E ψ
depth: nat
n': db_index

maximal_exists_depth_of_evar_in_pattern' (S depth) E ψ = maximal_exists_depth_of_evar_in_pattern' (S depth) E ψ
reflexivity.
Σ: Signature
E, x: evar
ψ: Pattern
HEnex: E ≠ x
IHψ: (depth : nat) (n : db_index), maximal_exists_depth_of_evar_in_pattern' depth E ψ^[evar:n↦patt_free_evar x] = maximal_exists_depth_of_evar_in_pattern' depth E ψ
depth: nat
n': db_index

maximal_exists_depth_of_evar_in_pattern' depth E ψ^[evar:n'↦patt_free_evar x] = maximal_exists_depth_of_evar_in_pattern' depth E ψ
Σ: Signature
E, x: evar
ψ: Pattern
HEnex: E ≠ x
IHψ: (depth : nat) (n : db_index), maximal_exists_depth_of_evar_in_pattern' depth E ψ^[evar:n↦patt_free_evar x] = maximal_exists_depth_of_evar_in_pattern' depth E ψ
depth: nat
n': db_index

maximal_exists_depth_of_evar_in_pattern' depth E ψ^[evar:n'↦patt_free_evar x] = maximal_exists_depth_of_evar_in_pattern' depth E ψ
Σ: Signature
E, x: evar
ψ: Pattern
HEnex: E ≠ x
IHψ: (depth : nat) (n : db_index), maximal_exists_depth_of_evar_in_pattern' depth E ψ^[evar:n↦patt_free_evar x] = maximal_exists_depth_of_evar_in_pattern' depth E ψ
depth: nat
n': db_index

maximal_exists_depth_of_evar_in_pattern' depth E ψ = maximal_exists_depth_of_evar_in_pattern' depth E ψ
reflexivity. } Qed.
Σ: Signature
depth: nat
E: evar
n: db_index
X: svar
ψ: Pattern

maximal_exists_depth_of_evar_in_pattern' depth E ψ^{svar:n↦X} = maximal_exists_depth_of_evar_in_pattern' depth E ψ
Σ: Signature
depth: nat
E: evar
n: db_index
X: svar
ψ: Pattern

maximal_exists_depth_of_evar_in_pattern' depth E ψ^{svar:n↦X} = maximal_exists_depth_of_evar_in_pattern' depth E ψ
Σ: Signature
depth: nat
E: evar
n: db_index
X: svar
ψ: Pattern

maximal_exists_depth_of_evar_in_pattern' depth E ψ^[svar:n↦patt_free_svar X] = maximal_exists_depth_of_evar_in_pattern' depth E ψ
Σ: Signature
E: evar
X: svar
ψ: Pattern

(depth : nat) (n : db_index), maximal_exists_depth_of_evar_in_pattern' depth E ψ^[svar:n↦patt_free_svar X] = maximal_exists_depth_of_evar_in_pattern' depth E ψ
Σ: Signature
E: evar
X: svar
n: db_index
depth: nat
n': db_index

maximal_exists_depth_of_evar_in_pattern' depth E match compare_nat n n' with | Nat_less _ _ _ => patt_bound_svar n | Nat_equal _ _ _ => patt_free_svar X | Nat_greater _ _ _ => patt_bound_svar (Nat.pred n) end = 0
Σ: Signature
E: evar
X: svar
ψ1, ψ2: Pattern
IHψ1: (depth : nat) (n : db_index), maximal_exists_depth_of_evar_in_pattern' depth E ψ1^[svar:n↦patt_free_svar X] = maximal_exists_depth_of_evar_in_pattern' depth E ψ1
IHψ2: (depth : nat) (n : db_index), maximal_exists_depth_of_evar_in_pattern' depth E ψ2^[svar:n↦patt_free_svar X] = maximal_exists_depth_of_evar_in_pattern' depth E ψ2
depth: nat
n': db_index
maximal_exists_depth_of_evar_in_pattern' depth E ψ1^[svar:n'↦patt_free_svar X] `max` maximal_exists_depth_of_evar_in_pattern' depth E ψ2^[svar:n'↦patt_free_svar X] = maximal_exists_depth_of_evar_in_pattern' depth E ψ1 `max` maximal_exists_depth_of_evar_in_pattern' depth E ψ2
Σ: Signature
E: evar
X: svar
ψ1, ψ2: Pattern
IHψ1: (depth : nat) (n : db_index), maximal_exists_depth_of_evar_in_pattern' depth E ψ1^[svar:n↦patt_free_svar X] = maximal_exists_depth_of_evar_in_pattern' depth E ψ1
IHψ2: (depth : nat) (n : db_index), maximal_exists_depth_of_evar_in_pattern' depth E ψ2^[svar:n↦patt_free_svar X] = maximal_exists_depth_of_evar_in_pattern' depth E ψ2
depth: nat
n': db_index
maximal_exists_depth_of_evar_in_pattern' depth E ψ1^[svar:n'↦patt_free_svar X] `max` maximal_exists_depth_of_evar_in_pattern' depth E ψ2^[svar:n'↦patt_free_svar X] = maximal_exists_depth_of_evar_in_pattern' depth E ψ1 `max` maximal_exists_depth_of_evar_in_pattern' depth E ψ2
Σ: Signature
E: evar
X: svar
ψ: Pattern
IHψ: (depth : nat) (n : db_index), maximal_exists_depth_of_evar_in_pattern' depth E ψ^[svar:n↦patt_free_svar X] = maximal_exists_depth_of_evar_in_pattern' depth E ψ
depth: nat
n': db_index
maximal_exists_depth_of_evar_in_pattern' (S depth) E ψ^[svar:n'↦ patt_free_svar X] = maximal_exists_depth_of_evar_in_pattern' (S depth) E ψ
Σ: Signature
E: evar
X: svar
ψ: Pattern
IHψ: (depth : nat) (n : db_index), maximal_exists_depth_of_evar_in_pattern' depth E ψ^[svar:n↦patt_free_svar X] = maximal_exists_depth_of_evar_in_pattern' depth E ψ
depth: nat
n': db_index
maximal_exists_depth_of_evar_in_pattern' depth E ψ^[svar:S n'↦patt_free_svar X] = maximal_exists_depth_of_evar_in_pattern' depth E ψ
Σ: Signature
E: evar
X: svar
n: db_index
depth: nat
n': db_index

maximal_exists_depth_of_evar_in_pattern' depth E match compare_nat n n' with | Nat_less _ _ _ => patt_bound_svar n | Nat_equal _ _ _ => patt_free_svar X | Nat_greater _ _ _ => patt_bound_svar (Nat.pred n) end = 0
case_match; simpl; try reflexivity.
Σ: Signature
E: evar
X: svar
ψ1, ψ2: Pattern
IHψ1: (depth : nat) (n : db_index), maximal_exists_depth_of_evar_in_pattern' depth E ψ1^[svar:n↦patt_free_svar X] = maximal_exists_depth_of_evar_in_pattern' depth E ψ1
IHψ2: (depth : nat) (n : db_index), maximal_exists_depth_of_evar_in_pattern' depth E ψ2^[svar:n↦patt_free_svar X] = maximal_exists_depth_of_evar_in_pattern' depth E ψ2
depth: nat
n': db_index

maximal_exists_depth_of_evar_in_pattern' depth E ψ1^[svar:n'↦patt_free_svar X] `max` maximal_exists_depth_of_evar_in_pattern' depth E ψ2^[svar:n'↦patt_free_svar X] = maximal_exists_depth_of_evar_in_pattern' depth E ψ1 `max` maximal_exists_depth_of_evar_in_pattern' depth E ψ2
Σ: Signature
E: evar
X: svar
ψ1, ψ2: Pattern
IHψ1: (depth : nat) (n : db_index), maximal_exists_depth_of_evar_in_pattern' depth E ψ1^[svar:n↦patt_free_svar X] = maximal_exists_depth_of_evar_in_pattern' depth E ψ1
IHψ2: (depth : nat) (n : db_index), maximal_exists_depth_of_evar_in_pattern' depth E ψ2^[svar:n↦patt_free_svar X] = maximal_exists_depth_of_evar_in_pattern' depth E ψ2
depth: nat
n': db_index
maximal_exists_depth_of_evar_in_pattern' depth E ψ1^[svar:n'↦patt_free_svar X] `max` maximal_exists_depth_of_evar_in_pattern' depth E ψ2^[svar:n'↦patt_free_svar X] = maximal_exists_depth_of_evar_in_pattern' depth E ψ1 `max` maximal_exists_depth_of_evar_in_pattern' depth E ψ2
Σ: Signature
E: evar
X: svar
ψ: Pattern
IHψ: (depth : nat) (n : db_index), maximal_exists_depth_of_evar_in_pattern' depth E ψ^[svar:n↦patt_free_svar X] = maximal_exists_depth_of_evar_in_pattern' depth E ψ
depth: nat
n': db_index
maximal_exists_depth_of_evar_in_pattern' (S depth) E ψ^[svar:n'↦ patt_free_svar X] = maximal_exists_depth_of_evar_in_pattern' (S depth) E ψ
Σ: Signature
E: evar
X: svar
ψ: Pattern
IHψ: (depth : nat) (n : db_index), maximal_exists_depth_of_evar_in_pattern' depth E ψ^[svar:n↦patt_free_svar X] = maximal_exists_depth_of_evar_in_pattern' depth E ψ
depth: nat
n': db_index
maximal_exists_depth_of_evar_in_pattern' depth E ψ^[svar:S n'↦patt_free_svar X] = maximal_exists_depth_of_evar_in_pattern' depth E ψ
Σ: Signature
E: evar
X: svar
ψ1, ψ2: Pattern
IHψ1: (depth : nat) (n : db_index), maximal_exists_depth_of_evar_in_pattern' depth E ψ1^[svar:n↦patt_free_svar X] = maximal_exists_depth_of_evar_in_pattern' depth E ψ1
IHψ2: (depth : nat) (n : db_index), maximal_exists_depth_of_evar_in_pattern' depth E ψ2^[svar:n↦patt_free_svar X] = maximal_exists_depth_of_evar_in_pattern' depth E ψ2
depth: nat
n': db_index

maximal_exists_depth_of_evar_in_pattern' depth E ψ1^[svar:n'↦patt_free_svar X] `max` maximal_exists_depth_of_evar_in_pattern' depth E ψ2^[svar:n'↦patt_free_svar X] = maximal_exists_depth_of_evar_in_pattern' depth E ψ1 `max` maximal_exists_depth_of_evar_in_pattern' depth E ψ2
Σ: Signature
E: evar
X: svar
ψ1, ψ2: Pattern
IHψ1: (depth : nat) (n : db_index), maximal_exists_depth_of_evar_in_pattern' depth E ψ1^[svar:n↦patt_free_svar X] = maximal_exists_depth_of_evar_in_pattern' depth E ψ1
IHψ2: (depth : nat) (n : db_index), maximal_exists_depth_of_evar_in_pattern' depth E ψ2^[svar:n↦patt_free_svar X] = maximal_exists_depth_of_evar_in_pattern' depth E ψ2
depth: nat
n': db_index

maximal_exists_depth_of_evar_in_pattern' depth E ψ1 `max` maximal_exists_depth_of_evar_in_pattern' depth E ψ2^[svar:n'↦patt_free_svar X] = maximal_exists_depth_of_evar_in_pattern' depth E ψ1 `max` maximal_exists_depth_of_evar_in_pattern' depth E ψ2
Σ: Signature
E: evar
X: svar
ψ1, ψ2: Pattern
IHψ1: (depth : nat) (n : db_index), maximal_exists_depth_of_evar_in_pattern' depth E ψ1^[svar:n↦patt_free_svar X] = maximal_exists_depth_of_evar_in_pattern' depth E ψ1
IHψ2: (depth : nat) (n : db_index), maximal_exists_depth_of_evar_in_pattern' depth E ψ2^[svar:n↦patt_free_svar X] = maximal_exists_depth_of_evar_in_pattern' depth E ψ2
depth: nat
n': db_index

maximal_exists_depth_of_evar_in_pattern' depth E ψ1 `max` maximal_exists_depth_of_evar_in_pattern' depth E ψ2 = maximal_exists_depth_of_evar_in_pattern' depth E ψ1 `max` maximal_exists_depth_of_evar_in_pattern' depth E ψ2
reflexivity.
Σ: Signature
E: evar
X: svar
ψ1, ψ2: Pattern
IHψ1: (depth : nat) (n : db_index), maximal_exists_depth_of_evar_in_pattern' depth E ψ1^[svar:n↦patt_free_svar X] = maximal_exists_depth_of_evar_in_pattern' depth E ψ1
IHψ2: (depth : nat) (n : db_index), maximal_exists_depth_of_evar_in_pattern' depth E ψ2^[svar:n↦patt_free_svar X] = maximal_exists_depth_of_evar_in_pattern' depth E ψ2
depth: nat
n': db_index

maximal_exists_depth_of_evar_in_pattern' depth E ψ1^[svar:n'↦patt_free_svar X] `max` maximal_exists_depth_of_evar_in_pattern' depth E ψ2^[svar:n'↦patt_free_svar X] = maximal_exists_depth_of_evar_in_pattern' depth E ψ1 `max` maximal_exists_depth_of_evar_in_pattern' depth E ψ2
Σ: Signature
E: evar
X: svar
ψ: Pattern
IHψ: (depth : nat) (n : db_index), maximal_exists_depth_of_evar_in_pattern' depth E ψ^[svar:n↦patt_free_svar X] = maximal_exists_depth_of_evar_in_pattern' depth E ψ
depth: nat
n': db_index
maximal_exists_depth_of_evar_in_pattern' (S depth) E ψ^[svar:n'↦ patt_free_svar X] = maximal_exists_depth_of_evar_in_pattern' (S depth) E ψ
Σ: Signature
E: evar
X: svar
ψ: Pattern
IHψ: (depth : nat) (n : db_index), maximal_exists_depth_of_evar_in_pattern' depth E ψ^[svar:n↦patt_free_svar X] = maximal_exists_depth_of_evar_in_pattern' depth E ψ
depth: nat
n': db_index
maximal_exists_depth_of_evar_in_pattern' depth E ψ^[svar:S n'↦patt_free_svar X] = maximal_exists_depth_of_evar_in_pattern' depth E ψ
Σ: Signature
E: evar
X: svar
ψ1, ψ2: Pattern
IHψ1: (depth : nat) (n : db_index), maximal_exists_depth_of_evar_in_pattern' depth E ψ1^[svar:n↦patt_free_svar X] = maximal_exists_depth_of_evar_in_pattern' depth E ψ1
IHψ2: (depth : nat) (n : db_index), maximal_exists_depth_of_evar_in_pattern' depth E ψ2^[svar:n↦patt_free_svar X] = maximal_exists_depth_of_evar_in_pattern' depth E ψ2
depth: nat
n': db_index

maximal_exists_depth_of_evar_in_pattern' depth E ψ1^[svar:n'↦patt_free_svar X] `max` maximal_exists_depth_of_evar_in_pattern' depth E ψ2^[svar:n'↦patt_free_svar X] = maximal_exists_depth_of_evar_in_pattern' depth E ψ1 `max` maximal_exists_depth_of_evar_in_pattern' depth E ψ2
Σ: Signature
E: evar
X: svar
ψ1, ψ2: Pattern
IHψ1: (depth : nat) (n : db_index), maximal_exists_depth_of_evar_in_pattern' depth E ψ1^[svar:n↦patt_free_svar X] = maximal_exists_depth_of_evar_in_pattern' depth E ψ1
IHψ2: (depth : nat) (n : db_index), maximal_exists_depth_of_evar_in_pattern' depth E ψ2^[svar:n↦patt_free_svar X] = maximal_exists_depth_of_evar_in_pattern' depth E ψ2
depth: nat
n': db_index

maximal_exists_depth_of_evar_in_pattern' depth E ψ1 `max` maximal_exists_depth_of_evar_in_pattern' depth E ψ2^[svar:n'↦patt_free_svar X] = maximal_exists_depth_of_evar_in_pattern' depth E ψ1 `max` maximal_exists_depth_of_evar_in_pattern' depth E ψ2
Σ: Signature
E: evar
X: svar
ψ1, ψ2: Pattern
IHψ1: (depth : nat) (n : db_index), maximal_exists_depth_of_evar_in_pattern' depth E ψ1^[svar:n↦patt_free_svar X] = maximal_exists_depth_of_evar_in_pattern' depth E ψ1
IHψ2: (depth : nat) (n : db_index), maximal_exists_depth_of_evar_in_pattern' depth E ψ2^[svar:n↦patt_free_svar X] = maximal_exists_depth_of_evar_in_pattern' depth E ψ2
depth: nat
n': db_index

maximal_exists_depth_of_evar_in_pattern' depth E ψ1 `max` maximal_exists_depth_of_evar_in_pattern' depth E ψ2 = maximal_exists_depth_of_evar_in_pattern' depth E ψ1 `max` maximal_exists_depth_of_evar_in_pattern' depth E ψ2
reflexivity.
Σ: Signature
E: evar
X: svar
ψ: Pattern
IHψ: (depth : nat) (n : db_index), maximal_exists_depth_of_evar_in_pattern' depth E ψ^[svar:n↦patt_free_svar X] = maximal_exists_depth_of_evar_in_pattern' depth E ψ
depth: nat
n': db_index

maximal_exists_depth_of_evar_in_pattern' (S depth) E ψ^[svar:n'↦patt_free_svar X] = maximal_exists_depth_of_evar_in_pattern' (S depth) E ψ
Σ: Signature
E: evar
X: svar
ψ: Pattern
IHψ: (depth : nat) (n : db_index), maximal_exists_depth_of_evar_in_pattern' depth E ψ^[svar:n↦patt_free_svar X] = maximal_exists_depth_of_evar_in_pattern' depth E ψ
depth: nat
n': db_index
maximal_exists_depth_of_evar_in_pattern' depth E ψ^[svar:S n'↦patt_free_svar X] = maximal_exists_depth_of_evar_in_pattern' depth E ψ
Σ: Signature
E: evar
X: svar
ψ: Pattern
IHψ: (depth : nat) (n : db_index), maximal_exists_depth_of_evar_in_pattern' depth E ψ^[svar:n↦patt_free_svar X] = maximal_exists_depth_of_evar_in_pattern' depth E ψ
depth: nat
n': db_index

maximal_exists_depth_of_evar_in_pattern' (S depth) E ψ^[svar:n'↦patt_free_svar X] = maximal_exists_depth_of_evar_in_pattern' (S depth) E ψ
Σ: Signature
E: evar
X: svar
ψ: Pattern
IHψ: (depth : nat) (n : db_index), maximal_exists_depth_of_evar_in_pattern' depth E ψ^[svar:n↦patt_free_svar X] = maximal_exists_depth_of_evar_in_pattern' depth E ψ
depth: nat
n': db_index

maximal_exists_depth_of_evar_in_pattern' (S depth) E ψ = maximal_exists_depth_of_evar_in_pattern' (S depth) E ψ
reflexivity.
Σ: Signature
E: evar
X: svar
ψ: Pattern
IHψ: (depth : nat) (n : db_index), maximal_exists_depth_of_evar_in_pattern' depth E ψ^[svar:n↦patt_free_svar X] = maximal_exists_depth_of_evar_in_pattern' depth E ψ
depth: nat
n': db_index

maximal_exists_depth_of_evar_in_pattern' depth E ψ^[svar:S n'↦patt_free_svar X] = maximal_exists_depth_of_evar_in_pattern' depth E ψ
Σ: Signature
E: evar
X: svar
ψ: Pattern
IHψ: (depth : nat) (n : db_index), maximal_exists_depth_of_evar_in_pattern' depth E ψ^[svar:n↦patt_free_svar X] = maximal_exists_depth_of_evar_in_pattern' depth E ψ
depth: nat
n': db_index

maximal_exists_depth_of_evar_in_pattern' depth E ψ^[svar:S n'↦patt_free_svar X] = maximal_exists_depth_of_evar_in_pattern' depth E ψ
Σ: Signature
E: evar
X: svar
ψ: Pattern
IHψ: (depth : nat) (n : db_index), maximal_exists_depth_of_evar_in_pattern' depth E ψ^[svar:n↦patt_free_svar X] = maximal_exists_depth_of_evar_in_pattern' depth E ψ
depth: nat
n': db_index

maximal_exists_depth_of_evar_in_pattern' depth E ψ = maximal_exists_depth_of_evar_in_pattern' depth E ψ
reflexivity. } Qed.
Σ: Signature
E: evar
ψ: Pattern
depth: nat

E ∉ free_evars ψ → maximal_exists_depth_of_evar_in_pattern' depth E ψ = 0
Σ: Signature
E: evar
ψ: Pattern
depth: nat

E ∉ free_evars ψ → maximal_exists_depth_of_evar_in_pattern' depth E ψ = 0
Σ: Signature
E: evar
ψ: Pattern
depth: nat
Hnotin: E ∉ free_evars ψ

maximal_exists_depth_of_evar_in_pattern' depth E ψ = 0
Σ: Signature
ψ: Pattern

(E : evar) (depth : nat), E ∉ free_evars ψ → maximal_exists_depth_of_evar_in_pattern' depth E ψ = 0
Σ: Signature
x, E: evar
depth: nat
Hnotin: E ∉ {[x]}

(if decide (x = E) then depth else 0) = 0
Σ: Signature
ψ1, ψ2: Pattern
IHψ1: (E : evar) (depth : nat), E ∉ free_evars ψ1 → maximal_exists_depth_of_evar_in_pattern' depth E ψ1 = 0
IHψ2: (E : evar) (depth : nat), E ∉ free_evars ψ2 → maximal_exists_depth_of_evar_in_pattern' depth E ψ2 = 0
E: evar
depth: nat
Hnotin: E ∉ free_evars ψ1 ∪ free_evars ψ2
maximal_exists_depth_of_evar_in_pattern' depth E ψ1 `max` maximal_exists_depth_of_evar_in_pattern' depth E ψ2 = 0
Σ: Signature
ψ1, ψ2: Pattern
IHψ1: (E : evar) (depth : nat), E ∉ free_evars ψ1 → maximal_exists_depth_of_evar_in_pattern' depth E ψ1 = 0
IHψ2: (E : evar) (depth : nat), E ∉ free_evars ψ2 → maximal_exists_depth_of_evar_in_pattern' depth E ψ2 = 0
E: evar
depth: nat
Hnotin: E ∉ free_evars ψ1 ∪ free_evars ψ2
maximal_exists_depth_of_evar_in_pattern' depth E ψ1 `max` maximal_exists_depth_of_evar_in_pattern' depth E ψ2 = 0
Σ: Signature
ψ: Pattern
IHψ: (E : evar) (depth : nat), E ∉ free_evars ψ → maximal_exists_depth_of_evar_in_pattern' depth E ψ = 0
E: evar
depth: nat
Hnotin: E ∉ free_evars ψ
maximal_exists_depth_of_evar_in_pattern' (S depth) E ψ = 0
Σ: Signature
ψ: Pattern
IHψ: (E : evar) (depth : nat), E ∉ free_evars ψ → maximal_exists_depth_of_evar_in_pattern' depth E ψ = 0
E: evar
depth: nat
Hnotin: E ∉ free_evars ψ
maximal_exists_depth_of_evar_in_pattern' depth E ψ = 0
Σ: Signature
x, E: evar
depth: nat
Hnotin: E ∉ {[x]}

(if decide (x = E) then depth else 0) = 0
Σ: Signature
x, E: evar
depth: nat
Hnotin: E ∉ {[x]}
e: x = E
H: decide (x = E) = left e

depth = 0
Σ: Signature
x, E: evar
depth: nat
Hnotin: E ∉ {[x]}
n: x ≠ E
H: decide (x = E) = right n
0 = 0
Σ: Signature
x, E: evar
depth: nat
Hnotin: E ∉ {[x]}
n: x ≠ E
H: decide (x = E) = right n

0 = 0
reflexivity.
Σ: Signature
ψ1, ψ2: Pattern
IHψ1: (E : evar) (depth : nat), E ∉ free_evars ψ1 → maximal_exists_depth_of_evar_in_pattern' depth E ψ1 = 0
IHψ2: (E : evar) (depth : nat), E ∉ free_evars ψ2 → maximal_exists_depth_of_evar_in_pattern' depth E ψ2 = 0
E: evar
depth: nat
Hnotin: E ∉ free_evars ψ1 ∪ free_evars ψ2

maximal_exists_depth_of_evar_in_pattern' depth E ψ1 `max` maximal_exists_depth_of_evar_in_pattern' depth E ψ2 = 0
Σ: Signature
ψ1, ψ2: Pattern
IHψ1: (E : evar) (depth : nat), E ∉ free_evars ψ1 → maximal_exists_depth_of_evar_in_pattern' depth E ψ1 = 0
IHψ2: (E : evar) (depth : nat), E ∉ free_evars ψ2 → maximal_exists_depth_of_evar_in_pattern' depth E ψ2 = 0
E: evar
depth: nat
Hnotin: E ∉ free_evars ψ1 ∪ free_evars ψ2
maximal_exists_depth_of_evar_in_pattern' depth E ψ1 `max` maximal_exists_depth_of_evar_in_pattern' depth E ψ2 = 0
Σ: Signature
ψ: Pattern
IHψ: (E : evar) (depth : nat), E ∉ free_evars ψ → maximal_exists_depth_of_evar_in_pattern' depth E ψ = 0
E: evar
depth: nat
Hnotin: E ∉ free_evars ψ
maximal_exists_depth_of_evar_in_pattern' (S depth) E ψ = 0
Σ: Signature
ψ: Pattern
IHψ: (E : evar) (depth : nat), E ∉ free_evars ψ → maximal_exists_depth_of_evar_in_pattern' depth E ψ = 0
E: evar
depth: nat
Hnotin: E ∉ free_evars ψ
maximal_exists_depth_of_evar_in_pattern' depth E ψ = 0
Σ: Signature
ψ1, ψ2: Pattern
IHψ1: (E : evar) (depth : nat), E ∉ free_evars ψ1 → maximal_exists_depth_of_evar_in_pattern' depth E ψ1 = 0
IHψ2: (E : evar) (depth : nat), E ∉ free_evars ψ2 → maximal_exists_depth_of_evar_in_pattern' depth E ψ2 = 0
E: evar
depth: nat
Hnotin: E ∉ free_evars ψ1 ∪ free_evars ψ2

maximal_exists_depth_of_evar_in_pattern' depth E ψ1 `max` maximal_exists_depth_of_evar_in_pattern' depth E ψ2 = 0
Σ: Signature
ψ1, ψ2: Pattern
IHψ1: (E : evar) (depth : nat), E ∉ free_evars ψ1 → maximal_exists_depth_of_evar_in_pattern' depth E ψ1 = 0
IHψ2: (E : evar) (depth : nat), E ∉ free_evars ψ2 → maximal_exists_depth_of_evar_in_pattern' depth E ψ2 = 0
E: evar
depth: nat
Hnotin: E ∉ free_evars ψ1 ∪ free_evars ψ2

E ∉ free_evars ψ1
Σ: Signature
ψ1, ψ2: Pattern
IHψ1: (E : evar) (depth : nat), E ∉ free_evars ψ1 → maximal_exists_depth_of_evar_in_pattern' depth E ψ1 = 0
IHψ2: (E : evar) (depth : nat), E ∉ free_evars ψ2 → maximal_exists_depth_of_evar_in_pattern' depth E ψ2 = 0
E: evar
depth: nat
Hnotin: E ∉ free_evars ψ1 ∪ free_evars ψ2
0 `max` maximal_exists_depth_of_evar_in_pattern' depth E ψ2 = 0
Σ: Signature
ψ1, ψ2: Pattern
IHψ1: (E : evar) (depth : nat), E ∉ free_evars ψ1 → maximal_exists_depth_of_evar_in_pattern' depth E ψ1 = 0
IHψ2: (E : evar) (depth : nat), E ∉ free_evars ψ2 → maximal_exists_depth_of_evar_in_pattern' depth E ψ2 = 0
E: evar
depth: nat
Hnotin: E ∉ free_evars ψ1 ∪ free_evars ψ2

0 `max` maximal_exists_depth_of_evar_in_pattern' depth E ψ2 = 0
Σ: Signature
ψ1, ψ2: Pattern
IHψ1: (E : evar) (depth : nat), E ∉ free_evars ψ1 → maximal_exists_depth_of_evar_in_pattern' depth E ψ1 = 0
IHψ2: (E : evar) (depth : nat), E ∉ free_evars ψ2 → maximal_exists_depth_of_evar_in_pattern' depth E ψ2 = 0
E: evar
depth: nat
Hnotin: E ∉ free_evars ψ1 ∪ free_evars ψ2

E ∉ free_evars ψ2
Σ: Signature
ψ1, ψ2: Pattern
IHψ1: (E : evar) (depth : nat), E ∉ free_evars ψ1 → maximal_exists_depth_of_evar_in_pattern' depth E ψ1 = 0
IHψ2: (E : evar) (depth : nat), E ∉ free_evars ψ2 → maximal_exists_depth_of_evar_in_pattern' depth E ψ2 = 0
E: evar
depth: nat
Hnotin: E ∉ free_evars ψ1 ∪ free_evars ψ2
0 `max` 0 = 0
Σ: Signature
ψ1, ψ2: Pattern
IHψ1: (E : evar) (depth : nat), E ∉ free_evars ψ1 → maximal_exists_depth_of_evar_in_pattern' depth E ψ1 = 0
IHψ2: (E : evar) (depth : nat), E ∉ free_evars ψ2 → maximal_exists_depth_of_evar_in_pattern' depth E ψ2 = 0
E: evar
depth: nat
Hnotin: E ∉ free_evars ψ1 ∪ free_evars ψ2

0 `max` 0 = 0
reflexivity.
Σ: Signature
ψ1, ψ2: Pattern
IHψ1: (E : evar) (depth : nat), E ∉ free_evars ψ1 → maximal_exists_depth_of_evar_in_pattern' depth E ψ1 = 0
IHψ2: (E : evar) (depth : nat), E ∉ free_evars ψ2 → maximal_exists_depth_of_evar_in_pattern' depth E ψ2 = 0
E: evar
depth: nat
Hnotin: E ∉ free_evars ψ1 ∪ free_evars ψ2

maximal_exists_depth_of_evar_in_pattern' depth E ψ1 `max` maximal_exists_depth_of_evar_in_pattern' depth E ψ2 = 0
Σ: Signature
ψ: Pattern
IHψ: (E : evar) (depth : nat), E ∉ free_evars ψ → maximal_exists_depth_of_evar_in_pattern' depth E ψ = 0
E: evar
depth: nat
Hnotin: E ∉ free_evars ψ
maximal_exists_depth_of_evar_in_pattern' (S depth) E ψ = 0
Σ: Signature
ψ: Pattern
IHψ: (E : evar) (depth : nat), E ∉ free_evars ψ → maximal_exists_depth_of_evar_in_pattern' depth E ψ = 0
E: evar
depth: nat
Hnotin: E ∉ free_evars ψ
maximal_exists_depth_of_evar_in_pattern' depth E ψ = 0
Σ: Signature
ψ1, ψ2: Pattern
IHψ1: (E : evar) (depth : nat), E ∉ free_evars ψ1 → maximal_exists_depth_of_evar_in_pattern' depth E ψ1 = 0
IHψ2: (E : evar) (depth : nat), E ∉ free_evars ψ2 → maximal_exists_depth_of_evar_in_pattern' depth E ψ2 = 0
E: evar
depth: nat
Hnotin: E ∉ free_evars ψ1 ∪ free_evars ψ2

maximal_exists_depth_of_evar_in_pattern' depth E ψ1 `max` maximal_exists_depth_of_evar_in_pattern' depth E ψ2 = 0
Σ: Signature
ψ1, ψ2: Pattern
IHψ1: (E : evar) (depth : nat), E ∉ free_evars ψ1 → maximal_exists_depth_of_evar_in_pattern' depth E ψ1 = 0
IHψ2: (E : evar) (depth : nat), E ∉ free_evars ψ2 → maximal_exists_depth_of_evar_in_pattern' depth E ψ2 = 0
E: evar
depth: nat
Hnotin: E ∉ free_evars ψ1 ∪ free_evars ψ2

E ∉ free_evars ψ1
Σ: Signature
ψ1, ψ2: Pattern
IHψ1: (E : evar) (depth : nat), E ∉ free_evars ψ1 → maximal_exists_depth_of_evar_in_pattern' depth E ψ1 = 0
IHψ2: (E : evar) (depth : nat), E ∉ free_evars ψ2 → maximal_exists_depth_of_evar_in_pattern' depth E ψ2 = 0
E: evar
depth: nat
Hnotin: E ∉ free_evars ψ1 ∪ free_evars ψ2
0 `max` maximal_exists_depth_of_evar_in_pattern' depth E ψ2 = 0
Σ: Signature
ψ1, ψ2: Pattern
IHψ1: (E : evar) (depth : nat), E ∉ free_evars ψ1 → maximal_exists_depth_of_evar_in_pattern' depth E ψ1 = 0
IHψ2: (E : evar) (depth : nat), E ∉ free_evars ψ2 → maximal_exists_depth_of_evar_in_pattern' depth E ψ2 = 0
E: evar
depth: nat
Hnotin: E ∉ free_evars ψ1 ∪ free_evars ψ2

0 `max` maximal_exists_depth_of_evar_in_pattern' depth E ψ2 = 0
Σ: Signature
ψ1, ψ2: Pattern
IHψ1: (E : evar) (depth : nat), E ∉ free_evars ψ1 → maximal_exists_depth_of_evar_in_pattern' depth E ψ1 = 0
IHψ2: (E : evar) (depth : nat), E ∉ free_evars ψ2 → maximal_exists_depth_of_evar_in_pattern' depth E ψ2 = 0
E: evar
depth: nat
Hnotin: E ∉ free_evars ψ1 ∪ free_evars ψ2

E ∉ free_evars ψ2
Σ: Signature
ψ1, ψ2: Pattern
IHψ1: (E : evar) (depth : nat), E ∉ free_evars ψ1 → maximal_exists_depth_of_evar_in_pattern' depth E ψ1 = 0
IHψ2: (E : evar) (depth : nat), E ∉ free_evars ψ2 → maximal_exists_depth_of_evar_in_pattern' depth E ψ2 = 0
E: evar
depth: nat
Hnotin: E ∉ free_evars ψ1 ∪ free_evars ψ2
0 `max` 0 = 0
Σ: Signature
ψ1, ψ2: Pattern
IHψ1: (E : evar) (depth : nat), E ∉ free_evars ψ1 → maximal_exists_depth_of_evar_in_pattern' depth E ψ1 = 0
IHψ2: (E : evar) (depth : nat), E ∉ free_evars ψ2 → maximal_exists_depth_of_evar_in_pattern' depth E ψ2 = 0
E: evar
depth: nat
Hnotin: E ∉ free_evars ψ1 ∪ free_evars ψ2

0 `max` 0 = 0
reflexivity.
Σ: Signature
ψ: Pattern
IHψ: (E : evar) (depth : nat), E ∉ free_evars ψ → maximal_exists_depth_of_evar_in_pattern' depth E ψ = 0
E: evar
depth: nat
Hnotin: E ∉ free_evars ψ

maximal_exists_depth_of_evar_in_pattern' (S depth) E ψ = 0
Σ: Signature
ψ: Pattern
IHψ: (E : evar) (depth : nat), E ∉ free_evars ψ → maximal_exists_depth_of_evar_in_pattern' depth E ψ = 0
E: evar
depth: nat
Hnotin: E ∉ free_evars ψ
maximal_exists_depth_of_evar_in_pattern' depth E ψ = 0
Σ: Signature
ψ: Pattern
IHψ: (E : evar) (depth : nat), E ∉ free_evars ψ → maximal_exists_depth_of_evar_in_pattern' depth E ψ = 0
E: evar
depth: nat
Hnotin: E ∉ free_evars ψ

maximal_exists_depth_of_evar_in_pattern' (S depth) E ψ = 0
Σ: Signature
ψ: Pattern
IHψ: (E : evar) (depth : nat), E ∉ free_evars ψ → maximal_exists_depth_of_evar_in_pattern' depth E ψ = 0
E: evar
depth: nat
Hnotin: E ∉ free_evars ψ

E ∉ free_evars ψ
Σ: Signature
ψ: Pattern
IHψ: (E : evar) (depth : nat), E ∉ free_evars ψ → maximal_exists_depth_of_evar_in_pattern' depth E ψ = 0
E: evar
depth: nat
Hnotin: E ∉ free_evars ψ
0 = 0
Σ: Signature
ψ: Pattern
IHψ: (E : evar) (depth : nat), E ∉ free_evars ψ → maximal_exists_depth_of_evar_in_pattern' depth E ψ = 0
E: evar
depth: nat
Hnotin: E ∉ free_evars ψ

0 = 0
reflexivity.
Σ: Signature
ψ: Pattern
IHψ: (E : evar) (depth : nat), E ∉ free_evars ψ → maximal_exists_depth_of_evar_in_pattern' depth E ψ = 0
E: evar
depth: nat
Hnotin: E ∉ free_evars ψ

maximal_exists_depth_of_evar_in_pattern' depth E ψ = 0
Σ: Signature
ψ: Pattern
IHψ: (E : evar) (depth : nat), E ∉ free_evars ψ → maximal_exists_depth_of_evar_in_pattern' depth E ψ = 0
E: evar
depth: nat
Hnotin: E ∉ free_evars ψ

maximal_exists_depth_of_evar_in_pattern' depth E ψ = 0
Σ: Signature
ψ: Pattern
IHψ: (E : evar) (depth : nat), E ∉ free_evars ψ → maximal_exists_depth_of_evar_in_pattern' depth E ψ = 0
E: evar
depth: nat
Hnotin: E ∉ free_evars ψ

E ∉ free_evars ψ
Σ: Signature
ψ: Pattern
IHψ: (E : evar) (depth : nat), E ∉ free_evars ψ → maximal_exists_depth_of_evar_in_pattern' depth E ψ = 0
E: evar
depth: nat
Hnotin: E ∉ free_evars ψ
0 = 0
Σ: Signature
ψ: Pattern
IHψ: (E : evar) (depth : nat), E ∉ free_evars ψ → maximal_exists_depth_of_evar_in_pattern' depth E ψ = 0
E: evar
depth: nat
Hnotin: E ∉ free_evars ψ

0 = 0
reflexivity. } Qed.
Σ: Signature
E: evar
ψ: Pattern
depth: nat

E ∈ free_evars ψ → maximal_exists_depth_of_evar_in_pattern' (S depth) E ψ = S (maximal_exists_depth_of_evar_in_pattern' depth E ψ)
Σ: Signature
E: evar
ψ: Pattern
depth: nat

E ∈ free_evars ψ → maximal_exists_depth_of_evar_in_pattern' (S depth) E ψ = S (maximal_exists_depth_of_evar_in_pattern' depth E ψ)
Σ: Signature
E: evar
ψ: Pattern
depth: nat
Hin: E ∈ free_evars ψ

maximal_exists_depth_of_evar_in_pattern' (S depth) E ψ = S (maximal_exists_depth_of_evar_in_pattern' depth E ψ)
Σ: Signature
ψ: Pattern

(E : evar) (depth : nat), E ∈ free_evars ψ → maximal_exists_depth_of_evar_in_pattern' (S depth) E ψ = S (maximal_exists_depth_of_evar_in_pattern' depth E ψ)
Σ: Signature
x, E: evar
depth: nat
Hin: E ∈ {[x]}

(if decide (x = E) then S depth else 0) = S (if decide (x = E) then depth else 0)
Σ: Signature
x: svar
E: evar
depth: nat
Hin: E ∈ ∅
0 = 1
Σ: Signature
n: db_index
E: evar
depth: nat
Hin: E ∈ ∅
0 = 1
Σ: Signature
n: db_index
E: evar
depth: nat
Hin: E ∈ ∅
0 = 1
Σ: Signature
sigma: symbols
E: evar
depth: nat
Hin: E ∈ ∅
0 = 1
Σ: Signature
ψ1, ψ2: Pattern
IHψ1: (E : evar) (depth : nat), E ∈ free_evars ψ1 → maximal_exists_depth_of_evar_in_pattern' (S depth) E ψ1 = S (maximal_exists_depth_of_evar_in_pattern' depth E ψ1)
IHψ2: (E : evar) (depth : nat), E ∈ free_evars ψ2 → maximal_exists_depth_of_evar_in_pattern' (S depth) E ψ2 = S (maximal_exists_depth_of_evar_in_pattern' depth E ψ2)
E: evar
depth: nat
Hin: E ∈ free_evars ψ1 ∪ free_evars ψ2
maximal_exists_depth_of_evar_in_pattern' (S depth) E ψ1 `max` maximal_exists_depth_of_evar_in_pattern' (S depth) E ψ2 = S (maximal_exists_depth_of_evar_in_pattern' depth E ψ1 `max` maximal_exists_depth_of_evar_in_pattern' depth E ψ2)
Σ: Signature
E: evar
depth: nat
Hin: E ∈ ∅
0 = 1
Σ: Signature
ψ1, ψ2: Pattern
IHψ1: (E : evar) (depth : nat), E ∈ free_evars ψ1 → maximal_exists_depth_of_evar_in_pattern' (S depth) E ψ1 = S (maximal_exists_depth_of_evar_in_pattern' depth E ψ1)
IHψ2: (E : evar) (depth : nat), E ∈ free_evars ψ2 → maximal_exists_depth_of_evar_in_pattern' (S depth) E ψ2 = S (maximal_exists_depth_of_evar_in_pattern' depth E ψ2)
E: evar
depth: nat
Hin: E ∈ free_evars ψ1 ∪ free_evars ψ2
maximal_exists_depth_of_evar_in_pattern' (S depth) E ψ1 `max` maximal_exists_depth_of_evar_in_pattern' (S depth) E ψ2 = S (maximal_exists_depth_of_evar_in_pattern' depth E ψ1 `max` maximal_exists_depth_of_evar_in_pattern' depth E ψ2)
Σ: Signature
ψ: Pattern
IHψ: (E : evar) (depth : nat), E ∈ free_evars ψ → maximal_exists_depth_of_evar_in_pattern' (S depth) E ψ = S (maximal_exists_depth_of_evar_in_pattern' depth E ψ)
E: evar
depth: nat
Hin: E ∈ free_evars ψ
maximal_exists_depth_of_evar_in_pattern' (S (S depth)) E ψ = S (maximal_exists_depth_of_evar_in_pattern' (S depth) E ψ)
Σ: Signature
ψ: Pattern
IHψ: (E : evar) (depth : nat), E ∈ free_evars ψ → maximal_exists_depth_of_evar_in_pattern' (S depth) E ψ = S (maximal_exists_depth_of_evar_in_pattern' depth E ψ)
E: evar
depth: nat
Hin: E ∈ free_evars ψ
maximal_exists_depth_of_evar_in_pattern' (S depth) E ψ = S (maximal_exists_depth_of_evar_in_pattern' depth E ψ)
Σ: Signature
x, E: evar
depth: nat
Hin: E ∈ {[x]}

(if decide (x = E) then S depth else 0) = S (if decide (x = E) then depth else 0)
Σ: Signature
x, E: evar
depth: nat
Hin: E ∈ {[x]}
e: x = E
H: decide (x = E) = left e

S depth = S depth
Σ: Signature
x, E: evar
depth: nat
Hin: E ∈ {[x]}
n: x ≠ E
H: decide (x = E) = right n
0 = 1
Σ: Signature
x, E: evar
depth: nat
Hin: E ∈ {[x]}
n: x ≠ E
H: decide (x = E) = right n

0 = 1
set_solver.
Σ: Signature
x: svar
E: evar
depth: nat
Hin: E ∈ ∅

0 = 1
Σ: Signature
n: db_index
E: evar
depth: nat
Hin: E ∈ ∅
0 = 1
Σ: Signature
n: db_index
E: evar
depth: nat
Hin: E ∈ ∅
0 = 1
Σ: Signature
sigma: symbols
E: evar
depth: nat
Hin: E ∈ ∅
0 = 1
Σ: Signature
ψ1, ψ2: Pattern
IHψ1: (E : evar) (depth : nat), E ∈ free_evars ψ1 → maximal_exists_depth_of_evar_in_pattern' (S depth) E ψ1 = S (maximal_exists_depth_of_evar_in_pattern' depth E ψ1)
IHψ2: (E : evar) (depth : nat), E ∈ free_evars ψ2 → maximal_exists_depth_of_evar_in_pattern' (S depth) E ψ2 = S (maximal_exists_depth_of_evar_in_pattern' depth E ψ2)
E: evar
depth: nat
Hin: E ∈ free_evars ψ1 ∪ free_evars ψ2
maximal_exists_depth_of_evar_in_pattern' (S depth) E ψ1 `max` maximal_exists_depth_of_evar_in_pattern' (S depth) E ψ2 = S (maximal_exists_depth_of_evar_in_pattern' depth E ψ1 `max` maximal_exists_depth_of_evar_in_pattern' depth E ψ2)
Σ: Signature
E: evar
depth: nat
Hin: E ∈ ∅
0 = 1
Σ: Signature
ψ1, ψ2: Pattern
IHψ1: (E : evar) (depth : nat), E ∈ free_evars ψ1 → maximal_exists_depth_of_evar_in_pattern' (S depth) E ψ1 = S (maximal_exists_depth_of_evar_in_pattern' depth E ψ1)
IHψ2: (E : evar) (depth : nat), E ∈ free_evars ψ2 → maximal_exists_depth_of_evar_in_pattern' (S depth) E ψ2 = S (maximal_exists_depth_of_evar_in_pattern' depth E ψ2)
E: evar
depth: nat
Hin: E ∈ free_evars ψ1 ∪ free_evars ψ2
maximal_exists_depth_of_evar_in_pattern' (S depth) E ψ1 `max` maximal_exists_depth_of_evar_in_pattern' (S depth) E ψ2 = S (maximal_exists_depth_of_evar_in_pattern' depth E ψ1 `max` maximal_exists_depth_of_evar_in_pattern' depth E ψ2)
Σ: Signature
ψ: Pattern
IHψ: (E : evar) (depth : nat), E ∈ free_evars ψ → maximal_exists_depth_of_evar_in_pattern' (S depth) E ψ = S (maximal_exists_depth_of_evar_in_pattern' depth E ψ)
E: evar
depth: nat
Hin: E ∈ free_evars ψ
maximal_exists_depth_of_evar_in_pattern' (S (S depth)) E ψ = S (maximal_exists_depth_of_evar_in_pattern' (S depth) E ψ)
Σ: Signature
ψ: Pattern
IHψ: (E : evar) (depth : nat), E ∈ free_evars ψ → maximal_exists_depth_of_evar_in_pattern' (S depth) E ψ = S (maximal_exists_depth_of_evar_in_pattern' depth E ψ)
E: evar
depth: nat
Hin: E ∈ free_evars ψ
maximal_exists_depth_of_evar_in_pattern' (S depth) E ψ = S (maximal_exists_depth_of_evar_in_pattern' depth E ψ)
Σ: Signature
x: svar
E: evar
depth: nat
Hin: E ∈ ∅

0 = 1
set_solver.
Σ: Signature
n: db_index
E: evar
depth: nat
Hin: E ∈ ∅

0 = 1
Σ: Signature
n: db_index
E: evar
depth: nat
Hin: E ∈ ∅
0 = 1
Σ: Signature
sigma: symbols
E: evar
depth: nat
Hin: E ∈ ∅
0 = 1
Σ: Signature
ψ1, ψ2: Pattern
IHψ1: (E : evar) (depth : nat), E ∈ free_evars ψ1 → maximal_exists_depth_of_evar_in_pattern' (S depth) E ψ1 = S (maximal_exists_depth_of_evar_in_pattern' depth E ψ1)
IHψ2: (E : evar) (depth : nat), E ∈ free_evars ψ2 → maximal_exists_depth_of_evar_in_pattern' (S depth) E ψ2 = S (maximal_exists_depth_of_evar_in_pattern' depth E ψ2)
E: evar
depth: nat
Hin: E ∈ free_evars ψ1 ∪ free_evars ψ2
maximal_exists_depth_of_evar_in_pattern' (S depth) E ψ1 `max` maximal_exists_depth_of_evar_in_pattern' (S depth) E ψ2 = S (maximal_exists_depth_of_evar_in_pattern' depth E ψ1 `max` maximal_exists_depth_of_evar_in_pattern' depth E ψ2)
Σ: Signature
E: evar
depth: nat
Hin: E ∈ ∅
0 = 1
Σ: Signature
ψ1, ψ2: Pattern
IHψ1: (E : evar) (depth : nat), E ∈ free_evars ψ1 → maximal_exists_depth_of_evar_in_pattern' (S depth) E ψ1 = S (maximal_exists_depth_of_evar_in_pattern' depth E ψ1)
IHψ2: (E : evar) (depth : nat), E ∈ free_evars ψ2 → maximal_exists_depth_of_evar_in_pattern' (S depth) E ψ2 = S (maximal_exists_depth_of_evar_in_pattern' depth E ψ2)
E: evar
depth: nat
Hin: E ∈ free_evars ψ1 ∪ free_evars ψ2
maximal_exists_depth_of_evar_in_pattern' (S depth) E ψ1 `max` maximal_exists_depth_of_evar_in_pattern' (S depth) E ψ2 = S (maximal_exists_depth_of_evar_in_pattern' depth E ψ1 `max` maximal_exists_depth_of_evar_in_pattern' depth E ψ2)
Σ: Signature
ψ: Pattern
IHψ: (E : evar) (depth : nat), E ∈ free_evars ψ → maximal_exists_depth_of_evar_in_pattern' (S depth) E ψ = S (maximal_exists_depth_of_evar_in_pattern' depth E ψ)
E: evar
depth: nat
Hin: E ∈ free_evars ψ
maximal_exists_depth_of_evar_in_pattern' (S (S depth)) E ψ = S (maximal_exists_depth_of_evar_in_pattern' (S depth) E ψ)
Σ: Signature
ψ: Pattern
IHψ: (E : evar) (depth : nat), E ∈ free_evars ψ → maximal_exists_depth_of_evar_in_pattern' (S depth) E ψ = S (maximal_exists_depth_of_evar_in_pattern' depth E ψ)
E: evar
depth: nat
Hin: E ∈ free_evars ψ
maximal_exists_depth_of_evar_in_pattern' (S depth) E ψ = S (maximal_exists_depth_of_evar_in_pattern' depth E ψ)
Σ: Signature
n: db_index
E: evar
depth: nat
Hin: E ∈ ∅

0 = 1
set_solver.
Σ: Signature
n: db_index
E: evar
depth: nat
Hin: E ∈ ∅

0 = 1
Σ: Signature
sigma: symbols
E: evar
depth: nat
Hin: E ∈ ∅
0 = 1
Σ: Signature
ψ1, ψ2: Pattern
IHψ1: (E : evar) (depth : nat), E ∈ free_evars ψ1 → maximal_exists_depth_of_evar_in_pattern' (S depth) E ψ1 = S (maximal_exists_depth_of_evar_in_pattern' depth E ψ1)
IHψ2: (E : evar) (depth : nat), E ∈ free_evars ψ2 → maximal_exists_depth_of_evar_in_pattern' (S depth) E ψ2 = S (maximal_exists_depth_of_evar_in_pattern' depth E ψ2)
E: evar
depth: nat
Hin: E ∈ free_evars ψ1 ∪ free_evars ψ2
maximal_exists_depth_of_evar_in_pattern' (S depth) E ψ1 `max` maximal_exists_depth_of_evar_in_pattern' (S depth) E ψ2 = S (maximal_exists_depth_of_evar_in_pattern' depth E ψ1 `max` maximal_exists_depth_of_evar_in_pattern' depth E ψ2)
Σ: Signature
E: evar
depth: nat
Hin: E ∈ ∅
0 = 1
Σ: Signature
ψ1, ψ2: Pattern
IHψ1: (E : evar) (depth : nat), E ∈ free_evars ψ1 → maximal_exists_depth_of_evar_in_pattern' (S depth) E ψ1 = S (maximal_exists_depth_of_evar_in_pattern' depth E ψ1)
IHψ2: (E : evar) (depth : nat), E ∈ free_evars ψ2 → maximal_exists_depth_of_evar_in_pattern' (S depth) E ψ2 = S (maximal_exists_depth_of_evar_in_pattern' depth E ψ2)
E: evar
depth: nat
Hin: E ∈ free_evars ψ1 ∪ free_evars ψ2
maximal_exists_depth_of_evar_in_pattern' (S depth) E ψ1 `max` maximal_exists_depth_of_evar_in_pattern' (S depth) E ψ2 = S (maximal_exists_depth_of_evar_in_pattern' depth E ψ1 `max` maximal_exists_depth_of_evar_in_pattern' depth E ψ2)
Σ: Signature
ψ: Pattern
IHψ: (E : evar) (depth : nat), E ∈ free_evars ψ → maximal_exists_depth_of_evar_in_pattern' (S depth) E ψ = S (maximal_exists_depth_of_evar_in_pattern' depth E ψ)
E: evar
depth: nat
Hin: E ∈ free_evars ψ
maximal_exists_depth_of_evar_in_pattern' (S (S depth)) E ψ = S (maximal_exists_depth_of_evar_in_pattern' (S depth) E ψ)
Σ: Signature
ψ: Pattern
IHψ: (E : evar) (depth : nat), E ∈ free_evars ψ → maximal_exists_depth_of_evar_in_pattern' (S depth) E ψ = S (maximal_exists_depth_of_evar_in_pattern' depth E ψ)
E: evar
depth: nat
Hin: E ∈ free_evars ψ
maximal_exists_depth_of_evar_in_pattern' (S depth) E ψ = S (maximal_exists_depth_of_evar_in_pattern' depth E ψ)
Σ: Signature
n: db_index
E: evar
depth: nat
Hin: E ∈ ∅

0 = 1
set_solver.
Σ: Signature
sigma: symbols
E: evar
depth: nat
Hin: E ∈ ∅

0 = 1
Σ: Signature
ψ1, ψ2: Pattern
IHψ1: (E : evar) (depth : nat), E ∈ free_evars ψ1 → maximal_exists_depth_of_evar_in_pattern' (S depth) E ψ1 = S (maximal_exists_depth_of_evar_in_pattern' depth E ψ1)
IHψ2: (E : evar) (depth : nat), E ∈ free_evars ψ2 → maximal_exists_depth_of_evar_in_pattern' (S depth) E ψ2 = S (maximal_exists_depth_of_evar_in_pattern' depth E ψ2)
E: evar
depth: nat
Hin: E ∈ free_evars ψ1 ∪ free_evars ψ2
maximal_exists_depth_of_evar_in_pattern' (S depth) E ψ1 `max` maximal_exists_depth_of_evar_in_pattern' (S depth) E ψ2 = S (maximal_exists_depth_of_evar_in_pattern' depth E ψ1 `max` maximal_exists_depth_of_evar_in_pattern' depth E ψ2)
Σ: Signature
E: evar
depth: nat
Hin: E ∈ ∅
0 = 1
Σ: Signature
ψ1, ψ2: Pattern
IHψ1: (E : evar) (depth : nat), E ∈ free_evars ψ1 → maximal_exists_depth_of_evar_in_pattern' (S depth) E ψ1 = S (maximal_exists_depth_of_evar_in_pattern' depth E ψ1)
IHψ2: (E : evar) (depth : nat), E ∈ free_evars ψ2 → maximal_exists_depth_of_evar_in_pattern' (S depth) E ψ2 = S (maximal_exists_depth_of_evar_in_pattern' depth E ψ2)
E: evar
depth: nat
Hin: E ∈ free_evars ψ1 ∪ free_evars ψ2
maximal_exists_depth_of_evar_in_pattern' (S depth) E ψ1 `max` maximal_exists_depth_of_evar_in_pattern' (S depth) E ψ2 = S (maximal_exists_depth_of_evar_in_pattern' depth E ψ1 `max` maximal_exists_depth_of_evar_in_pattern' depth E ψ2)
Σ: Signature
ψ: Pattern
IHψ: (E : evar) (depth : nat), E ∈ free_evars ψ → maximal_exists_depth_of_evar_in_pattern' (S depth) E ψ = S (maximal_exists_depth_of_evar_in_pattern' depth E ψ)
E: evar
depth: nat
Hin: E ∈ free_evars ψ
maximal_exists_depth_of_evar_in_pattern' (S (S depth)) E ψ = S (maximal_exists_depth_of_evar_in_pattern' (S depth) E ψ)
Σ: Signature
ψ: Pattern
IHψ: (E : evar) (depth : nat), E ∈ free_evars ψ → maximal_exists_depth_of_evar_in_pattern' (S depth) E ψ = S (maximal_exists_depth_of_evar_in_pattern' depth E ψ)
E: evar
depth: nat
Hin: E ∈ free_evars ψ
maximal_exists_depth_of_evar_in_pattern' (S depth) E ψ = S (maximal_exists_depth_of_evar_in_pattern' depth E ψ)
Σ: Signature
sigma: symbols
E: evar
depth: nat
Hin: E ∈ ∅

0 = 1
set_solver.
Σ: Signature
ψ1, ψ2: Pattern
IHψ1: (E : evar) (depth : nat), E ∈ free_evars ψ1 → maximal_exists_depth_of_evar_in_pattern' (S depth) E ψ1 = S (maximal_exists_depth_of_evar_in_pattern' depth E ψ1)
IHψ2: (E : evar) (depth : nat), E ∈ free_evars ψ2 → maximal_exists_depth_of_evar_in_pattern' (S depth) E ψ2 = S (maximal_exists_depth_of_evar_in_pattern' depth E ψ2)
E: evar
depth: nat
Hin: E ∈ free_evars ψ1 ∪ free_evars ψ2

maximal_exists_depth_of_evar_in_pattern' (S depth) E ψ1 `max` maximal_exists_depth_of_evar_in_pattern' (S depth) E ψ2 = S (maximal_exists_depth_of_evar_in_pattern' depth E ψ1 `max` maximal_exists_depth_of_evar_in_pattern' depth E ψ2)
Σ: Signature
E: evar
depth: nat
Hin: E ∈ ∅
0 = 1
Σ: Signature
ψ1, ψ2: Pattern
IHψ1: (E : evar) (depth : nat), E ∈ free_evars ψ1 → maximal_exists_depth_of_evar_in_pattern' (S depth) E ψ1 = S (maximal_exists_depth_of_evar_in_pattern' depth E ψ1)
IHψ2: (E : evar) (depth : nat), E ∈ free_evars ψ2 → maximal_exists_depth_of_evar_in_pattern' (S depth) E ψ2 = S (maximal_exists_depth_of_evar_in_pattern' depth E ψ2)
E: evar
depth: nat
Hin: E ∈ free_evars ψ1 ∪ free_evars ψ2
maximal_exists_depth_of_evar_in_pattern' (S depth) E ψ1 `max` maximal_exists_depth_of_evar_in_pattern' (S depth) E ψ2 = S (maximal_exists_depth_of_evar_in_pattern' depth E ψ1 `max` maximal_exists_depth_of_evar_in_pattern' depth E ψ2)
Σ: Signature
ψ: Pattern
IHψ: (E : evar) (depth : nat), E ∈ free_evars ψ → maximal_exists_depth_of_evar_in_pattern' (S depth) E ψ = S (maximal_exists_depth_of_evar_in_pattern' depth E ψ)
E: evar
depth: nat
Hin: E ∈ free_evars ψ
maximal_exists_depth_of_evar_in_pattern' (S (S depth)) E ψ = S (maximal_exists_depth_of_evar_in_pattern' (S depth) E ψ)
Σ: Signature
ψ: Pattern
IHψ: (E : evar) (depth : nat), E ∈ free_evars ψ → maximal_exists_depth_of_evar_in_pattern' (S depth) E ψ = S (maximal_exists_depth_of_evar_in_pattern' depth E ψ)
E: evar
depth: nat
Hin: E ∈ free_evars ψ
maximal_exists_depth_of_evar_in_pattern' (S depth) E ψ = S (maximal_exists_depth_of_evar_in_pattern' depth E ψ)
Σ: Signature
ψ1, ψ2: Pattern
IHψ1: (E : evar) (depth : nat), E ∈ free_evars ψ1 → maximal_exists_depth_of_evar_in_pattern' (S depth) E ψ1 = S (maximal_exists_depth_of_evar_in_pattern' depth E ψ1)
IHψ2: (E : evar) (depth : nat), E ∈ free_evars ψ2 → maximal_exists_depth_of_evar_in_pattern' (S depth) E ψ2 = S (maximal_exists_depth_of_evar_in_pattern' depth E ψ2)
E: evar
depth: nat
Hin: E ∈ free_evars ψ1 ∪ free_evars ψ2

maximal_exists_depth_of_evar_in_pattern' (S depth) E ψ1 `max` maximal_exists_depth_of_evar_in_pattern' (S depth) E ψ2 = S (maximal_exists_depth_of_evar_in_pattern' depth E ψ1 `max` maximal_exists_depth_of_evar_in_pattern' depth E ψ2)
Σ: Signature
ψ1, ψ2: Pattern
IHψ1: (E : evar) (depth : nat), E ∈ free_evars ψ1 → maximal_exists_depth_of_evar_in_pattern' (S depth) E ψ1 = S (maximal_exists_depth_of_evar_in_pattern' depth E ψ1)
IHψ2: (E : evar) (depth : nat), E ∈ free_evars ψ2 → maximal_exists_depth_of_evar_in_pattern' (S depth) E ψ2 = S (maximal_exists_depth_of_evar_in_pattern' depth E ψ2)
E: evar
depth: nat
Hin: E ∈ free_evars ψ1 ∪ free_evars ψ2
e: E ∈ free_evars ψ1
e0: E ∈ free_evars ψ2

maximal_exists_depth_of_evar_in_pattern' (S depth) E ψ1 `max` maximal_exists_depth_of_evar_in_pattern' (S depth) E ψ2 = S (maximal_exists_depth_of_evar_in_pattern' depth E ψ1 `max` maximal_exists_depth_of_evar_in_pattern' depth E ψ2)
Σ: Signature
ψ1, ψ2: Pattern
IHψ1: (E : evar) (depth : nat), E ∈ free_evars ψ1 → maximal_exists_depth_of_evar_in_pattern' (S depth) E ψ1 = S (maximal_exists_depth_of_evar_in_pattern' depth E ψ1)
IHψ2: (E : evar) (depth : nat), E ∈ free_evars ψ2 → maximal_exists_depth_of_evar_in_pattern' (S depth) E ψ2 = S (maximal_exists_depth_of_evar_in_pattern' depth E ψ2)
E: evar
depth: nat
Hin: E ∈ free_evars ψ1 ∪ free_evars ψ2
e: E ∈ free_evars ψ1
n: E ∉ free_evars ψ2
maximal_exists_depth_of_evar_in_pattern' (S depth) E ψ1 `max` maximal_exists_depth_of_evar_in_pattern' (S depth) E ψ2 = S (maximal_exists_depth_of_evar_in_pattern' depth E ψ1 `max` maximal_exists_depth_of_evar_in_pattern' depth E ψ2)
Σ: Signature
ψ1, ψ2: Pattern
IHψ1: (E : evar) (depth : nat), E ∈ free_evars ψ1 → maximal_exists_depth_of_evar_in_pattern' (S depth) E ψ1 = S (maximal_exists_depth_of_evar_in_pattern' depth E ψ1)
IHψ2: (E : evar) (depth : nat), E ∈ free_evars ψ2 → maximal_exists_depth_of_evar_in_pattern' (S depth) E ψ2 = S (maximal_exists_depth_of_evar_in_pattern' depth E ψ2)
E: evar
depth: nat
Hin: E ∈ free_evars ψ1 ∪ free_evars ψ2
n: E ∉ free_evars ψ1
e: E ∈ free_evars ψ2
maximal_exists_depth_of_evar_in_pattern' (S depth) E ψ1 `max` maximal_exists_depth_of_evar_in_pattern' (S depth) E ψ2 = S (maximal_exists_depth_of_evar_in_pattern' depth E ψ1 `max` maximal_exists_depth_of_evar_in_pattern' depth E ψ2)
Σ: Signature
ψ1, ψ2: Pattern
IHψ1: (E : evar) (depth : nat), E ∈ free_evars ψ1 → maximal_exists_depth_of_evar_in_pattern' (S depth) E ψ1 = S (maximal_exists_depth_of_evar_in_pattern' depth E ψ1)
IHψ2: (E : evar) (depth : nat), E ∈ free_evars ψ2 → maximal_exists_depth_of_evar_in_pattern' (S depth) E ψ2 = S (maximal_exists_depth_of_evar_in_pattern' depth E ψ2)
E: evar
depth: nat
Hin: E ∈ free_evars ψ1 ∪ free_evars ψ2
n: E ∉ free_evars ψ1
n0: E ∉ free_evars ψ2
maximal_exists_depth_of_evar_in_pattern' (S depth) E ψ1 `max` maximal_exists_depth_of_evar_in_pattern' (S depth) E ψ2 = S (maximal_exists_depth_of_evar_in_pattern' depth E ψ1 `max` maximal_exists_depth_of_evar_in_pattern' depth E ψ2)
Σ: Signature
ψ1, ψ2: Pattern
IHψ1: (E : evar) (depth : nat), E ∈ free_evars ψ1 → maximal_exists_depth_of_evar_in_pattern' (S depth) E ψ1 = S (maximal_exists_depth_of_evar_in_pattern' depth E ψ1)
IHψ2: (E : evar) (depth : nat), E ∈ free_evars ψ2 → maximal_exists_depth_of_evar_in_pattern' (S depth) E ψ2 = S (maximal_exists_depth_of_evar_in_pattern' depth E ψ2)
E: evar
depth: nat
Hin: E ∈ free_evars ψ1 ∪ free_evars ψ2
e: E ∈ free_evars ψ1
e0: E ∈ free_evars ψ2

maximal_exists_depth_of_evar_in_pattern' (S depth) E ψ1 `max` maximal_exists_depth_of_evar_in_pattern' (S depth) E ψ2 = S (maximal_exists_depth_of_evar_in_pattern' depth E ψ1 `max` maximal_exists_depth_of_evar_in_pattern' depth E ψ2)
Σ: Signature
ψ1, ψ2: Pattern
IHψ1: (E : evar) (depth : nat), E ∈ free_evars ψ1 → maximal_exists_depth_of_evar_in_pattern' (S depth) E ψ1 = S (maximal_exists_depth_of_evar_in_pattern' depth E ψ1)
IHψ2: (E : evar) (depth : nat), E ∈ free_evars ψ2 → maximal_exists_depth_of_evar_in_pattern' (S depth) E ψ2 = S (maximal_exists_depth_of_evar_in_pattern' depth E ψ2)
E: evar
depth: nat
Hin: E ∈ free_evars ψ1 ∪ free_evars ψ2
e: E ∈ free_evars ψ1
e0: E ∈ free_evars ψ2

E ∈ free_evars ψ1
Σ: Signature
ψ1, ψ2: Pattern
IHψ1: (E : evar) (depth : nat), E ∈ free_evars ψ1 → maximal_exists_depth_of_evar_in_pattern' (S depth) E ψ1 = S (maximal_exists_depth_of_evar_in_pattern' depth E ψ1)
IHψ2: (E : evar) (depth : nat), E ∈ free_evars ψ2 → maximal_exists_depth_of_evar_in_pattern' (S depth) E ψ2 = S (maximal_exists_depth_of_evar_in_pattern' depth E ψ2)
E: evar
depth: nat
Hin: E ∈ free_evars ψ1 ∪ free_evars ψ2
e: E ∈ free_evars ψ1
e0: E ∈ free_evars ψ2
S (maximal_exists_depth_of_evar_in_pattern' depth E ψ1) `max` maximal_exists_depth_of_evar_in_pattern' (S depth) E ψ2 = S (maximal_exists_depth_of_evar_in_pattern' depth E ψ1 `max` maximal_exists_depth_of_evar_in_pattern' depth E ψ2)
Σ: Signature
ψ1, ψ2: Pattern
IHψ1: (E : evar) (depth : nat), E ∈ free_evars ψ1 → maximal_exists_depth_of_evar_in_pattern' (S depth) E ψ1 = S (maximal_exists_depth_of_evar_in_pattern' depth E ψ1)
IHψ2: (E : evar) (depth : nat), E ∈ free_evars ψ2 → maximal_exists_depth_of_evar_in_pattern' (S depth) E ψ2 = S (maximal_exists_depth_of_evar_in_pattern' depth E ψ2)
E: evar
depth: nat
Hin: E ∈ free_evars ψ1 ∪ free_evars ψ2
e: E ∈ free_evars ψ1
e0: E ∈ free_evars ψ2

S (maximal_exists_depth_of_evar_in_pattern' depth E ψ1) `max` maximal_exists_depth_of_evar_in_pattern' (S depth) E ψ2 = S (maximal_exists_depth_of_evar_in_pattern' depth E ψ1 `max` maximal_exists_depth_of_evar_in_pattern' depth E ψ2)
Σ: Signature
ψ1, ψ2: Pattern
IHψ1: (E : evar) (depth : nat), E ∈ free_evars ψ1 → maximal_exists_depth_of_evar_in_pattern' (S depth) E ψ1 = S (maximal_exists_depth_of_evar_in_pattern' depth E ψ1)
IHψ2: (E : evar) (depth : nat), E ∈ free_evars ψ2 → maximal_exists_depth_of_evar_in_pattern' (S depth) E ψ2 = S (maximal_exists_depth_of_evar_in_pattern' depth E ψ2)
E: evar
depth: nat
Hin: E ∈ free_evars ψ1 ∪ free_evars ψ2
e: E ∈ free_evars ψ1
e0: E ∈ free_evars ψ2

E ∈ free_evars ψ2
Σ: Signature
ψ1, ψ2: Pattern
IHψ1: (E : evar) (depth : nat), E ∈ free_evars ψ1 → maximal_exists_depth_of_evar_in_pattern' (S depth) E ψ1 = S (maximal_exists_depth_of_evar_in_pattern' depth E ψ1)
IHψ2: (E : evar) (depth : nat), E ∈ free_evars ψ2 → maximal_exists_depth_of_evar_in_pattern' (S depth) E ψ2 = S (maximal_exists_depth_of_evar_in_pattern' depth E ψ2)
E: evar
depth: nat
Hin: E ∈ free_evars ψ1 ∪ free_evars ψ2
e: E ∈ free_evars ψ1
e0: E ∈ free_evars ψ2
S (maximal_exists_depth_of_evar_in_pattern' depth E ψ1) `max` S (maximal_exists_depth_of_evar_in_pattern' depth E ψ2) = S (maximal_exists_depth_of_evar_in_pattern' depth E ψ1 `max` maximal_exists_depth_of_evar_in_pattern' depth E ψ2)
Σ: Signature
ψ1, ψ2: Pattern
IHψ1: (E : evar) (depth : nat), E ∈ free_evars ψ1 → maximal_exists_depth_of_evar_in_pattern' (S depth) E ψ1 = S (maximal_exists_depth_of_evar_in_pattern' depth E ψ1)
IHψ2: (E : evar) (depth : nat), E ∈ free_evars ψ2 → maximal_exists_depth_of_evar_in_pattern' (S depth) E ψ2 = S (maximal_exists_depth_of_evar_in_pattern' depth E ψ2)
E: evar
depth: nat
Hin: E ∈ free_evars ψ1 ∪ free_evars ψ2
e: E ∈ free_evars ψ1
e0: E ∈ free_evars ψ2

S (maximal_exists_depth_of_evar_in_pattern' depth E ψ1) `max` S (maximal_exists_depth_of_evar_in_pattern' depth E ψ2) = S (maximal_exists_depth_of_evar_in_pattern' depth E ψ1 `max` maximal_exists_depth_of_evar_in_pattern' depth E ψ2)
Σ: Signature
ψ1, ψ2: Pattern
IHψ1: (E : evar) (depth : nat), E ∈ free_evars ψ1 → maximal_exists_depth_of_evar_in_pattern' (S depth) E ψ1 = S (maximal_exists_depth_of_evar_in_pattern' depth E ψ1)
IHψ2: (E : evar) (depth : nat), E ∈ free_evars ψ2 → maximal_exists_depth_of_evar_in_pattern' (S depth) E ψ2 = S (maximal_exists_depth_of_evar_in_pattern' depth E ψ2)
E: evar
depth: nat
Hin: E ∈ free_evars ψ1 ∪ free_evars ψ2
e: E ∈ free_evars ψ1
e0: E ∈ free_evars ψ2

S (maximal_exists_depth_of_evar_in_pattern' depth E ψ1 `max` maximal_exists_depth_of_evar_in_pattern' depth E ψ2) = S (maximal_exists_depth_of_evar_in_pattern' depth E ψ1 `max` maximal_exists_depth_of_evar_in_pattern' depth E ψ2)
reflexivity.
Σ: Signature
ψ1, ψ2: Pattern
IHψ1: (E : evar) (depth : nat), E ∈ free_evars ψ1 → maximal_exists_depth_of_evar_in_pattern' (S depth) E ψ1 = S (maximal_exists_depth_of_evar_in_pattern' depth E ψ1)
IHψ2: (E : evar) (depth : nat), E ∈ free_evars ψ2 → maximal_exists_depth_of_evar_in_pattern' (S depth) E ψ2 = S (maximal_exists_depth_of_evar_in_pattern' depth E ψ2)
E: evar
depth: nat
Hin: E ∈ free_evars ψ1 ∪ free_evars ψ2
e: E ∈ free_evars ψ1
n: E ∉ free_evars ψ2

maximal_exists_depth_of_evar_in_pattern' (S depth) E ψ1 `max` maximal_exists_depth_of_evar_in_pattern' (S depth) E ψ2 = S (maximal_exists_depth_of_evar_in_pattern' depth E ψ1 `max` maximal_exists_depth_of_evar_in_pattern' depth E ψ2)
Σ: Signature
ψ1, ψ2: Pattern
IHψ1: (E : evar) (depth : nat), E ∈ free_evars ψ1 → maximal_exists_depth_of_evar_in_pattern' (S depth) E ψ1 = S (maximal_exists_depth_of_evar_in_pattern' depth E ψ1)
IHψ2: (E : evar) (depth : nat), E ∈ free_evars ψ2 → maximal_exists_depth_of_evar_in_pattern' (S depth) E ψ2 = S (maximal_exists_depth_of_evar_in_pattern' depth E ψ2)
E: evar
depth: nat
Hin: E ∈ free_evars ψ1 ∪ free_evars ψ2
n: E ∉ free_evars ψ1
e: E ∈ free_evars ψ2
maximal_exists_depth_of_evar_in_pattern' (S depth) E ψ1 `max` maximal_exists_depth_of_evar_in_pattern' (S depth) E ψ2 = S (maximal_exists_depth_of_evar_in_pattern' depth E ψ1 `max` maximal_exists_depth_of_evar_in_pattern' depth E ψ2)
Σ: Signature
ψ1, ψ2: Pattern
IHψ1: (E : evar) (depth : nat), E ∈ free_evars ψ1 → maximal_exists_depth_of_evar_in_pattern' (S depth) E ψ1 = S (maximal_exists_depth_of_evar_in_pattern' depth E ψ1)
IHψ2: (E : evar) (depth : nat), E ∈ free_evars ψ2 → maximal_exists_depth_of_evar_in_pattern' (S depth) E ψ2 = S (maximal_exists_depth_of_evar_in_pattern' depth E ψ2)
E: evar
depth: nat
Hin: E ∈ free_evars ψ1 ∪ free_evars ψ2
n: E ∉ free_evars ψ1
n0: E ∉ free_evars ψ2
maximal_exists_depth_of_evar_in_pattern' (S depth) E ψ1 `max` maximal_exists_depth_of_evar_in_pattern' (S depth) E ψ2 = S (maximal_exists_depth_of_evar_in_pattern' depth E ψ1 `max` maximal_exists_depth_of_evar_in_pattern' depth E ψ2)
Σ: Signature
ψ1, ψ2: Pattern
IHψ1: (E : evar) (depth : nat), E ∈ free_evars ψ1 → maximal_exists_depth_of_evar_in_pattern' (S depth) E ψ1 = S (maximal_exists_depth_of_evar_in_pattern' depth E ψ1)
IHψ2: (E : evar) (depth : nat), E ∈ free_evars ψ2 → maximal_exists_depth_of_evar_in_pattern' (S depth) E ψ2 = S (maximal_exists_depth_of_evar_in_pattern' depth E ψ2)
E: evar
depth: nat
Hin: E ∈ free_evars ψ1 ∪ free_evars ψ2
e: E ∈ free_evars ψ1
n: E ∉ free_evars ψ2

maximal_exists_depth_of_evar_in_pattern' (S depth) E ψ1 `max` maximal_exists_depth_of_evar_in_pattern' (S depth) E ψ2 = S (maximal_exists_depth_of_evar_in_pattern' depth E ψ1 `max` maximal_exists_depth_of_evar_in_pattern' depth E ψ2)
Σ: Signature
ψ1, ψ2: Pattern
IHψ1: (E : evar) (depth : nat), E ∈ free_evars ψ1 → maximal_exists_depth_of_evar_in_pattern' (S depth) E ψ1 = S (maximal_exists_depth_of_evar_in_pattern' depth E ψ1)
IHψ2: (E : evar) (depth : nat), E ∈ free_evars ψ2 → maximal_exists_depth_of_evar_in_pattern' (S depth) E ψ2 = S (maximal_exists_depth_of_evar_in_pattern' depth E ψ2)
E: evar
depth: nat
Hin: E ∈ free_evars ψ1 ∪ free_evars ψ2
e: E ∈ free_evars ψ1
n: E ∉ free_evars ψ2

E ∈ free_evars ψ1
Σ: Signature
ψ1, ψ2: Pattern
IHψ1: (E : evar) (depth : nat), E ∈ free_evars ψ1 → maximal_exists_depth_of_evar_in_pattern' (S depth) E ψ1 = S (maximal_exists_depth_of_evar_in_pattern' depth E ψ1)
IHψ2: (E : evar) (depth : nat), E ∈ free_evars ψ2 → maximal_exists_depth_of_evar_in_pattern' (S depth) E ψ2 = S (maximal_exists_depth_of_evar_in_pattern' depth E ψ2)
E: evar
depth: nat
Hin: E ∈ free_evars ψ1 ∪ free_evars ψ2
e: E ∈ free_evars ψ1
n: E ∉ free_evars ψ2
S (maximal_exists_depth_of_evar_in_pattern' depth E ψ1) `max` maximal_exists_depth_of_evar_in_pattern' (S depth) E ψ2 = S (maximal_exists_depth_of_evar_in_pattern' depth E ψ1 `max` maximal_exists_depth_of_evar_in_pattern' depth E ψ2)
Σ: Signature
ψ1, ψ2: Pattern
IHψ1: (E : evar) (depth : nat), E ∈ free_evars ψ1 → maximal_exists_depth_of_evar_in_pattern' (S depth) E ψ1 = S (maximal_exists_depth_of_evar_in_pattern' depth E ψ1)
IHψ2: (E : evar) (depth : nat), E ∈ free_evars ψ2 → maximal_exists_depth_of_evar_in_pattern' (S depth) E ψ2 = S (maximal_exists_depth_of_evar_in_pattern' depth E ψ2)
E: evar
depth: nat
Hin: E ∈ free_evars ψ1 ∪ free_evars ψ2
e: E ∈ free_evars ψ1
n: E ∉ free_evars ψ2

S (maximal_exists_depth_of_evar_in_pattern' depth E ψ1) `max` maximal_exists_depth_of_evar_in_pattern' (S depth) E ψ2 = S (maximal_exists_depth_of_evar_in_pattern' depth E ψ1 `max` maximal_exists_depth_of_evar_in_pattern' depth E ψ2)
Σ: Signature
ψ1, ψ2: Pattern
IHψ1: (E : evar) (depth : nat), E ∈ free_evars ψ1 → maximal_exists_depth_of_evar_in_pattern' (S depth) E ψ1 = S (maximal_exists_depth_of_evar_in_pattern' depth E ψ1)
IHψ2: (E : evar) (depth : nat), E ∈ free_evars ψ2 → maximal_exists_depth_of_evar_in_pattern' (S depth) E ψ2 = S (maximal_exists_depth_of_evar_in_pattern' depth E ψ2)
E: evar
depth: nat
Hin: E ∈ free_evars ψ1 ∪ free_evars ψ2
e: E ∈ free_evars ψ1
n: E ∉ free_evars ψ2

E ∉ free_evars ψ2
Σ: Signature
ψ1, ψ2: Pattern
IHψ1: (E : evar) (depth : nat), E ∈ free_evars ψ1 → maximal_exists_depth_of_evar_in_pattern' (S depth) E ψ1 = S (maximal_exists_depth_of_evar_in_pattern' depth E ψ1)
IHψ2: (E : evar) (depth : nat), E ∈ free_evars ψ2 → maximal_exists_depth_of_evar_in_pattern' (S depth) E ψ2 = S (maximal_exists_depth_of_evar_in_pattern' depth E ψ2)
E: evar
depth: nat
Hin: E ∈ free_evars ψ1 ∪ free_evars ψ2
e: E ∈ free_evars ψ1
n: E ∉ free_evars ψ2
S (maximal_exists_depth_of_evar_in_pattern' depth E ψ1) `max` 0 = S (maximal_exists_depth_of_evar_in_pattern' depth E ψ1 `max` maximal_exists_depth_of_evar_in_pattern' depth E ψ2)
Σ: Signature
ψ1, ψ2: Pattern
IHψ1: (E : evar) (depth : nat), E ∈ free_evars ψ1 → maximal_exists_depth_of_evar_in_pattern' (S depth) E ψ1 = S (maximal_exists_depth_of_evar_in_pattern' depth E ψ1)
IHψ2: (E : evar) (depth : nat), E ∈ free_evars ψ2 → maximal_exists_depth_of_evar_in_pattern' (S depth) E ψ2 = S (maximal_exists_depth_of_evar_in_pattern' depth E ψ2)
E: evar
depth: nat
Hin: E ∈ free_evars ψ1 ∪ free_evars ψ2
e: E ∈ free_evars ψ1
n: E ∉ free_evars ψ2

E ∉ free_evars ψ2
assumption.
Σ: Signature
ψ1, ψ2: Pattern
IHψ1: (E : evar) (depth : nat), E ∈ free_evars ψ1 → maximal_exists_depth_of_evar_in_pattern' (S depth) E ψ1 = S (maximal_exists_depth_of_evar_in_pattern' depth E ψ1)
IHψ2: (E : evar) (depth : nat), E ∈ free_evars ψ2 → maximal_exists_depth_of_evar_in_pattern' (S depth) E ψ2 = S (maximal_exists_depth_of_evar_in_pattern' depth E ψ2)
E: evar
depth: nat
Hin: E ∈ free_evars ψ1 ∪ free_evars ψ2
e: E ∈ free_evars ψ1
n: E ∉ free_evars ψ2

S (maximal_exists_depth_of_evar_in_pattern' depth E ψ1) `max` 0 = S (maximal_exists_depth_of_evar_in_pattern' depth E ψ1 `max` maximal_exists_depth_of_evar_in_pattern' depth E ψ2)
Σ: Signature
ψ1, ψ2: Pattern
IHψ1: (E : evar) (depth : nat), E ∈ free_evars ψ1 → maximal_exists_depth_of_evar_in_pattern' (S depth) E ψ1 = S (maximal_exists_depth_of_evar_in_pattern' depth E ψ1)
IHψ2: (E : evar) (depth : nat), E ∈ free_evars ψ2 → maximal_exists_depth_of_evar_in_pattern' (S depth) E ψ2 = S (maximal_exists_depth_of_evar_in_pattern' depth E ψ2)
E: evar
depth: nat
Hin: E ∈ free_evars ψ1 ∪ free_evars ψ2
e: E ∈ free_evars ψ1
n: E ∉ free_evars ψ2

E ∉ free_evars ψ2
Σ: Signature
ψ1, ψ2: Pattern
IHψ1: (E : evar) (depth : nat), E ∈ free_evars ψ1 → maximal_exists_depth_of_evar_in_pattern' (S depth) E ψ1 = S (maximal_exists_depth_of_evar_in_pattern' depth E ψ1)
IHψ2: (E : evar) (depth : nat), E ∈ free_evars ψ2 → maximal_exists_depth_of_evar_in_pattern' (S depth) E ψ2 = S (maximal_exists_depth_of_evar_in_pattern' depth E ψ2)
E: evar
depth: nat
Hin: E ∈ free_evars ψ1 ∪ free_evars ψ2
e: E ∈ free_evars ψ1
n: E ∉ free_evars ψ2
S (maximal_exists_depth_of_evar_in_pattern' depth E ψ1) `max` 0 = S (maximal_exists_depth_of_evar_in_pattern' depth E ψ1 `max` 0)
Σ: Signature
ψ1, ψ2: Pattern
IHψ1: (E : evar) (depth : nat), E ∈ free_evars ψ1 → maximal_exists_depth_of_evar_in_pattern' (S depth) E ψ1 = S (maximal_exists_depth_of_evar_in_pattern' depth E ψ1)
IHψ2: (E : evar) (depth : nat), E ∈ free_evars ψ2 → maximal_exists_depth_of_evar_in_pattern' (S depth) E ψ2 = S (maximal_exists_depth_of_evar_in_pattern' depth E ψ2)
E: evar
depth: nat
Hin: E ∈ free_evars ψ1 ∪ free_evars ψ2
e: E ∈ free_evars ψ1
n: E ∉ free_evars ψ2

E ∉ free_evars ψ2
assumption.
Σ: Signature
ψ1, ψ2: Pattern
IHψ1: (E : evar) (depth : nat), E ∈ free_evars ψ1 → maximal_exists_depth_of_evar_in_pattern' (S depth) E ψ1 = S (maximal_exists_depth_of_evar_in_pattern' depth E ψ1)
IHψ2: (E : evar) (depth : nat), E ∈ free_evars ψ2 → maximal_exists_depth_of_evar_in_pattern' (S depth) E ψ2 = S (maximal_exists_depth_of_evar_in_pattern' depth E ψ2)
E: evar
depth: nat
Hin: E ∈ free_evars ψ1 ∪ free_evars ψ2
e: E ∈ free_evars ψ1
n: E ∉ free_evars ψ2

S (maximal_exists_depth_of_evar_in_pattern' depth E ψ1) `max` 0 = S (maximal_exists_depth_of_evar_in_pattern' depth E ψ1 `max` 0)
Σ: Signature
ψ1, ψ2: Pattern
IHψ1: (E : evar) (depth : nat), E ∈ free_evars ψ1 → maximal_exists_depth_of_evar_in_pattern' (S depth) E ψ1 = S (maximal_exists_depth_of_evar_in_pattern' depth E ψ1)
IHψ2: (E : evar) (depth : nat), E ∈ free_evars ψ2 → maximal_exists_depth_of_evar_in_pattern' (S depth) E ψ2 = S (maximal_exists_depth_of_evar_in_pattern' depth E ψ2)
E: evar
depth: nat
Hin: E ∈ free_evars ψ1 ∪ free_evars ψ2
e: E ∈ free_evars ψ1
n: E ∉ free_evars ψ2

S (maximal_exists_depth_of_evar_in_pattern' depth E ψ1) = S (maximal_exists_depth_of_evar_in_pattern' depth E ψ1 `max` 0)
Σ: Signature
ψ1, ψ2: Pattern
IHψ1: (E : evar) (depth : nat), E ∈ free_evars ψ1 → maximal_exists_depth_of_evar_in_pattern' (S depth) E ψ1 = S (maximal_exists_depth_of_evar_in_pattern' depth E ψ1)
IHψ2: (E : evar) (depth : nat), E ∈ free_evars ψ2 → maximal_exists_depth_of_evar_in_pattern' (S depth) E ψ2 = S (maximal_exists_depth_of_evar_in_pattern' depth E ψ2)
E: evar
depth: nat
Hin: E ∈ free_evars ψ1 ∪ free_evars ψ2
e: E ∈ free_evars ψ1
n: E ∉ free_evars ψ2

S (maximal_exists_depth_of_evar_in_pattern' depth E ψ1) = S (0 `max` maximal_exists_depth_of_evar_in_pattern' depth E ψ1)
Σ: Signature
ψ1, ψ2: Pattern
IHψ1: (E : evar) (depth : nat), E ∈ free_evars ψ1 → maximal_exists_depth_of_evar_in_pattern' (S depth) E ψ1 = S (maximal_exists_depth_of_evar_in_pattern' depth E ψ1)
IHψ2: (E : evar) (depth : nat), E ∈ free_evars ψ2 → maximal_exists_depth_of_evar_in_pattern' (S depth) E ψ2 = S (maximal_exists_depth_of_evar_in_pattern' depth E ψ2)
E: evar
depth: nat
Hin: E ∈ free_evars ψ1 ∪ free_evars ψ2
e: E ∈ free_evars ψ1
n: E ∉ free_evars ψ2

S (maximal_exists_depth_of_evar_in_pattern' depth E ψ1) = S (maximal_exists_depth_of_evar_in_pattern' depth E ψ1)
reflexivity.
Σ: Signature
ψ1, ψ2: Pattern
IHψ1: (E : evar) (depth : nat), E ∈ free_evars ψ1 → maximal_exists_depth_of_evar_in_pattern' (S depth) E ψ1 = S (maximal_exists_depth_of_evar_in_pattern' depth E ψ1)
IHψ2: (E : evar) (depth : nat), E ∈ free_evars ψ2 → maximal_exists_depth_of_evar_in_pattern' (S depth) E ψ2 = S (maximal_exists_depth_of_evar_in_pattern' depth E ψ2)
E: evar
depth: nat
Hin: E ∈ free_evars ψ1 ∪ free_evars ψ2
n: E ∉ free_evars ψ1
e: E ∈ free_evars ψ2

maximal_exists_depth_of_evar_in_pattern' (S depth) E ψ1 `max` maximal_exists_depth_of_evar_in_pattern' (S depth) E ψ2 = S (maximal_exists_depth_of_evar_in_pattern' depth E ψ1 `max` maximal_exists_depth_of_evar_in_pattern' depth E ψ2)
Σ: Signature
ψ1, ψ2: Pattern
IHψ1: (E : evar) (depth : nat), E ∈ free_evars ψ1 → maximal_exists_depth_of_evar_in_pattern' (S depth) E ψ1 = S (maximal_exists_depth_of_evar_in_pattern' depth E ψ1)
IHψ2: (E : evar) (depth : nat), E ∈ free_evars ψ2 → maximal_exists_depth_of_evar_in_pattern' (S depth) E ψ2 = S (maximal_exists_depth_of_evar_in_pattern' depth E ψ2)
E: evar
depth: nat
Hin: E ∈ free_evars ψ1 ∪ free_evars ψ2
n: E ∉ free_evars ψ1
n0: E ∉ free_evars ψ2
maximal_exists_depth_of_evar_in_pattern' (S depth) E ψ1 `max` maximal_exists_depth_of_evar_in_pattern' (S depth) E ψ2 = S (maximal_exists_depth_of_evar_in_pattern' depth E ψ1 `max` maximal_exists_depth_of_evar_in_pattern' depth E ψ2)
Σ: Signature
ψ1, ψ2: Pattern
IHψ1: (E : evar) (depth : nat), E ∈ free_evars ψ1 → maximal_exists_depth_of_evar_in_pattern' (S depth) E ψ1 = S (maximal_exists_depth_of_evar_in_pattern' depth E ψ1)
IHψ2: (E : evar) (depth : nat), E ∈ free_evars ψ2 → maximal_exists_depth_of_evar_in_pattern' (S depth) E ψ2 = S (maximal_exists_depth_of_evar_in_pattern' depth E ψ2)
E: evar
depth: nat
Hin: E ∈ free_evars ψ1 ∪ free_evars ψ2
n: E ∉ free_evars ψ1
e: E ∈ free_evars ψ2

maximal_exists_depth_of_evar_in_pattern' (S depth) E ψ1 `max` maximal_exists_depth_of_evar_in_pattern' (S depth) E ψ2 = S (maximal_exists_depth_of_evar_in_pattern' depth E ψ1 `max` maximal_exists_depth_of_evar_in_pattern' depth E ψ2)
Σ: Signature
ψ1, ψ2: Pattern
IHψ1: (E : evar) (depth : nat), E ∈ free_evars ψ1 → maximal_exists_depth_of_evar_in_pattern' (S depth) E ψ1 = S (maximal_exists_depth_of_evar_in_pattern' depth E ψ1)
IHψ2: (E : evar) (depth : nat), E ∈ free_evars ψ2 → maximal_exists_depth_of_evar_in_pattern' (S depth) E ψ2 = S (maximal_exists_depth_of_evar_in_pattern' depth E ψ2)
E: evar
depth: nat
Hin: E ∈ free_evars ψ1 ∪ free_evars ψ2
n: E ∉ free_evars ψ1
e: E ∈ free_evars ψ2

E ∈ free_evars ψ2
Σ: Signature
ψ1, ψ2: Pattern
IHψ1: (E : evar) (depth : nat), E ∈ free_evars ψ1 → maximal_exists_depth_of_evar_in_pattern' (S depth) E ψ1 = S (maximal_exists_depth_of_evar_in_pattern' depth E ψ1)
IHψ2: (E : evar) (depth : nat), E ∈ free_evars ψ2 → maximal_exists_depth_of_evar_in_pattern' (S depth) E ψ2 = S (maximal_exists_depth_of_evar_in_pattern' depth E ψ2)
E: evar
depth: nat
Hin: E ∈ free_evars ψ1 ∪ free_evars ψ2
n: E ∉ free_evars ψ1
e: E ∈ free_evars ψ2
maximal_exists_depth_of_evar_in_pattern' (S depth) E ψ1 `max` S (maximal_exists_depth_of_evar_in_pattern' depth E ψ2) = S (maximal_exists_depth_of_evar_in_pattern' depth E ψ1 `max` maximal_exists_depth_of_evar_in_pattern' depth E ψ2)
Σ: Signature
ψ1, ψ2: Pattern
IHψ1: (E : evar) (depth : nat), E ∈ free_evars ψ1 → maximal_exists_depth_of_evar_in_pattern' (S depth) E ψ1 = S (maximal_exists_depth_of_evar_in_pattern' depth E ψ1)
IHψ2: (E : evar) (depth : nat), E ∈ free_evars ψ2 → maximal_exists_depth_of_evar_in_pattern' (S depth) E ψ2 = S (maximal_exists_depth_of_evar_in_pattern' depth E ψ2)
E: evar
depth: nat
Hin: E ∈ free_evars ψ1 ∪ free_evars ψ2
n: E ∉ free_evars ψ1
e: E ∈ free_evars ψ2

maximal_exists_depth_of_evar_in_pattern' (S depth) E ψ1 `max` S (maximal_exists_depth_of_evar_in_pattern' depth E ψ2) = S (maximal_exists_depth_of_evar_in_pattern' depth E ψ1 `max` maximal_exists_depth_of_evar_in_pattern' depth E ψ2)
Σ: Signature
ψ1, ψ2: Pattern
IHψ1: (E : evar) (depth : nat), E ∈ free_evars ψ1 → maximal_exists_depth_of_evar_in_pattern' (S depth) E ψ1 = S (maximal_exists_depth_of_evar_in_pattern' depth E ψ1)
IHψ2: (E : evar) (depth : nat), E ∈ free_evars ψ2 → maximal_exists_depth_of_evar_in_pattern' (S depth) E ψ2 = S (maximal_exists_depth_of_evar_in_pattern' depth E ψ2)
E: evar
depth: nat
Hin: E ∈ free_evars ψ1 ∪ free_evars ψ2
n: E ∉ free_evars ψ1
e: E ∈ free_evars ψ2

E ∉ free_evars ψ1
Σ: Signature
ψ1, ψ2: Pattern
IHψ1: (E : evar) (depth : nat), E ∈ free_evars ψ1 → maximal_exists_depth_of_evar_in_pattern' (S depth) E ψ1 = S (maximal_exists_depth_of_evar_in_pattern' depth E ψ1)
IHψ2: (E : evar) (depth : nat), E ∈ free_evars ψ2 → maximal_exists_depth_of_evar_in_pattern' (S depth) E ψ2 = S (maximal_exists_depth_of_evar_in_pattern' depth E ψ2)
E: evar
depth: nat
Hin: E ∈ free_evars ψ1 ∪ free_evars ψ2
n: E ∉ free_evars ψ1
e: E ∈ free_evars ψ2
0 `max` S (maximal_exists_depth_of_evar_in_pattern' depth E ψ2) = S (maximal_exists_depth_of_evar_in_pattern' depth E ψ1 `max` maximal_exists_depth_of_evar_in_pattern' depth E ψ2)
Σ: Signature
ψ1, ψ2: Pattern
IHψ1: (E : evar) (depth : nat), E ∈ free_evars ψ1 → maximal_exists_depth_of_evar_in_pattern' (S depth) E ψ1 = S (maximal_exists_depth_of_evar_in_pattern' depth E ψ1)
IHψ2: (E : evar) (depth : nat), E ∈ free_evars ψ2 → maximal_exists_depth_of_evar_in_pattern' (S depth) E ψ2 = S (maximal_exists_depth_of_evar_in_pattern' depth E ψ2)
E: evar
depth: nat
Hin: E ∈ free_evars ψ1 ∪ free_evars ψ2
n: E ∉ free_evars ψ1
e: E ∈ free_evars ψ2

E ∉ free_evars ψ1
assumption.
Σ: Signature
ψ1, ψ2: Pattern
IHψ1: (E : evar) (depth : nat), E ∈ free_evars ψ1 → maximal_exists_depth_of_evar_in_pattern' (S depth) E ψ1 = S (maximal_exists_depth_of_evar_in_pattern' depth E ψ1)
IHψ2: (E : evar) (depth : nat), E ∈ free_evars ψ2 → maximal_exists_depth_of_evar_in_pattern' (S depth) E ψ2 = S (maximal_exists_depth_of_evar_in_pattern' depth E ψ2)
E: evar
depth: nat
Hin: E ∈ free_evars ψ1 ∪ free_evars ψ2
n: E ∉ free_evars ψ1
e: E ∈ free_evars ψ2

0 `max` S (maximal_exists_depth_of_evar_in_pattern' depth E ψ2) = S (maximal_exists_depth_of_evar_in_pattern' depth E ψ1 `max` maximal_exists_depth_of_evar_in_pattern' depth E ψ2)
Σ: Signature
ψ1, ψ2: Pattern
IHψ1: (E : evar) (depth : nat), E ∈ free_evars ψ1 → maximal_exists_depth_of_evar_in_pattern' (S depth) E ψ1 = S (maximal_exists_depth_of_evar_in_pattern' depth E ψ1)
IHψ2: (E : evar) (depth : nat), E ∈ free_evars ψ2 → maximal_exists_depth_of_evar_in_pattern' (S depth) E ψ2 = S (maximal_exists_depth_of_evar_in_pattern' depth E ψ2)
E: evar
depth: nat
Hin: E ∈ free_evars ψ1 ∪ free_evars ψ2
n: E ∉ free_evars ψ1
e: E ∈ free_evars ψ2

E ∉ free_evars ψ1
Σ: Signature
ψ1, ψ2: Pattern
IHψ1: (E : evar) (depth : nat), E ∈ free_evars ψ1 → maximal_exists_depth_of_evar_in_pattern' (S depth) E ψ1 = S (maximal_exists_depth_of_evar_in_pattern' depth E ψ1)
IHψ2: (E : evar) (depth : nat), E ∈ free_evars ψ2 → maximal_exists_depth_of_evar_in_pattern' (S depth) E ψ2 = S (maximal_exists_depth_of_evar_in_pattern' depth E ψ2)
E: evar
depth: nat
Hin: E ∈ free_evars ψ1 ∪ free_evars ψ2
n: E ∉ free_evars ψ1
e: E ∈ free_evars ψ2
0 `max` S (maximal_exists_depth_of_evar_in_pattern' depth E ψ2) = S (0 `max` maximal_exists_depth_of_evar_in_pattern' depth E ψ2)
Σ: Signature
ψ1, ψ2: Pattern
IHψ1: (E : evar) (depth : nat), E ∈ free_evars ψ1 → maximal_exists_depth_of_evar_in_pattern' (S depth) E ψ1 = S (maximal_exists_depth_of_evar_in_pattern' depth E ψ1)
IHψ2: (E : evar) (depth : nat), E ∈ free_evars ψ2 → maximal_exists_depth_of_evar_in_pattern' (S depth) E ψ2 = S (maximal_exists_depth_of_evar_in_pattern' depth E ψ2)
E: evar
depth: nat
Hin: E ∈ free_evars ψ1 ∪ free_evars ψ2
n: E ∉ free_evars ψ1
e: E ∈ free_evars ψ2

E ∉ free_evars ψ1
assumption.
Σ: Signature
ψ1, ψ2: Pattern
IHψ1: (E : evar) (depth : nat), E ∈ free_evars ψ1 → maximal_exists_depth_of_evar_in_pattern' (S depth) E ψ1 = S (maximal_exists_depth_of_evar_in_pattern' depth E ψ1)
IHψ2: (E : evar) (depth : nat), E ∈ free_evars ψ2 → maximal_exists_depth_of_evar_in_pattern' (S depth) E ψ2 = S (maximal_exists_depth_of_evar_in_pattern' depth E ψ2)
E: evar
depth: nat
Hin: E ∈ free_evars ψ1 ∪ free_evars ψ2
n: E ∉ free_evars ψ1
e: E ∈ free_evars ψ2

0 `max` S (maximal_exists_depth_of_evar_in_pattern' depth E ψ2) = S (0 `max` maximal_exists_depth_of_evar_in_pattern' depth E ψ2)
Σ: Signature
ψ1, ψ2: Pattern
IHψ1: (E : evar) (depth : nat), E ∈ free_evars ψ1 → maximal_exists_depth_of_evar_in_pattern' (S depth) E ψ1 = S (maximal_exists_depth_of_evar_in_pattern' depth E ψ1)
IHψ2: (E : evar) (depth : nat), E ∈ free_evars ψ2 → maximal_exists_depth_of_evar_in_pattern' (S depth) E ψ2 = S (maximal_exists_depth_of_evar_in_pattern' depth E ψ2)
E: evar
depth: nat
Hin: E ∈ free_evars ψ1 ∪ free_evars ψ2
n: E ∉ free_evars ψ1
e: E ∈ free_evars ψ2

S (maximal_exists_depth_of_evar_in_pattern' depth E ψ2) = S (maximal_exists_depth_of_evar_in_pattern' depth E ψ2)
reflexivity.
Σ: Signature
ψ1, ψ2: Pattern
IHψ1: (E : evar) (depth : nat), E ∈ free_evars ψ1 → maximal_exists_depth_of_evar_in_pattern' (S depth) E ψ1 = S (maximal_exists_depth_of_evar_in_pattern' depth E ψ1)
IHψ2: (E : evar) (depth : nat), E ∈ free_evars ψ2 → maximal_exists_depth_of_evar_in_pattern' (S depth) E ψ2 = S (maximal_exists_depth_of_evar_in_pattern' depth E ψ2)
E: evar
depth: nat
Hin: E ∈ free_evars ψ1 ∪ free_evars ψ2
n: E ∉ free_evars ψ1
n0: E ∉ free_evars ψ2

maximal_exists_depth_of_evar_in_pattern' (S depth) E ψ1 `max` maximal_exists_depth_of_evar_in_pattern' (S depth) E ψ2 = S (maximal_exists_depth_of_evar_in_pattern' depth E ψ1 `max` maximal_exists_depth_of_evar_in_pattern' depth E ψ2)
Σ: Signature
ψ1, ψ2: Pattern
IHψ1: (E : evar) (depth : nat), E ∈ free_evars ψ1 → maximal_exists_depth_of_evar_in_pattern' (S depth) E ψ1 = S (maximal_exists_depth_of_evar_in_pattern' depth E ψ1)
IHψ2: (E : evar) (depth : nat), E ∈ free_evars ψ2 → maximal_exists_depth_of_evar_in_pattern' (S depth) E ψ2 = S (maximal_exists_depth_of_evar_in_pattern' depth E ψ2)
E: evar
depth: nat
Hin: E ∈ free_evars ψ1 ∪ free_evars ψ2
n: E ∉ free_evars ψ1
n0: E ∉ free_evars ψ2

maximal_exists_depth_of_evar_in_pattern' (S depth) E ψ1 `max` maximal_exists_depth_of_evar_in_pattern' (S depth) E ψ2 = S (maximal_exists_depth_of_evar_in_pattern' depth E ψ1 `max` maximal_exists_depth_of_evar_in_pattern' depth E ψ2)
Σ: Signature
ψ1, ψ2: Pattern
IHψ1: (E : evar) (depth : nat), E ∈ free_evars ψ1 → maximal_exists_depth_of_evar_in_pattern' (S depth) E ψ1 = S (maximal_exists_depth_of_evar_in_pattern' depth E ψ1)
IHψ2: (E : evar) (depth : nat), E ∈ free_evars ψ2 → maximal_exists_depth_of_evar_in_pattern' (S depth) E ψ2 = S (maximal_exists_depth_of_evar_in_pattern' depth E ψ2)
E: evar
depth: nat
Hin: E ∈ free_evars ψ1 ∪ free_evars ψ2
n: E ∉ free_evars ψ1
n0: E ∉ free_evars ψ2

False
set_solver. }
Σ: Signature
E: evar
depth: nat
Hin: E ∈ ∅

0 = 1
Σ: Signature
ψ1, ψ2: Pattern
IHψ1: (E : evar) (depth : nat), E ∈ free_evars ψ1 → maximal_exists_depth_of_evar_in_pattern' (S depth) E ψ1 = S (maximal_exists_depth_of_evar_in_pattern' depth E ψ1)
IHψ2: (E : evar) (depth : nat), E ∈ free_evars ψ2 → maximal_exists_depth_of_evar_in_pattern' (S depth) E ψ2 = S (maximal_exists_depth_of_evar_in_pattern' depth E ψ2)
E: evar
depth: nat
Hin: E ∈ free_evars ψ1 ∪ free_evars ψ2
maximal_exists_depth_of_evar_in_pattern' (S depth) E ψ1 `max` maximal_exists_depth_of_evar_in_pattern' (S depth) E ψ2 = S (maximal_exists_depth_of_evar_in_pattern' depth E ψ1 `max` maximal_exists_depth_of_evar_in_pattern' depth E ψ2)
Σ: Signature
ψ: Pattern
IHψ: (E : evar) (depth : nat), E ∈ free_evars ψ → maximal_exists_depth_of_evar_in_pattern' (S depth) E ψ = S (maximal_exists_depth_of_evar_in_pattern' depth E ψ)
E: evar
depth: nat
Hin: E ∈ free_evars ψ
maximal_exists_depth_of_evar_in_pattern' (S (S depth)) E ψ = S (maximal_exists_depth_of_evar_in_pattern' (S depth) E ψ)
Σ: Signature
ψ: Pattern
IHψ: (E : evar) (depth : nat), E ∈ free_evars ψ → maximal_exists_depth_of_evar_in_pattern' (S depth) E ψ = S (maximal_exists_depth_of_evar_in_pattern' depth E ψ)
E: evar
depth: nat
Hin: E ∈ free_evars ψ
maximal_exists_depth_of_evar_in_pattern' (S depth) E ψ = S (maximal_exists_depth_of_evar_in_pattern' depth E ψ)
Σ: Signature
E: evar
depth: nat
Hin: E ∈ ∅

0 = 1
set_solver.
Σ: Signature
ψ1, ψ2: Pattern
IHψ1: (E : evar) (depth : nat), E ∈ free_evars ψ1 → maximal_exists_depth_of_evar_in_pattern' (S depth) E ψ1 = S (maximal_exists_depth_of_evar_in_pattern' depth E ψ1)
IHψ2: (E : evar) (depth : nat), E ∈ free_evars ψ2 → maximal_exists_depth_of_evar_in_pattern' (S depth) E ψ2 = S (maximal_exists_depth_of_evar_in_pattern' depth E ψ2)
E: evar
depth: nat
Hin: E ∈ free_evars ψ1 ∪ free_evars ψ2

maximal_exists_depth_of_evar_in_pattern' (S depth) E ψ1 `max` maximal_exists_depth_of_evar_in_pattern' (S depth) E ψ2 = S (maximal_exists_depth_of_evar_in_pattern' depth E ψ1 `max` maximal_exists_depth_of_evar_in_pattern' depth E ψ2)
Σ: Signature
ψ: Pattern
IHψ: (E : evar) (depth : nat), E ∈ free_evars ψ → maximal_exists_depth_of_evar_in_pattern' (S depth) E ψ = S (maximal_exists_depth_of_evar_in_pattern' depth E ψ)
E: evar
depth: nat
Hin: E ∈ free_evars ψ
maximal_exists_depth_of_evar_in_pattern' (S (S depth)) E ψ = S (maximal_exists_depth_of_evar_in_pattern' (S depth) E ψ)
Σ: Signature
ψ: Pattern
IHψ: (E : evar) (depth : nat), E ∈ free_evars ψ → maximal_exists_depth_of_evar_in_pattern' (S depth) E ψ = S (maximal_exists_depth_of_evar_in_pattern' depth E ψ)
E: evar
depth: nat
Hin: E ∈ free_evars ψ
maximal_exists_depth_of_evar_in_pattern' (S depth) E ψ = S (maximal_exists_depth_of_evar_in_pattern' depth E ψ)
Σ: Signature
ψ1, ψ2: Pattern
IHψ1: (E : evar) (depth : nat), E ∈ free_evars ψ1 → maximal_exists_depth_of_evar_in_pattern' (S depth) E ψ1 = S (maximal_exists_depth_of_evar_in_pattern' depth E ψ1)
IHψ2: (E : evar) (depth : nat), E ∈ free_evars ψ2 → maximal_exists_depth_of_evar_in_pattern' (S depth) E ψ2 = S (maximal_exists_depth_of_evar_in_pattern' depth E ψ2)
E: evar
depth: nat
Hin: E ∈ free_evars ψ1 ∪ free_evars ψ2

maximal_exists_depth_of_evar_in_pattern' (S depth) E ψ1 `max` maximal_exists_depth_of_evar_in_pattern' (S depth) E ψ2 = S (maximal_exists_depth_of_evar_in_pattern' depth E ψ1 `max` maximal_exists_depth_of_evar_in_pattern' depth E ψ2)
Σ: Signature
ψ1, ψ2: Pattern
IHψ1: (E : evar) (depth : nat), E ∈ free_evars ψ1 → maximal_exists_depth_of_evar_in_pattern' (S depth) E ψ1 = S (maximal_exists_depth_of_evar_in_pattern' depth E ψ1)
IHψ2: (E : evar) (depth : nat), E ∈ free_evars ψ2 → maximal_exists_depth_of_evar_in_pattern' (S depth) E ψ2 = S (maximal_exists_depth_of_evar_in_pattern' depth E ψ2)
E: evar
depth: nat
Hin: E ∈ free_evars ψ1 ∪ free_evars ψ2
e: E ∈ free_evars ψ1
e0: E ∈ free_evars ψ2

maximal_exists_depth_of_evar_in_pattern' (S depth) E ψ1 `max` maximal_exists_depth_of_evar_in_pattern' (S depth) E ψ2 = S (maximal_exists_depth_of_evar_in_pattern' depth E ψ1 `max` maximal_exists_depth_of_evar_in_pattern' depth E ψ2)
Σ: Signature
ψ1, ψ2: Pattern
IHψ1: (E : evar) (depth : nat), E ∈ free_evars ψ1 → maximal_exists_depth_of_evar_in_pattern' (S depth) E ψ1 = S (maximal_exists_depth_of_evar_in_pattern' depth E ψ1)
IHψ2: (E : evar) (depth : nat), E ∈ free_evars ψ2 → maximal_exists_depth_of_evar_in_pattern' (S depth) E ψ2 = S (maximal_exists_depth_of_evar_in_pattern' depth E ψ2)
E: evar
depth: nat
Hin: E ∈ free_evars ψ1 ∪ free_evars ψ2
e: E ∈ free_evars ψ1
n: E ∉ free_evars ψ2
maximal_exists_depth_of_evar_in_pattern' (S depth) E ψ1 `max` maximal_exists_depth_of_evar_in_pattern' (S depth) E ψ2 = S (maximal_exists_depth_of_evar_in_pattern' depth E ψ1 `max` maximal_exists_depth_of_evar_in_pattern' depth E ψ2)
Σ: Signature
ψ1, ψ2: Pattern
IHψ1: (E : evar) (depth : nat), E ∈ free_evars ψ1 → maximal_exists_depth_of_evar_in_pattern' (S depth) E ψ1 = S (maximal_exists_depth_of_evar_in_pattern' depth E ψ1)
IHψ2: (E : evar) (depth : nat), E ∈ free_evars ψ2 → maximal_exists_depth_of_evar_in_pattern' (S depth) E ψ2 = S (maximal_exists_depth_of_evar_in_pattern' depth E ψ2)
E: evar
depth: nat
Hin: E ∈ free_evars ψ1 ∪ free_evars ψ2
n: E ∉ free_evars ψ1
e: E ∈ free_evars ψ2
maximal_exists_depth_of_evar_in_pattern' (S depth) E ψ1 `max` maximal_exists_depth_of_evar_in_pattern' (S depth) E ψ2 = S (maximal_exists_depth_of_evar_in_pattern' depth E ψ1 `max` maximal_exists_depth_of_evar_in_pattern' depth E ψ2)
Σ: Signature
ψ1, ψ2: Pattern
IHψ1: (E : evar) (depth : nat), E ∈ free_evars ψ1 → maximal_exists_depth_of_evar_in_pattern' (S depth) E ψ1 = S (maximal_exists_depth_of_evar_in_pattern' depth E ψ1)
IHψ2: (E : evar) (depth : nat), E ∈ free_evars ψ2 → maximal_exists_depth_of_evar_in_pattern' (S depth) E ψ2 = S (maximal_exists_depth_of_evar_in_pattern' depth E ψ2)
E: evar
depth: nat
Hin: E ∈ free_evars ψ1 ∪ free_evars ψ2
n: E ∉ free_evars ψ1
n0: E ∉ free_evars ψ2
maximal_exists_depth_of_evar_in_pattern' (S depth) E ψ1 `max` maximal_exists_depth_of_evar_in_pattern' (S depth) E ψ2 = S (maximal_exists_depth_of_evar_in_pattern' depth E ψ1 `max` maximal_exists_depth_of_evar_in_pattern' depth E ψ2)
Σ: Signature
ψ1, ψ2: Pattern
IHψ1: (E : evar) (depth : nat), E ∈ free_evars ψ1 → maximal_exists_depth_of_evar_in_pattern' (S depth) E ψ1 = S (maximal_exists_depth_of_evar_in_pattern' depth E ψ1)
IHψ2: (E : evar) (depth : nat), E ∈ free_evars ψ2 → maximal_exists_depth_of_evar_in_pattern' (S depth) E ψ2 = S (maximal_exists_depth_of_evar_in_pattern' depth E ψ2)
E: evar
depth: nat
Hin: E ∈ free_evars ψ1 ∪ free_evars ψ2
e: E ∈ free_evars ψ1
e0: E ∈ free_evars ψ2

maximal_exists_depth_of_evar_in_pattern' (S depth) E ψ1 `max` maximal_exists_depth_of_evar_in_pattern' (S depth) E ψ2 = S (maximal_exists_depth_of_evar_in_pattern' depth E ψ1 `max` maximal_exists_depth_of_evar_in_pattern' depth E ψ2)
Σ: Signature
ψ1, ψ2: Pattern
IHψ1: (E : evar) (depth : nat), E ∈ free_evars ψ1 → maximal_exists_depth_of_evar_in_pattern' (S depth) E ψ1 = S (maximal_exists_depth_of_evar_in_pattern' depth E ψ1)
IHψ2: (E : evar) (depth : nat), E ∈ free_evars ψ2 → maximal_exists_depth_of_evar_in_pattern' (S depth) E ψ2 = S (maximal_exists_depth_of_evar_in_pattern' depth E ψ2)
E: evar
depth: nat
Hin: E ∈ free_evars ψ1 ∪ free_evars ψ2
e: E ∈ free_evars ψ1
e0: E ∈ free_evars ψ2

E ∈ free_evars ψ1
Σ: Signature
ψ1, ψ2: Pattern
IHψ1: (E : evar) (depth : nat), E ∈ free_evars ψ1 → maximal_exists_depth_of_evar_in_pattern' (S depth) E ψ1 = S (maximal_exists_depth_of_evar_in_pattern' depth E ψ1)
IHψ2: (E : evar) (depth : nat), E ∈ free_evars ψ2 → maximal_exists_depth_of_evar_in_pattern' (S depth) E ψ2 = S (maximal_exists_depth_of_evar_in_pattern' depth E ψ2)
E: evar
depth: nat
Hin: E ∈ free_evars ψ1 ∪ free_evars ψ2
e: E ∈ free_evars ψ1
e0: E ∈ free_evars ψ2
S (maximal_exists_depth_of_evar_in_pattern' depth E ψ1) `max` maximal_exists_depth_of_evar_in_pattern' (S depth) E ψ2 = S (maximal_exists_depth_of_evar_in_pattern' depth E ψ1 `max` maximal_exists_depth_of_evar_in_pattern' depth E ψ2)
Σ: Signature
ψ1, ψ2: Pattern
IHψ1: (E : evar) (depth : nat), E ∈ free_evars ψ1 → maximal_exists_depth_of_evar_in_pattern' (S depth) E ψ1 = S (maximal_exists_depth_of_evar_in_pattern' depth E ψ1)
IHψ2: (E : evar) (depth : nat), E ∈ free_evars ψ2 → maximal_exists_depth_of_evar_in_pattern' (S depth) E ψ2 = S (maximal_exists_depth_of_evar_in_pattern' depth E ψ2)
E: evar
depth: nat
Hin: E ∈ free_evars ψ1 ∪ free_evars ψ2
e: E ∈ free_evars ψ1
e0: E ∈ free_evars ψ2

S (maximal_exists_depth_of_evar_in_pattern' depth E ψ1) `max` maximal_exists_depth_of_evar_in_pattern' (S depth) E ψ2 = S (maximal_exists_depth_of_evar_in_pattern' depth E ψ1 `max` maximal_exists_depth_of_evar_in_pattern' depth E ψ2)
Σ: Signature
ψ1, ψ2: Pattern
IHψ1: (E : evar) (depth : nat), E ∈ free_evars ψ1 → maximal_exists_depth_of_evar_in_pattern' (S depth) E ψ1 = S (maximal_exists_depth_of_evar_in_pattern' depth E ψ1)
IHψ2: (E : evar) (depth : nat), E ∈ free_evars ψ2 → maximal_exists_depth_of_evar_in_pattern' (S depth) E ψ2 = S (maximal_exists_depth_of_evar_in_pattern' depth E ψ2)
E: evar
depth: nat
Hin: E ∈ free_evars ψ1 ∪ free_evars ψ2
e: E ∈ free_evars ψ1
e0: E ∈ free_evars ψ2

E ∈ free_evars ψ2
Σ: Signature
ψ1, ψ2: Pattern
IHψ1: (E : evar) (depth : nat), E ∈ free_evars ψ1 → maximal_exists_depth_of_evar_in_pattern' (S depth) E ψ1 = S (maximal_exists_depth_of_evar_in_pattern' depth E ψ1)
IHψ2: (E : evar) (depth : nat), E ∈ free_evars ψ2 → maximal_exists_depth_of_evar_in_pattern' (S depth) E ψ2 = S (maximal_exists_depth_of_evar_in_pattern' depth E ψ2)
E: evar
depth: nat
Hin: E ∈ free_evars ψ1 ∪ free_evars ψ2
e: E ∈ free_evars ψ1
e0: E ∈ free_evars ψ2
S (maximal_exists_depth_of_evar_in_pattern' depth E ψ1) `max` S (maximal_exists_depth_of_evar_in_pattern' depth E ψ2) = S (maximal_exists_depth_of_evar_in_pattern' depth E ψ1 `max` maximal_exists_depth_of_evar_in_pattern' depth E ψ2)
Σ: Signature
ψ1, ψ2: Pattern
IHψ1: (E : evar) (depth : nat), E ∈ free_evars ψ1 → maximal_exists_depth_of_evar_in_pattern' (S depth) E ψ1 = S (maximal_exists_depth_of_evar_in_pattern' depth E ψ1)
IHψ2: (E : evar) (depth : nat), E ∈ free_evars ψ2 → maximal_exists_depth_of_evar_in_pattern' (S depth) E ψ2 = S (maximal_exists_depth_of_evar_in_pattern' depth E ψ2)
E: evar
depth: nat
Hin: E ∈ free_evars ψ1 ∪ free_evars ψ2
e: E ∈ free_evars ψ1
e0: E ∈ free_evars ψ2

S (maximal_exists_depth_of_evar_in_pattern' depth E ψ1) `max` S (maximal_exists_depth_of_evar_in_pattern' depth E ψ2) = S (maximal_exists_depth_of_evar_in_pattern' depth E ψ1 `max` maximal_exists_depth_of_evar_in_pattern' depth E ψ2)
Σ: Signature
ψ1, ψ2: Pattern
IHψ1: (E : evar) (depth : nat), E ∈ free_evars ψ1 → maximal_exists_depth_of_evar_in_pattern' (S depth) E ψ1 = S (maximal_exists_depth_of_evar_in_pattern' depth E ψ1)
IHψ2: (E : evar) (depth : nat), E ∈ free_evars ψ2 → maximal_exists_depth_of_evar_in_pattern' (S depth) E ψ2 = S (maximal_exists_depth_of_evar_in_pattern' depth E ψ2)
E: evar
depth: nat
Hin: E ∈ free_evars ψ1 ∪ free_evars ψ2
e: E ∈ free_evars ψ1
e0: E ∈ free_evars ψ2

S (maximal_exists_depth_of_evar_in_pattern' depth E ψ1 `max` maximal_exists_depth_of_evar_in_pattern' depth E ψ2) = S (maximal_exists_depth_of_evar_in_pattern' depth E ψ1 `max` maximal_exists_depth_of_evar_in_pattern' depth E ψ2)
reflexivity.
Σ: Signature
ψ1, ψ2: Pattern
IHψ1: (E : evar) (depth : nat), E ∈ free_evars ψ1 → maximal_exists_depth_of_evar_in_pattern' (S depth) E ψ1 = S (maximal_exists_depth_of_evar_in_pattern' depth E ψ1)
IHψ2: (E : evar) (depth : nat), E ∈ free_evars ψ2 → maximal_exists_depth_of_evar_in_pattern' (S depth) E ψ2 = S (maximal_exists_depth_of_evar_in_pattern' depth E ψ2)
E: evar
depth: nat
Hin: E ∈ free_evars ψ1 ∪ free_evars ψ2
e: E ∈ free_evars ψ1
n: E ∉ free_evars ψ2

maximal_exists_depth_of_evar_in_pattern' (S depth) E ψ1 `max` maximal_exists_depth_of_evar_in_pattern' (S depth) E ψ2 = S (maximal_exists_depth_of_evar_in_pattern' depth E ψ1 `max` maximal_exists_depth_of_evar_in_pattern' depth E ψ2)
Σ: Signature
ψ1, ψ2: Pattern
IHψ1: (E : evar) (depth : nat), E ∈ free_evars ψ1 → maximal_exists_depth_of_evar_in_pattern' (S depth) E ψ1 = S (maximal_exists_depth_of_evar_in_pattern' depth E ψ1)
IHψ2: (E : evar) (depth : nat), E ∈ free_evars ψ2 → maximal_exists_depth_of_evar_in_pattern' (S depth) E ψ2 = S (maximal_exists_depth_of_evar_in_pattern' depth E ψ2)
E: evar
depth: nat
Hin: E ∈ free_evars ψ1 ∪ free_evars ψ2
n: E ∉ free_evars ψ1
e: E ∈ free_evars ψ2
maximal_exists_depth_of_evar_in_pattern' (S depth) E ψ1 `max` maximal_exists_depth_of_evar_in_pattern' (S depth) E ψ2 = S (maximal_exists_depth_of_evar_in_pattern' depth E ψ1 `max` maximal_exists_depth_of_evar_in_pattern' depth E ψ2)
Σ: Signature
ψ1, ψ2: Pattern
IHψ1: (E : evar) (depth : nat), E ∈ free_evars ψ1 → maximal_exists_depth_of_evar_in_pattern' (S depth) E ψ1 = S (maximal_exists_depth_of_evar_in_pattern' depth E ψ1)
IHψ2: (E : evar) (depth : nat), E ∈ free_evars ψ2 → maximal_exists_depth_of_evar_in_pattern' (S depth) E ψ2 = S (maximal_exists_depth_of_evar_in_pattern' depth E ψ2)
E: evar
depth: nat
Hin: E ∈ free_evars ψ1 ∪ free_evars ψ2
n: E ∉ free_evars ψ1
n0: E ∉ free_evars ψ2
maximal_exists_depth_of_evar_in_pattern' (S depth) E ψ1 `max` maximal_exists_depth_of_evar_in_pattern' (S depth) E ψ2 = S (maximal_exists_depth_of_evar_in_pattern' depth E ψ1 `max` maximal_exists_depth_of_evar_in_pattern' depth E ψ2)
Σ: Signature
ψ1, ψ2: Pattern
IHψ1: (E : evar) (depth : nat), E ∈ free_evars ψ1 → maximal_exists_depth_of_evar_in_pattern' (S depth) E ψ1 = S (maximal_exists_depth_of_evar_in_pattern' depth E ψ1)
IHψ2: (E : evar) (depth : nat), E ∈ free_evars ψ2 → maximal_exists_depth_of_evar_in_pattern' (S depth) E ψ2 = S (maximal_exists_depth_of_evar_in_pattern' depth E ψ2)
E: evar
depth: nat
Hin: E ∈ free_evars ψ1 ∪ free_evars ψ2
e: E ∈ free_evars ψ1
n: E ∉ free_evars ψ2

maximal_exists_depth_of_evar_in_pattern' (S depth) E ψ1 `max` maximal_exists_depth_of_evar_in_pattern' (S depth) E ψ2 = S (maximal_exists_depth_of_evar_in_pattern' depth E ψ1 `max` maximal_exists_depth_of_evar_in_pattern' depth E ψ2)
Σ: Signature
ψ1, ψ2: Pattern
IHψ1: (E : evar) (depth : nat), E ∈ free_evars ψ1 → maximal_exists_depth_of_evar_in_pattern' (S depth) E ψ1 = S (maximal_exists_depth_of_evar_in_pattern' depth E ψ1)
IHψ2: (E : evar) (depth : nat), E ∈ free_evars ψ2 → maximal_exists_depth_of_evar_in_pattern' (S depth) E ψ2 = S (maximal_exists_depth_of_evar_in_pattern' depth E ψ2)
E: evar
depth: nat
Hin: E ∈ free_evars ψ1 ∪ free_evars ψ2
e: E ∈ free_evars ψ1
n: E ∉ free_evars ψ2

E ∈ free_evars ψ1
Σ: Signature
ψ1, ψ2: Pattern
IHψ1: (E : evar) (depth : nat), E ∈ free_evars ψ1 → maximal_exists_depth_of_evar_in_pattern' (S depth) E ψ1 = S (maximal_exists_depth_of_evar_in_pattern' depth E ψ1)
IHψ2: (E : evar) (depth : nat), E ∈ free_evars ψ2 → maximal_exists_depth_of_evar_in_pattern' (S depth) E ψ2 = S (maximal_exists_depth_of_evar_in_pattern' depth E ψ2)
E: evar
depth: nat
Hin: E ∈ free_evars ψ1 ∪ free_evars ψ2
e: E ∈ free_evars ψ1
n: E ∉ free_evars ψ2
S (maximal_exists_depth_of_evar_in_pattern' depth E ψ1) `max` maximal_exists_depth_of_evar_in_pattern' (S depth) E ψ2 = S (maximal_exists_depth_of_evar_in_pattern' depth E ψ1 `max` maximal_exists_depth_of_evar_in_pattern' depth E ψ2)
Σ: Signature
ψ1, ψ2: Pattern
IHψ1: (E : evar) (depth : nat), E ∈ free_evars ψ1 → maximal_exists_depth_of_evar_in_pattern' (S depth) E ψ1 = S (maximal_exists_depth_of_evar_in_pattern' depth E ψ1)
IHψ2: (E : evar) (depth : nat), E ∈ free_evars ψ2 → maximal_exists_depth_of_evar_in_pattern' (S depth) E ψ2 = S (maximal_exists_depth_of_evar_in_pattern' depth E ψ2)
E: evar
depth: nat
Hin: E ∈ free_evars ψ1 ∪ free_evars ψ2
e: E ∈ free_evars ψ1
n: E ∉ free_evars ψ2

S (maximal_exists_depth_of_evar_in_pattern' depth E ψ1) `max` maximal_exists_depth_of_evar_in_pattern' (S depth) E ψ2 = S (maximal_exists_depth_of_evar_in_pattern' depth E ψ1 `max` maximal_exists_depth_of_evar_in_pattern' depth E ψ2)
Σ: Signature
ψ1, ψ2: Pattern
IHψ1: (E : evar) (depth : nat), E ∈ free_evars ψ1 → maximal_exists_depth_of_evar_in_pattern' (S depth) E ψ1 = S (maximal_exists_depth_of_evar_in_pattern' depth E ψ1)
IHψ2: (E : evar) (depth : nat), E ∈ free_evars ψ2 → maximal_exists_depth_of_evar_in_pattern' (S depth) E ψ2 = S (maximal_exists_depth_of_evar_in_pattern' depth E ψ2)
E: evar
depth: nat
Hin: E ∈ free_evars ψ1 ∪ free_evars ψ2
e: E ∈ free_evars ψ1
n: E ∉ free_evars ψ2

E ∉ free_evars ψ2
Σ: Signature
ψ1, ψ2: Pattern
IHψ1: (E : evar) (depth : nat), E ∈ free_evars ψ1 → maximal_exists_depth_of_evar_in_pattern' (S depth) E ψ1 = S (maximal_exists_depth_of_evar_in_pattern' depth E ψ1)
IHψ2: (E : evar) (depth : nat), E ∈ free_evars ψ2 → maximal_exists_depth_of_evar_in_pattern' (S depth) E ψ2 = S (maximal_exists_depth_of_evar_in_pattern' depth E ψ2)
E: evar
depth: nat
Hin: E ∈ free_evars ψ1 ∪ free_evars ψ2
e: E ∈ free_evars ψ1
n: E ∉ free_evars ψ2
S (maximal_exists_depth_of_evar_in_pattern' depth E ψ1) `max` 0 = S (maximal_exists_depth_of_evar_in_pattern' depth E ψ1 `max` maximal_exists_depth_of_evar_in_pattern' depth E ψ2)
Σ: Signature
ψ1, ψ2: Pattern
IHψ1: (E : evar) (depth : nat), E ∈ free_evars ψ1 → maximal_exists_depth_of_evar_in_pattern' (S depth) E ψ1 = S (maximal_exists_depth_of_evar_in_pattern' depth E ψ1)
IHψ2: (E : evar) (depth : nat), E ∈ free_evars ψ2 → maximal_exists_depth_of_evar_in_pattern' (S depth) E ψ2 = S (maximal_exists_depth_of_evar_in_pattern' depth E ψ2)
E: evar
depth: nat
Hin: E ∈ free_evars ψ1 ∪ free_evars ψ2
e: E ∈ free_evars ψ1
n: E ∉ free_evars ψ2

E ∉ free_evars ψ2
assumption.
Σ: Signature
ψ1, ψ2: Pattern
IHψ1: (E : evar) (depth : nat), E ∈ free_evars ψ1 → maximal_exists_depth_of_evar_in_pattern' (S depth) E ψ1 = S (maximal_exists_depth_of_evar_in_pattern' depth E ψ1)
IHψ2: (E : evar) (depth : nat), E ∈ free_evars ψ2 → maximal_exists_depth_of_evar_in_pattern' (S depth) E ψ2 = S (maximal_exists_depth_of_evar_in_pattern' depth E ψ2)
E: evar
depth: nat
Hin: E ∈ free_evars ψ1 ∪ free_evars ψ2
e: E ∈ free_evars ψ1
n: E ∉ free_evars ψ2

S (maximal_exists_depth_of_evar_in_pattern' depth E ψ1) `max` 0 = S (maximal_exists_depth_of_evar_in_pattern' depth E ψ1 `max` maximal_exists_depth_of_evar_in_pattern' depth E ψ2)
Σ: Signature
ψ1, ψ2: Pattern
IHψ1: (E : evar) (depth : nat), E ∈ free_evars ψ1 → maximal_exists_depth_of_evar_in_pattern' (S depth) E ψ1 = S (maximal_exists_depth_of_evar_in_pattern' depth E ψ1)
IHψ2: (E : evar) (depth : nat), E ∈ free_evars ψ2 → maximal_exists_depth_of_evar_in_pattern' (S depth) E ψ2 = S (maximal_exists_depth_of_evar_in_pattern' depth E ψ2)
E: evar
depth: nat
Hin: E ∈ free_evars ψ1 ∪ free_evars ψ2
e: E ∈ free_evars ψ1
n: E ∉ free_evars ψ2

E ∉ free_evars ψ2
Σ: Signature
ψ1, ψ2: Pattern
IHψ1: (E : evar) (depth : nat), E ∈ free_evars ψ1 → maximal_exists_depth_of_evar_in_pattern' (S depth) E ψ1 = S (maximal_exists_depth_of_evar_in_pattern' depth E ψ1)
IHψ2: (E : evar) (depth : nat), E ∈ free_evars ψ2 → maximal_exists_depth_of_evar_in_pattern' (S depth) E ψ2 = S (maximal_exists_depth_of_evar_in_pattern' depth E ψ2)
E: evar
depth: nat
Hin: E ∈ free_evars ψ1 ∪ free_evars ψ2
e: E ∈ free_evars ψ1
n: E ∉ free_evars ψ2
S (maximal_exists_depth_of_evar_in_pattern' depth E ψ1) `max` 0 = S (maximal_exists_depth_of_evar_in_pattern' depth E ψ1 `max` 0)
Σ: Signature
ψ1, ψ2: Pattern
IHψ1: (E : evar) (depth : nat), E ∈ free_evars ψ1 → maximal_exists_depth_of_evar_in_pattern' (S depth) E ψ1 = S (maximal_exists_depth_of_evar_in_pattern' depth E ψ1)
IHψ2: (E : evar) (depth : nat), E ∈ free_evars ψ2 → maximal_exists_depth_of_evar_in_pattern' (S depth) E ψ2 = S (maximal_exists_depth_of_evar_in_pattern' depth E ψ2)
E: evar
depth: nat
Hin: E ∈ free_evars ψ1 ∪ free_evars ψ2
e: E ∈ free_evars ψ1
n: E ∉ free_evars ψ2

E ∉ free_evars ψ2
assumption.
Σ: Signature
ψ1, ψ2: Pattern
IHψ1: (E : evar) (depth : nat), E ∈ free_evars ψ1 → maximal_exists_depth_of_evar_in_pattern' (S depth) E ψ1 = S (maximal_exists_depth_of_evar_in_pattern' depth E ψ1)
IHψ2: (E : evar) (depth : nat), E ∈ free_evars ψ2 → maximal_exists_depth_of_evar_in_pattern' (S depth) E ψ2 = S (maximal_exists_depth_of_evar_in_pattern' depth E ψ2)
E: evar
depth: nat
Hin: E ∈ free_evars ψ1 ∪ free_evars ψ2
e: E ∈ free_evars ψ1
n: E ∉ free_evars ψ2

S (maximal_exists_depth_of_evar_in_pattern' depth E ψ1) `max` 0 = S (maximal_exists_depth_of_evar_in_pattern' depth E ψ1 `max` 0)
Σ: Signature
ψ1, ψ2: Pattern
IHψ1: (E : evar) (depth : nat), E ∈ free_evars ψ1 → maximal_exists_depth_of_evar_in_pattern' (S depth) E ψ1 = S (maximal_exists_depth_of_evar_in_pattern' depth E ψ1)
IHψ2: (E : evar) (depth : nat), E ∈ free_evars ψ2 → maximal_exists_depth_of_evar_in_pattern' (S depth) E ψ2 = S (maximal_exists_depth_of_evar_in_pattern' depth E ψ2)
E: evar
depth: nat
Hin: E ∈ free_evars ψ1 ∪ free_evars ψ2
e: E ∈ free_evars ψ1
n: E ∉ free_evars ψ2

S (maximal_exists_depth_of_evar_in_pattern' depth E ψ1) = S (maximal_exists_depth_of_evar_in_pattern' depth E ψ1 `max` 0)
Σ: Signature
ψ1, ψ2: Pattern
IHψ1: (E : evar) (depth : nat), E ∈ free_evars ψ1 → maximal_exists_depth_of_evar_in_pattern' (S depth) E ψ1 = S (maximal_exists_depth_of_evar_in_pattern' depth E ψ1)
IHψ2: (E : evar) (depth : nat), E ∈ free_evars ψ2 → maximal_exists_depth_of_evar_in_pattern' (S depth) E ψ2 = S (maximal_exists_depth_of_evar_in_pattern' depth E ψ2)
E: evar
depth: nat
Hin: E ∈ free_evars ψ1 ∪ free_evars ψ2
e: E ∈ free_evars ψ1
n: E ∉ free_evars ψ2

S (maximal_exists_depth_of_evar_in_pattern' depth E ψ1) = S (0 `max` maximal_exists_depth_of_evar_in_pattern' depth E ψ1)
Σ: Signature
ψ1, ψ2: Pattern
IHψ1: (E : evar) (depth : nat), E ∈ free_evars ψ1 → maximal_exists_depth_of_evar_in_pattern' (S depth) E ψ1 = S (maximal_exists_depth_of_evar_in_pattern' depth E ψ1)
IHψ2: (E : evar) (depth : nat), E ∈ free_evars ψ2 → maximal_exists_depth_of_evar_in_pattern' (S depth) E ψ2 = S (maximal_exists_depth_of_evar_in_pattern' depth E ψ2)
E: evar
depth: nat
Hin: E ∈ free_evars ψ1 ∪ free_evars ψ2
e: E ∈ free_evars ψ1
n: E ∉ free_evars ψ2

S (maximal_exists_depth_of_evar_in_pattern' depth E ψ1) = S (maximal_exists_depth_of_evar_in_pattern' depth E ψ1)
reflexivity.
Σ: Signature
ψ1, ψ2: Pattern
IHψ1: (E : evar) (depth : nat), E ∈ free_evars ψ1 → maximal_exists_depth_of_evar_in_pattern' (S depth) E ψ1 = S (maximal_exists_depth_of_evar_in_pattern' depth E ψ1)
IHψ2: (E : evar) (depth : nat), E ∈ free_evars ψ2 → maximal_exists_depth_of_evar_in_pattern' (S depth) E ψ2 = S (maximal_exists_depth_of_evar_in_pattern' depth E ψ2)
E: evar
depth: nat
Hin: E ∈ free_evars ψ1 ∪ free_evars ψ2
n: E ∉ free_evars ψ1
e: E ∈ free_evars ψ2

maximal_exists_depth_of_evar_in_pattern' (S depth) E ψ1 `max` maximal_exists_depth_of_evar_in_pattern' (S depth) E ψ2 = S (maximal_exists_depth_of_evar_in_pattern' depth E ψ1 `max` maximal_exists_depth_of_evar_in_pattern' depth E ψ2)
Σ: Signature
ψ1, ψ2: Pattern
IHψ1: (E : evar) (depth : nat), E ∈ free_evars ψ1 → maximal_exists_depth_of_evar_in_pattern' (S depth) E ψ1 = S (maximal_exists_depth_of_evar_in_pattern' depth E ψ1)
IHψ2: (E : evar) (depth : nat), E ∈ free_evars ψ2 → maximal_exists_depth_of_evar_in_pattern' (S depth) E ψ2 = S (maximal_exists_depth_of_evar_in_pattern' depth E ψ2)
E: evar
depth: nat
Hin: E ∈ free_evars ψ1 ∪ free_evars ψ2
n: E ∉ free_evars ψ1
n0: E ∉ free_evars ψ2
maximal_exists_depth_of_evar_in_pattern' (S depth) E ψ1 `max` maximal_exists_depth_of_evar_in_pattern' (S depth) E ψ2 = S (maximal_exists_depth_of_evar_in_pattern' depth E ψ1 `max` maximal_exists_depth_of_evar_in_pattern' depth E ψ2)
Σ: Signature
ψ1, ψ2: Pattern
IHψ1: (E : evar) (depth : nat), E ∈ free_evars ψ1 → maximal_exists_depth_of_evar_in_pattern' (S depth) E ψ1 = S (maximal_exists_depth_of_evar_in_pattern' depth E ψ1)
IHψ2: (E : evar) (depth : nat), E ∈ free_evars ψ2 → maximal_exists_depth_of_evar_in_pattern' (S depth) E ψ2 = S (maximal_exists_depth_of_evar_in_pattern' depth E ψ2)
E: evar
depth: nat
Hin: E ∈ free_evars ψ1 ∪ free_evars ψ2
n: E ∉ free_evars ψ1
e: E ∈ free_evars ψ2

maximal_exists_depth_of_evar_in_pattern' (S depth) E ψ1 `max` maximal_exists_depth_of_evar_in_pattern' (S depth) E ψ2 = S (maximal_exists_depth_of_evar_in_pattern' depth E ψ1 `max` maximal_exists_depth_of_evar_in_pattern' depth E ψ2)
Σ: Signature
ψ1, ψ2: Pattern
IHψ1: (E : evar) (depth : nat), E ∈ free_evars ψ1 → maximal_exists_depth_of_evar_in_pattern' (S depth) E ψ1 = S (maximal_exists_depth_of_evar_in_pattern' depth E ψ1)
IHψ2: (E : evar) (depth : nat), E ∈ free_evars ψ2 → maximal_exists_depth_of_evar_in_pattern' (S depth) E ψ2 = S (maximal_exists_depth_of_evar_in_pattern' depth E ψ2)
E: evar
depth: nat
Hin: E ∈ free_evars ψ1 ∪ free_evars ψ2
n: E ∉ free_evars ψ1
e: E ∈ free_evars ψ2

E ∈ free_evars ψ2
Σ: Signature
ψ1, ψ2: Pattern
IHψ1: (E : evar) (depth : nat), E ∈ free_evars ψ1 → maximal_exists_depth_of_evar_in_pattern' (S depth) E ψ1 = S (maximal_exists_depth_of_evar_in_pattern' depth E ψ1)
IHψ2: (E : evar) (depth : nat), E ∈ free_evars ψ2 → maximal_exists_depth_of_evar_in_pattern' (S depth) E ψ2 = S (maximal_exists_depth_of_evar_in_pattern' depth E ψ2)
E: evar
depth: nat
Hin: E ∈ free_evars ψ1 ∪ free_evars ψ2
n: E ∉ free_evars ψ1
e: E ∈ free_evars ψ2
maximal_exists_depth_of_evar_in_pattern' (S depth) E ψ1 `max` S (maximal_exists_depth_of_evar_in_pattern' depth E ψ2) = S (maximal_exists_depth_of_evar_in_pattern' depth E ψ1 `max` maximal_exists_depth_of_evar_in_pattern' depth E ψ2)
Σ: Signature
ψ1, ψ2: Pattern
IHψ1: (E : evar) (depth : nat), E ∈ free_evars ψ1 → maximal_exists_depth_of_evar_in_pattern' (S depth) E ψ1 = S (maximal_exists_depth_of_evar_in_pattern' depth E ψ1)
IHψ2: (E : evar) (depth : nat), E ∈ free_evars ψ2 → maximal_exists_depth_of_evar_in_pattern' (S depth) E ψ2 = S (maximal_exists_depth_of_evar_in_pattern' depth E ψ2)
E: evar
depth: nat
Hin: E ∈ free_evars ψ1 ∪ free_evars ψ2
n: E ∉ free_evars ψ1
e: E ∈ free_evars ψ2

maximal_exists_depth_of_evar_in_pattern' (S depth) E ψ1 `max` S (maximal_exists_depth_of_evar_in_pattern' depth E ψ2) = S (maximal_exists_depth_of_evar_in_pattern' depth E ψ1 `max` maximal_exists_depth_of_evar_in_pattern' depth E ψ2)
Σ: Signature
ψ1, ψ2: Pattern
IHψ1: (E : evar) (depth : nat), E ∈ free_evars ψ1 → maximal_exists_depth_of_evar_in_pattern' (S depth) E ψ1 = S (maximal_exists_depth_of_evar_in_pattern' depth E ψ1)
IHψ2: (E : evar) (depth : nat), E ∈ free_evars ψ2 → maximal_exists_depth_of_evar_in_pattern' (S depth) E ψ2 = S (maximal_exists_depth_of_evar_in_pattern' depth E ψ2)
E: evar
depth: nat
Hin: E ∈ free_evars ψ1 ∪ free_evars ψ2
n: E ∉ free_evars ψ1
e: E ∈ free_evars ψ2

E ∉ free_evars ψ1
Σ: Signature
ψ1, ψ2: Pattern
IHψ1: (E : evar) (depth : nat), E ∈ free_evars ψ1 → maximal_exists_depth_of_evar_in_pattern' (S depth) E ψ1 = S (maximal_exists_depth_of_evar_in_pattern' depth E ψ1)
IHψ2: (E : evar) (depth : nat), E ∈ free_evars ψ2 → maximal_exists_depth_of_evar_in_pattern' (S depth) E ψ2 = S (maximal_exists_depth_of_evar_in_pattern' depth E ψ2)
E: evar
depth: nat
Hin: E ∈ free_evars ψ1 ∪ free_evars ψ2
n: E ∉ free_evars ψ1
e: E ∈ free_evars ψ2
0 `max` S (maximal_exists_depth_of_evar_in_pattern' depth E ψ2) = S (maximal_exists_depth_of_evar_in_pattern' depth E ψ1 `max` maximal_exists_depth_of_evar_in_pattern' depth E ψ2)
Σ: Signature
ψ1, ψ2: Pattern
IHψ1: (E : evar) (depth : nat), E ∈ free_evars ψ1 → maximal_exists_depth_of_evar_in_pattern' (S depth) E ψ1 = S (maximal_exists_depth_of_evar_in_pattern' depth E ψ1)
IHψ2: (E : evar) (depth : nat), E ∈ free_evars ψ2 → maximal_exists_depth_of_evar_in_pattern' (S depth) E ψ2 = S (maximal_exists_depth_of_evar_in_pattern' depth E ψ2)
E: evar
depth: nat
Hin: E ∈ free_evars ψ1 ∪ free_evars ψ2
n: E ∉ free_evars ψ1
e: E ∈ free_evars ψ2

E ∉ free_evars ψ1
assumption.
Σ: Signature
ψ1, ψ2: Pattern
IHψ1: (E : evar) (depth : nat), E ∈ free_evars ψ1 → maximal_exists_depth_of_evar_in_pattern' (S depth) E ψ1 = S (maximal_exists_depth_of_evar_in_pattern' depth E ψ1)
IHψ2: (E : evar) (depth : nat), E ∈ free_evars ψ2 → maximal_exists_depth_of_evar_in_pattern' (S depth) E ψ2 = S (maximal_exists_depth_of_evar_in_pattern' depth E ψ2)
E: evar
depth: nat
Hin: E ∈ free_evars ψ1 ∪ free_evars ψ2
n: E ∉ free_evars ψ1
e: E ∈ free_evars ψ2

0 `max` S (maximal_exists_depth_of_evar_in_pattern' depth E ψ2) = S (maximal_exists_depth_of_evar_in_pattern' depth E ψ1 `max` maximal_exists_depth_of_evar_in_pattern' depth E ψ2)
Σ: Signature
ψ1, ψ2: Pattern
IHψ1: (E : evar) (depth : nat), E ∈ free_evars ψ1 → maximal_exists_depth_of_evar_in_pattern' (S depth) E ψ1 = S (maximal_exists_depth_of_evar_in_pattern' depth E ψ1)
IHψ2: (E : evar) (depth : nat), E ∈ free_evars ψ2 → maximal_exists_depth_of_evar_in_pattern' (S depth) E ψ2 = S (maximal_exists_depth_of_evar_in_pattern' depth E ψ2)
E: evar
depth: nat
Hin: E ∈ free_evars ψ1 ∪ free_evars ψ2
n: E ∉ free_evars ψ1
e: E ∈ free_evars ψ2

E ∉ free_evars ψ1
Σ: Signature
ψ1, ψ2: Pattern
IHψ1: (E : evar) (depth : nat), E ∈ free_evars ψ1 → maximal_exists_depth_of_evar_in_pattern' (S depth) E ψ1 = S (maximal_exists_depth_of_evar_in_pattern' depth E ψ1)
IHψ2: (E : evar) (depth : nat), E ∈ free_evars ψ2 → maximal_exists_depth_of_evar_in_pattern' (S depth) E ψ2 = S (maximal_exists_depth_of_evar_in_pattern' depth E ψ2)
E: evar
depth: nat
Hin: E ∈ free_evars ψ1 ∪ free_evars ψ2
n: E ∉ free_evars ψ1
e: E ∈ free_evars ψ2
0 `max` S (maximal_exists_depth_of_evar_in_pattern' depth E ψ2) = S (0 `max` maximal_exists_depth_of_evar_in_pattern' depth E ψ2)
Σ: Signature
ψ1, ψ2: Pattern
IHψ1: (E : evar) (depth : nat), E ∈ free_evars ψ1 → maximal_exists_depth_of_evar_in_pattern' (S depth) E ψ1 = S (maximal_exists_depth_of_evar_in_pattern' depth E ψ1)
IHψ2: (E : evar) (depth : nat), E ∈ free_evars ψ2 → maximal_exists_depth_of_evar_in_pattern' (S depth) E ψ2 = S (maximal_exists_depth_of_evar_in_pattern' depth E ψ2)
E: evar
depth: nat
Hin: E ∈ free_evars ψ1 ∪ free_evars ψ2
n: E ∉ free_evars ψ1
e: E ∈ free_evars ψ2

E ∉ free_evars ψ1
assumption.
Σ: Signature
ψ1, ψ2: Pattern
IHψ1: (E : evar) (depth : nat), E ∈ free_evars ψ1 → maximal_exists_depth_of_evar_in_pattern' (S depth) E ψ1 = S (maximal_exists_depth_of_evar_in_pattern' depth E ψ1)
IHψ2: (E : evar) (depth : nat), E ∈ free_evars ψ2 → maximal_exists_depth_of_evar_in_pattern' (S depth) E ψ2 = S (maximal_exists_depth_of_evar_in_pattern' depth E ψ2)
E: evar
depth: nat
Hin: E ∈ free_evars ψ1 ∪ free_evars ψ2
n: E ∉ free_evars ψ1
e: E ∈ free_evars ψ2

0 `max` S (maximal_exists_depth_of_evar_in_pattern' depth E ψ2) = S (0 `max` maximal_exists_depth_of_evar_in_pattern' depth E ψ2)
Σ: Signature
ψ1, ψ2: Pattern
IHψ1: (E : evar) (depth : nat), E ∈ free_evars ψ1 → maximal_exists_depth_of_evar_in_pattern' (S depth) E ψ1 = S (maximal_exists_depth_of_evar_in_pattern' depth E ψ1)
IHψ2: (E : evar) (depth : nat), E ∈ free_evars ψ2 → maximal_exists_depth_of_evar_in_pattern' (S depth) E ψ2 = S (maximal_exists_depth_of_evar_in_pattern' depth E ψ2)
E: evar
depth: nat
Hin: E ∈ free_evars ψ1 ∪ free_evars ψ2
n: E ∉ free_evars ψ1
e: E ∈ free_evars ψ2

S (maximal_exists_depth_of_evar_in_pattern' depth E ψ2) = S (maximal_exists_depth_of_evar_in_pattern' depth E ψ2)
reflexivity.
Σ: Signature
ψ1, ψ2: Pattern
IHψ1: (E : evar) (depth : nat), E ∈ free_evars ψ1 → maximal_exists_depth_of_evar_in_pattern' (S depth) E ψ1 = S (maximal_exists_depth_of_evar_in_pattern' depth E ψ1)
IHψ2: (E : evar) (depth : nat), E ∈ free_evars ψ2 → maximal_exists_depth_of_evar_in_pattern' (S depth) E ψ2 = S (maximal_exists_depth_of_evar_in_pattern' depth E ψ2)
E: evar
depth: nat
Hin: E ∈ free_evars ψ1 ∪ free_evars ψ2
n: E ∉ free_evars ψ1
n0: E ∉ free_evars ψ2

maximal_exists_depth_of_evar_in_pattern' (S depth) E ψ1 `max` maximal_exists_depth_of_evar_in_pattern' (S depth) E ψ2 = S (maximal_exists_depth_of_evar_in_pattern' depth E ψ1 `max` maximal_exists_depth_of_evar_in_pattern' depth E ψ2)
Σ: Signature
ψ1, ψ2: Pattern
IHψ1: (E : evar) (depth : nat), E ∈ free_evars ψ1 → maximal_exists_depth_of_evar_in_pattern' (S depth) E ψ1 = S (maximal_exists_depth_of_evar_in_pattern' depth E ψ1)
IHψ2: (E : evar) (depth : nat), E ∈ free_evars ψ2 → maximal_exists_depth_of_evar_in_pattern' (S depth) E ψ2 = S (maximal_exists_depth_of_evar_in_pattern' depth E ψ2)
E: evar
depth: nat
Hin: E ∈ free_evars ψ1 ∪ free_evars ψ2
n: E ∉ free_evars ψ1
n0: E ∉ free_evars ψ2

maximal_exists_depth_of_evar_in_pattern' (S depth) E ψ1 `max` maximal_exists_depth_of_evar_in_pattern' (S depth) E ψ2 = S (maximal_exists_depth_of_evar_in_pattern' depth E ψ1 `max` maximal_exists_depth_of_evar_in_pattern' depth E ψ2)
Σ: Signature
ψ1, ψ2: Pattern
IHψ1: (E : evar) (depth : nat), E ∈ free_evars ψ1 → maximal_exists_depth_of_evar_in_pattern' (S depth) E ψ1 = S (maximal_exists_depth_of_evar_in_pattern' depth E ψ1)
IHψ2: (E : evar) (depth : nat), E ∈ free_evars ψ2 → maximal_exists_depth_of_evar_in_pattern' (S depth) E ψ2 = S (maximal_exists_depth_of_evar_in_pattern' depth E ψ2)
E: evar
depth: nat
Hin: E ∈ free_evars ψ1 ∪ free_evars ψ2
n: E ∉ free_evars ψ1
n0: E ∉ free_evars ψ2

False
set_solver. }
Σ: Signature
ψ: Pattern
IHψ: (E : evar) (depth : nat), E ∈ free_evars ψ → maximal_exists_depth_of_evar_in_pattern' (S depth) E ψ = S (maximal_exists_depth_of_evar_in_pattern' depth E ψ)
E: evar
depth: nat
Hin: E ∈ free_evars ψ

maximal_exists_depth_of_evar_in_pattern' (S (S depth)) E ψ = S (maximal_exists_depth_of_evar_in_pattern' (S depth) E ψ)
Σ: Signature
ψ: Pattern
IHψ: (E : evar) (depth : nat), E ∈ free_evars ψ → maximal_exists_depth_of_evar_in_pattern' (S depth) E ψ = S (maximal_exists_depth_of_evar_in_pattern' depth E ψ)
E: evar
depth: nat
Hin: E ∈ free_evars ψ
maximal_exists_depth_of_evar_in_pattern' (S depth) E ψ = S (maximal_exists_depth_of_evar_in_pattern' depth E ψ)
Σ: Signature
ψ: Pattern
IHψ: (E : evar) (depth : nat), E ∈ free_evars ψ → maximal_exists_depth_of_evar_in_pattern' (S depth) E ψ = S (maximal_exists_depth_of_evar_in_pattern' depth E ψ)
E: evar
depth: nat
Hin: E ∈ free_evars ψ

maximal_exists_depth_of_evar_in_pattern' (S (S depth)) E ψ = S (maximal_exists_depth_of_evar_in_pattern' (S depth) E ψ)
Σ: Signature
ψ: Pattern
IHψ: (E : evar) (depth : nat), E ∈ free_evars ψ → maximal_exists_depth_of_evar_in_pattern' (S depth) E ψ = S (maximal_exists_depth_of_evar_in_pattern' depth E ψ)
E: evar
depth: nat
Hin: E ∈ free_evars ψ

E ∈ free_evars ψ
Σ: Signature
ψ: Pattern
IHψ: (E : evar) (depth : nat), E ∈ free_evars ψ → maximal_exists_depth_of_evar_in_pattern' (S depth) E ψ = S (maximal_exists_depth_of_evar_in_pattern' depth E ψ)
E: evar
depth: nat
Hin: E ∈ free_evars ψ
S (maximal_exists_depth_of_evar_in_pattern' (S depth) E ψ) = S (maximal_exists_depth_of_evar_in_pattern' (S depth) E ψ)
Σ: Signature
ψ: Pattern
IHψ: (E : evar) (depth : nat), E ∈ free_evars ψ → maximal_exists_depth_of_evar_in_pattern' (S depth) E ψ = S (maximal_exists_depth_of_evar_in_pattern' depth E ψ)
E: evar
depth: nat
Hin: E ∈ free_evars ψ

S (maximal_exists_depth_of_evar_in_pattern' (S depth) E ψ) = S (maximal_exists_depth_of_evar_in_pattern' (S depth) E ψ)
reflexivity.
Σ: Signature
ψ: Pattern
IHψ: (E : evar) (depth : nat), E ∈ free_evars ψ → maximal_exists_depth_of_evar_in_pattern' (S depth) E ψ = S (maximal_exists_depth_of_evar_in_pattern' depth E ψ)
E: evar
depth: nat
Hin: E ∈ free_evars ψ

maximal_exists_depth_of_evar_in_pattern' (S depth) E ψ = S (maximal_exists_depth_of_evar_in_pattern' depth E ψ)
Σ: Signature
ψ: Pattern
IHψ: (E : evar) (depth : nat), E ∈ free_evars ψ → maximal_exists_depth_of_evar_in_pattern' (S depth) E ψ = S (maximal_exists_depth_of_evar_in_pattern' depth E ψ)
E: evar
depth: nat
Hin: E ∈ free_evars ψ

maximal_exists_depth_of_evar_in_pattern' (S depth) E ψ = S (maximal_exists_depth_of_evar_in_pattern' depth E ψ)
Σ: Signature
ψ: Pattern
IHψ: (E : evar) (depth : nat), E ∈ free_evars ψ → maximal_exists_depth_of_evar_in_pattern' (S depth) E ψ = S (maximal_exists_depth_of_evar_in_pattern' depth E ψ)
E: evar
depth: nat
Hin: E ∈ free_evars ψ

E ∈ free_evars ψ
Σ: Signature
ψ: Pattern
IHψ: (E : evar) (depth : nat), E ∈ free_evars ψ → maximal_exists_depth_of_evar_in_pattern' (S depth) E ψ = S (maximal_exists_depth_of_evar_in_pattern' depth E ψ)
E: evar
depth: nat
Hin: E ∈ free_evars ψ
S (maximal_exists_depth_of_evar_in_pattern' depth E ψ) = S (maximal_exists_depth_of_evar_in_pattern' depth E ψ)
Σ: Signature
ψ: Pattern
IHψ: (E : evar) (depth : nat), E ∈ free_evars ψ → maximal_exists_depth_of_evar_in_pattern' (S depth) E ψ = S (maximal_exists_depth_of_evar_in_pattern' depth E ψ)
E: evar
depth: nat
Hin: E ∈ free_evars ψ

S (maximal_exists_depth_of_evar_in_pattern' depth E ψ) = S (maximal_exists_depth_of_evar_in_pattern' depth E ψ)
reflexivity. } Qed. Fixpoint maximal_mu_depth_of_evar_in_pattern' (depth : nat) (E : evar) (ψ : Pattern) : nat := match ψ with | patt_bott => 0 | patt_sym _ => 0 | patt_bound_evar _ => 0 | patt_bound_svar _ => 0 | patt_free_svar _ => 0 | patt_free_evar E' => match (decide (E' = E)) with | left _ => depth | right _ => 0 end | patt_imp ψ₁ ψ₂ => Nat.max (maximal_mu_depth_of_evar_in_pattern' depth E ψ₁) (maximal_mu_depth_of_evar_in_pattern' depth E ψ₂) | patt_app ψ₁ ψ₂ => Nat.max (maximal_mu_depth_of_evar_in_pattern' depth E ψ₁) (maximal_mu_depth_of_evar_in_pattern' depth E ψ₂) | patt_exists ψ' => maximal_mu_depth_of_evar_in_pattern' depth E ψ' | patt_mu ψ' => maximal_mu_depth_of_evar_in_pattern' (S depth) E ψ' end. Definition maximal_mu_depth_of_evar_in_pattern (E : evar) (ψ : Pattern) : nat := maximal_mu_depth_of_evar_in_pattern' 0 E ψ.
Σ: Signature
SvS: SVarSet
n1, n2: nat

list_to_set (svar_fresh_seq SvS n1) ⊆ list_to_set (svar_fresh_seq SvS (n1 `max` n2))
Σ: Signature
SvS: SVarSet
n1, n2: nat

list_to_set (svar_fresh_seq SvS n1) ⊆ list_to_set (svar_fresh_seq SvS (n1 `max` n2))
Σ: Signature
n1: nat

(SvS : SVarSet) (n2 : nat), list_to_set (svar_fresh_seq SvS n1) ⊆ list_to_set (svar_fresh_seq SvS (n1 `max` n2))
Σ: Signature
SvS: SVarSet
n2: nat

list_to_set (svar_fresh_seq SvS 0) ⊆ list_to_set (svar_fresh_seq SvS (0 `max` n2))
Σ: Signature
n1: nat
IHn1: (SvS : SVarSet) (n2 : nat), list_to_set (svar_fresh_seq SvS n1) ⊆ list_to_set (svar_fresh_seq SvS (n1 `max` n2))
SvS: SVarSet
n2: nat
list_to_set (svar_fresh_seq SvS (S n1)) ⊆ list_to_set (svar_fresh_seq SvS (S n1 `max` n2))
Σ: Signature
SvS: SVarSet
n2: nat

list_to_set (svar_fresh_seq SvS 0) ⊆ list_to_set (svar_fresh_seq SvS (0 `max` n2))
Σ: Signature
SvS: SVarSet
n2: nat

∅ ⊆ list_to_set (svar_fresh_seq SvS n2)
set_solver.
Σ: Signature
n1: nat
IHn1: (SvS : SVarSet) (n2 : nat), list_to_set (svar_fresh_seq SvS n1) ⊆ list_to_set (svar_fresh_seq SvS (n1 `max` n2))
SvS: SVarSet
n2: nat

list_to_set (svar_fresh_seq SvS (S n1)) ⊆ list_to_set (svar_fresh_seq SvS (S n1 `max` n2))
Σ: Signature
n1: nat
IHn1: (SvS : SVarSet) (n2 : nat), list_to_set (svar_fresh_seq SvS n1) ⊆ list_to_set (svar_fresh_seq SvS (n1 `max` n2))
SvS: SVarSet
n2: nat

list_to_set (svar_fresh_seq SvS (S n1)) ⊆ list_to_set (svar_fresh_seq SvS (S n1 `max` n2))
Σ: Signature
n1: nat
IHn1: (SvS : SVarSet) (n2 : nat), list_to_set (svar_fresh_seq SvS n1) ⊆ list_to_set (svar_fresh_seq SvS (n1 `max` n2))
SvS: SVarSet
n2: nat

{[svar_fresh_s SvS]} ∪ list_to_set (svar_fresh_seq ({[svar_fresh_s SvS]} ∪ SvS) n1) ⊆ list_to_set (svar_fresh_seq SvS (S n1 `max` n2))
Σ: Signature
n1: nat
IHn1: (SvS : SVarSet) (n2 : nat), list_to_set (svar_fresh_seq SvS n1) ⊆ list_to_set (svar_fresh_seq SvS (n1 `max` n2))
SvS: SVarSet

{[svar_fresh_s SvS]} ∪ list_to_set (svar_fresh_seq ({[svar_fresh_s SvS]} ∪ SvS) n1) ⊆ list_to_set (svar_fresh_seq SvS (S n1 `max` 0))
Σ: Signature
n1: nat
IHn1: (SvS : SVarSet) (n2 : nat), list_to_set (svar_fresh_seq SvS n1) ⊆ list_to_set (svar_fresh_seq SvS (n1 `max` n2))
SvS: SVarSet
n2: nat
{[svar_fresh_s SvS]} ∪ list_to_set (svar_fresh_seq ({[svar_fresh_s SvS]} ∪ SvS) n1) ⊆ list_to_set (svar_fresh_seq SvS (S n1 `max` S n2))
Σ: Signature
n1: nat
IHn1: (SvS : SVarSet) (n2 : nat), list_to_set (svar_fresh_seq SvS n1) ⊆ list_to_set (svar_fresh_seq SvS (n1 `max` n2))
SvS: SVarSet

{[svar_fresh_s SvS]} ∪ list_to_set (svar_fresh_seq ({[svar_fresh_s SvS]} ∪ SvS) n1) ⊆ list_to_set (svar_fresh_seq SvS (S n1 `max` 0))
Σ: Signature
n1: nat
IHn1: (SvS : SVarSet) (n2 : nat), list_to_set (svar_fresh_seq SvS n1) ⊆ list_to_set (svar_fresh_seq SvS (n1 `max` n2))
SvS: SVarSet

{[svar_fresh_s SvS]} ∪ list_to_set (svar_fresh_seq ({[svar_fresh_s SvS]} ∪ SvS) n1) ⊆ {[svar_fresh_s SvS]} ∪ list_to_set (svar_fresh_seq ({[svar_fresh_s SvS]} ∪ SvS) n1)
set_solver.
Σ: Signature
n1: nat
IHn1: (SvS : SVarSet) (n2 : nat), list_to_set (svar_fresh_seq SvS n1) ⊆ list_to_set (svar_fresh_seq SvS (n1 `max` n2))
SvS: SVarSet
n2: nat

{[svar_fresh_s SvS]} ∪ list_to_set (svar_fresh_seq ({[svar_fresh_s SvS]} ∪ SvS) n1) ⊆ list_to_set (svar_fresh_seq SvS (S n1 `max` S n2))
Σ: Signature
n1: nat
IHn1: (SvS : SVarSet) (n2 : nat), list_to_set (svar_fresh_seq SvS n1) ⊆ list_to_set (svar_fresh_seq SvS (n1 `max` n2))
SvS: SVarSet
n2: nat

{[svar_fresh_s SvS]} ∪ list_to_set (svar_fresh_seq ({[svar_fresh_s SvS]} ∪ SvS) n1) ⊆ list_to_set (svar_fresh_seq SvS (S n1 `max` S n2))
Σ: Signature
n1: nat
IHn1: (SvS : SVarSet) (n2 : nat), list_to_set (svar_fresh_seq SvS n1) ⊆ list_to_set (svar_fresh_seq SvS (n1 `max` n2))
SvS: SVarSet
n2: nat

{[svar_fresh_s SvS]} ∪ list_to_set (svar_fresh_seq ({[svar_fresh_s SvS]} ∪ SvS) n1) ⊆ {[svar_fresh_s SvS]} ∪ list_to_set (svar_fresh_seq ({[svar_fresh_s SvS]} ∪ SvS) (n1 `max` n2))
Σ: Signature
n1: nat
IHn1: (SvS : SVarSet) (n2 : nat), list_to_set (svar_fresh_seq SvS n1) ⊆ list_to_set (svar_fresh_seq SvS (n1 `max` n2))
SvS: SVarSet
n2: nat

list_to_set (svar_fresh_seq ({[svar_fresh_s SvS]} ∪ SvS) n1) ⊆ list_to_set (svar_fresh_seq ({[svar_fresh_s SvS]} ∪ SvS) (n1 `max` n2)) → {[svar_fresh_s SvS]} ∪ list_to_set (svar_fresh_seq ({[svar_fresh_s SvS]} ∪ SvS) n1) ⊆ {[svar_fresh_s SvS]} ∪ list_to_set (svar_fresh_seq ({[svar_fresh_s SvS]} ∪ SvS) (n1 `max` n2))
Σ: Signature
n1: nat
IHn1: (SvS : SVarSet) (n2 : nat), list_to_set (svar_fresh_seq SvS n1) ⊆ list_to_set (svar_fresh_seq SvS (n1 `max` n2))
SvS: SVarSet
n2: nat
list_to_set (svar_fresh_seq ({[svar_fresh_s SvS]} ∪ SvS) n1) ⊆ list_to_set (svar_fresh_seq ({[svar_fresh_s SvS]} ∪ SvS) (n1 `max` n2))
Σ: Signature
n1: nat
IHn1: (SvS : SVarSet) (n2 : nat), list_to_set (svar_fresh_seq SvS n1) ⊆ list_to_set (svar_fresh_seq SvS (n1 `max` n2))
SvS: SVarSet
n2: nat

list_to_set (svar_fresh_seq ({[svar_fresh_s SvS]} ∪ SvS) n1) ⊆ list_to_set (svar_fresh_seq ({[svar_fresh_s SvS]} ∪ SvS) (n1 `max` n2)) → {[svar_fresh_s SvS]} ∪ list_to_set (svar_fresh_seq ({[svar_fresh_s SvS]} ∪ SvS) n1) ⊆ {[svar_fresh_s SvS]} ∪ list_to_set (svar_fresh_seq ({[svar_fresh_s SvS]} ∪ SvS) (n1 `max` n2))
set_solver.
Σ: Signature
n1: nat
IHn1: (SvS : SVarSet) (n2 : nat), list_to_set (svar_fresh_seq SvS n1) ⊆ list_to_set (svar_fresh_seq SvS (n1 `max` n2))
SvS: SVarSet
n2: nat

list_to_set (svar_fresh_seq ({[svar_fresh_s SvS]} ∪ SvS) n1) ⊆ list_to_set (svar_fresh_seq ({[svar_fresh_s SvS]} ∪ SvS) (n1 `max` n2))
Σ: Signature
n1: nat
SvS: SVarSet
n2: nat
IHn1: list_to_set (svar_fresh_seq ({[svar_fresh_s SvS]} ∪ SvS) n1) ⊆ list_to_set (svar_fresh_seq ({[svar_fresh_s SvS]} ∪ SvS) (n1 `max` n2))

list_to_set (svar_fresh_seq ({[svar_fresh_s SvS]} ∪ SvS) n1) ⊆ list_to_set (svar_fresh_seq ({[svar_fresh_s SvS]} ∪ SvS) (n1 `max` n2))
apply IHn1. } } Qed.
Σ: Signature
depth: nat
E: evar
n: db_index
X: svar
ψ: Pattern

maximal_mu_depth_of_evar_in_pattern' depth E ψ^{svar:n↦X} = maximal_mu_depth_of_evar_in_pattern' depth E ψ
Σ: Signature
depth: nat
E: evar
n: db_index
X: svar
ψ: Pattern

maximal_mu_depth_of_evar_in_pattern' depth E ψ^{svar:n↦X} = maximal_mu_depth_of_evar_in_pattern' depth E ψ
Σ: Signature
depth: nat
E: evar
n: db_index
X: svar
ψ: Pattern

maximal_mu_depth_of_evar_in_pattern' depth E ψ^[svar:n↦patt_free_svar X] = maximal_mu_depth_of_evar_in_pattern' depth E ψ
Σ: Signature
E: evar
X: svar
ψ: Pattern

(depth : nat) (n : db_index), maximal_mu_depth_of_evar_in_pattern' depth E ψ^[svar:n↦patt_free_svar X] = maximal_mu_depth_of_evar_in_pattern' depth E ψ
Σ: Signature
E: evar
X: svar
n: db_index
depth: nat
n': db_index

maximal_mu_depth_of_evar_in_pattern' depth E match compare_nat n n' with | Nat_less _ _ _ => patt_bound_svar n | Nat_equal _ _ _ => patt_free_svar X | Nat_greater _ _ _ => patt_bound_svar (Nat.pred n) end = 0
Σ: Signature
E: evar
X: svar
ψ1, ψ2: Pattern
IHψ1: (depth : nat) (n : db_index), maximal_mu_depth_of_evar_in_pattern' depth E ψ1^[svar:n↦patt_free_svar X] = maximal_mu_depth_of_evar_in_pattern' depth E ψ1
IHψ2: (depth : nat) (n : db_index), maximal_mu_depth_of_evar_in_pattern' depth E ψ2^[svar:n↦patt_free_svar X] = maximal_mu_depth_of_evar_in_pattern' depth E ψ2
depth: nat
n': db_index
maximal_mu_depth_of_evar_in_pattern' depth E ψ1^[svar:n'↦patt_free_svar X] `max` maximal_mu_depth_of_evar_in_pattern' depth E ψ2^[svar:n'↦patt_free_svar X] = maximal_mu_depth_of_evar_in_pattern' depth E ψ1 `max` maximal_mu_depth_of_evar_in_pattern' depth E ψ2
Σ: Signature
E: evar
X: svar
ψ1, ψ2: Pattern
IHψ1: (depth : nat) (n : db_index), maximal_mu_depth_of_evar_in_pattern' depth E ψ1^[svar:n↦patt_free_svar X] = maximal_mu_depth_of_evar_in_pattern' depth E ψ1
IHψ2: (depth : nat) (n : db_index), maximal_mu_depth_of_evar_in_pattern' depth E ψ2^[svar:n↦patt_free_svar X] = maximal_mu_depth_of_evar_in_pattern' depth E ψ2
depth: nat
n': db_index
maximal_mu_depth_of_evar_in_pattern' depth E ψ1^[svar:n'↦patt_free_svar X] `max` maximal_mu_depth_of_evar_in_pattern' depth E ψ2^[svar:n'↦patt_free_svar X] = maximal_mu_depth_of_evar_in_pattern' depth E ψ1 `max` maximal_mu_depth_of_evar_in_pattern' depth E ψ2
Σ: Signature
E: evar
X: svar
ψ: Pattern
IHψ: (depth : nat) (n : db_index), maximal_mu_depth_of_evar_in_pattern' depth E ψ^[svar:n↦patt_free_svar X] = maximal_mu_depth_of_evar_in_pattern' depth E ψ
depth: nat
n': db_index
maximal_mu_depth_of_evar_in_pattern' depth E ψ^[svar:n'↦patt_free_svar X] = maximal_mu_depth_of_evar_in_pattern' depth E ψ
Σ: Signature
E: evar
X: svar
ψ: Pattern
IHψ: (depth : nat) (n : db_index), maximal_mu_depth_of_evar_in_pattern' depth E ψ^[svar:n↦patt_free_svar X] = maximal_mu_depth_of_evar_in_pattern' depth E ψ
depth: nat
n': db_index
maximal_mu_depth_of_evar_in_pattern' (S depth) E ψ^[svar:S n'↦ patt_free_svar X] = maximal_mu_depth_of_evar_in_pattern' (S depth) E ψ
Σ: Signature
E: evar
X: svar
n: db_index
depth: nat
n': db_index

maximal_mu_depth_of_evar_in_pattern' depth E match compare_nat n n' with | Nat_less _ _ _ => patt_bound_svar n | Nat_equal _ _ _ => patt_free_svar X | Nat_greater _ _ _ => patt_bound_svar (Nat.pred n) end = 0
case_match; simpl; try reflexivity.
Σ: Signature
E: evar
X: svar
ψ1, ψ2: Pattern
IHψ1: (depth : nat) (n : db_index), maximal_mu_depth_of_evar_in_pattern' depth E ψ1^[svar:n↦patt_free_svar X] = maximal_mu_depth_of_evar_in_pattern' depth E ψ1
IHψ2: (depth : nat) (n : db_index), maximal_mu_depth_of_evar_in_pattern' depth E ψ2^[svar:n↦patt_free_svar X] = maximal_mu_depth_of_evar_in_pattern' depth E ψ2
depth: nat
n': db_index

maximal_mu_depth_of_evar_in_pattern' depth E ψ1^[svar:n'↦patt_free_svar X] `max` maximal_mu_depth_of_evar_in_pattern' depth E ψ2^[svar:n'↦patt_free_svar X] = maximal_mu_depth_of_evar_in_pattern' depth E ψ1 `max` maximal_mu_depth_of_evar_in_pattern' depth E ψ2
Σ: Signature
E: evar
X: svar
ψ1, ψ2: Pattern
IHψ1: (depth : nat) (n : db_index), maximal_mu_depth_of_evar_in_pattern' depth E ψ1^[svar:n↦patt_free_svar X] = maximal_mu_depth_of_evar_in_pattern' depth E ψ1
IHψ2: (depth : nat) (n : db_index), maximal_mu_depth_of_evar_in_pattern' depth E ψ2^[svar:n↦patt_free_svar X] = maximal_mu_depth_of_evar_in_pattern' depth E ψ2
depth: nat
n': db_index
maximal_mu_depth_of_evar_in_pattern' depth E ψ1^[svar:n'↦patt_free_svar X] `max` maximal_mu_depth_of_evar_in_pattern' depth E ψ2^[svar:n'↦patt_free_svar X] = maximal_mu_depth_of_evar_in_pattern' depth E ψ1 `max` maximal_mu_depth_of_evar_in_pattern' depth E ψ2
Σ: Signature
E: evar
X: svar
ψ: Pattern
IHψ: (depth : nat) (n : db_index), maximal_mu_depth_of_evar_in_pattern' depth E ψ^[svar:n↦patt_free_svar X] = maximal_mu_depth_of_evar_in_pattern' depth E ψ
depth: nat
n': db_index
maximal_mu_depth_of_evar_in_pattern' depth E ψ^[svar:n'↦patt_free_svar X] = maximal_mu_depth_of_evar_in_pattern' depth E ψ
Σ: Signature
E: evar
X: svar
ψ: Pattern
IHψ: (depth : nat) (n : db_index), maximal_mu_depth_of_evar_in_pattern' depth E ψ^[svar:n↦patt_free_svar X] = maximal_mu_depth_of_evar_in_pattern' depth E ψ
depth: nat
n': db_index
maximal_mu_depth_of_evar_in_pattern' (S depth) E ψ^[svar:S n'↦ patt_free_svar X] = maximal_mu_depth_of_evar_in_pattern' (S depth) E ψ
Σ: Signature
E: evar
X: svar
ψ1, ψ2: Pattern
IHψ1: (depth : nat) (n : db_index), maximal_mu_depth_of_evar_in_pattern' depth E ψ1^[svar:n↦patt_free_svar X] = maximal_mu_depth_of_evar_in_pattern' depth E ψ1
IHψ2: (depth : nat) (n : db_index), maximal_mu_depth_of_evar_in_pattern' depth E ψ2^[svar:n↦patt_free_svar X] = maximal_mu_depth_of_evar_in_pattern' depth E ψ2
depth: nat
n': db_index

maximal_mu_depth_of_evar_in_pattern' depth E ψ1^[svar:n'↦patt_free_svar X] `max` maximal_mu_depth_of_evar_in_pattern' depth E ψ2^[svar:n'↦patt_free_svar X] = maximal_mu_depth_of_evar_in_pattern' depth E ψ1 `max` maximal_mu_depth_of_evar_in_pattern' depth E ψ2
Σ: Signature
E: evar
X: svar
ψ1, ψ2: Pattern
IHψ1: (depth : nat) (n : db_index), maximal_mu_depth_of_evar_in_pattern' depth E ψ1^[svar:n↦patt_free_svar X] = maximal_mu_depth_of_evar_in_pattern' depth E ψ1
IHψ2: (depth : nat) (n : db_index), maximal_mu_depth_of_evar_in_pattern' depth E ψ2^[svar:n↦patt_free_svar X] = maximal_mu_depth_of_evar_in_pattern' depth E ψ2
depth: nat
n': db_index

maximal_mu_depth_of_evar_in_pattern' depth E ψ1 `max` maximal_mu_depth_of_evar_in_pattern' depth E ψ2^[svar:n'↦patt_free_svar X] = maximal_mu_depth_of_evar_in_pattern' depth E ψ1 `max` maximal_mu_depth_of_evar_in_pattern' depth E ψ2
Σ: Signature
E: evar
X: svar
ψ1, ψ2: Pattern
IHψ1: (depth : nat) (n : db_index), maximal_mu_depth_of_evar_in_pattern' depth E ψ1^[svar:n↦patt_free_svar X] = maximal_mu_depth_of_evar_in_pattern' depth E ψ1
IHψ2: (depth : nat) (n : db_index), maximal_mu_depth_of_evar_in_pattern' depth E ψ2^[svar:n↦patt_free_svar X] = maximal_mu_depth_of_evar_in_pattern' depth E ψ2
depth: nat
n': db_index

maximal_mu_depth_of_evar_in_pattern' depth E ψ1 `max` maximal_mu_depth_of_evar_in_pattern' depth E ψ2 = maximal_mu_depth_of_evar_in_pattern' depth E ψ1 `max` maximal_mu_depth_of_evar_in_pattern' depth E ψ2
reflexivity.
Σ: Signature
E: evar
X: svar
ψ1, ψ2: Pattern
IHψ1: (depth : nat) (n : db_index), maximal_mu_depth_of_evar_in_pattern' depth E ψ1^[svar:n↦patt_free_svar X] = maximal_mu_depth_of_evar_in_pattern' depth E ψ1
IHψ2: (depth : nat) (n : db_index), maximal_mu_depth_of_evar_in_pattern' depth E ψ2^[svar:n↦patt_free_svar X] = maximal_mu_depth_of_evar_in_pattern' depth E ψ2
depth: nat
n': db_index

maximal_mu_depth_of_evar_in_pattern' depth E ψ1^[svar:n'↦patt_free_svar X] `max` maximal_mu_depth_of_evar_in_pattern' depth E ψ2^[svar:n'↦patt_free_svar X] = maximal_mu_depth_of_evar_in_pattern' depth E ψ1 `max` maximal_mu_depth_of_evar_in_pattern' depth E ψ2
Σ: Signature
E: evar
X: svar
ψ: Pattern
IHψ: (depth : nat) (n : db_index), maximal_mu_depth_of_evar_in_pattern' depth E ψ^[svar:n↦patt_free_svar X] = maximal_mu_depth_of_evar_in_pattern' depth E ψ
depth: nat
n': db_index
maximal_mu_depth_of_evar_in_pattern' depth E ψ^[svar:n'↦patt_free_svar X] = maximal_mu_depth_of_evar_in_pattern' depth E ψ
Σ: Signature
E: evar
X: svar
ψ: Pattern
IHψ: (depth : nat) (n : db_index), maximal_mu_depth_of_evar_in_pattern' depth E ψ^[svar:n↦patt_free_svar X] = maximal_mu_depth_of_evar_in_pattern' depth E ψ
depth: nat
n': db_index
maximal_mu_depth_of_evar_in_pattern' (S depth) E ψ^[svar:S n'↦ patt_free_svar X] = maximal_mu_depth_of_evar_in_pattern' (S depth) E ψ
Σ: Signature
E: evar
X: svar
ψ1, ψ2: Pattern
IHψ1: (depth : nat) (n : db_index), maximal_mu_depth_of_evar_in_pattern' depth E ψ1^[svar:n↦patt_free_svar X] = maximal_mu_depth_of_evar_in_pattern' depth E ψ1
IHψ2: (depth : nat) (n : db_index), maximal_mu_depth_of_evar_in_pattern' depth E ψ2^[svar:n↦patt_free_svar X] = maximal_mu_depth_of_evar_in_pattern' depth E ψ2
depth: nat
n': db_index

maximal_mu_depth_of_evar_in_pattern' depth E ψ1^[svar:n'↦patt_free_svar X] `max` maximal_mu_depth_of_evar_in_pattern' depth E ψ2^[svar:n'↦patt_free_svar X] = maximal_mu_depth_of_evar_in_pattern' depth E ψ1 `max` maximal_mu_depth_of_evar_in_pattern' depth E ψ2
Σ: Signature
E: evar
X: svar
ψ1, ψ2: Pattern
IHψ1: (depth : nat) (n : db_index), maximal_mu_depth_of_evar_in_pattern' depth E ψ1^[svar:n↦patt_free_svar X] = maximal_mu_depth_of_evar_in_pattern' depth E ψ1
IHψ2: (depth : nat) (n : db_index), maximal_mu_depth_of_evar_in_pattern' depth E ψ2^[svar:n↦patt_free_svar X] = maximal_mu_depth_of_evar_in_pattern' depth E ψ2
depth: nat
n': db_index

maximal_mu_depth_of_evar_in_pattern' depth E ψ1 `max` maximal_mu_depth_of_evar_in_pattern' depth E ψ2^[svar:n'↦patt_free_svar X] = maximal_mu_depth_of_evar_in_pattern' depth E ψ1 `max` maximal_mu_depth_of_evar_in_pattern' depth E ψ2
Σ: Signature
E: evar
X: svar
ψ1, ψ2: Pattern
IHψ1: (depth : nat) (n : db_index), maximal_mu_depth_of_evar_in_pattern' depth E ψ1^[svar:n↦patt_free_svar X] = maximal_mu_depth_of_evar_in_pattern' depth E ψ1
IHψ2: (depth : nat) (n : db_index), maximal_mu_depth_of_evar_in_pattern' depth E ψ2^[svar:n↦patt_free_svar X] = maximal_mu_depth_of_evar_in_pattern' depth E ψ2
depth: nat
n': db_index

maximal_mu_depth_of_evar_in_pattern' depth E ψ1 `max` maximal_mu_depth_of_evar_in_pattern' depth E ψ2 = maximal_mu_depth_of_evar_in_pattern' depth E ψ1 `max` maximal_mu_depth_of_evar_in_pattern' depth E ψ2
reflexivity.
Σ: Signature
E: evar
X: svar
ψ: Pattern
IHψ: (depth : nat) (n : db_index), maximal_mu_depth_of_evar_in_pattern' depth E ψ^[svar:n↦patt_free_svar X] = maximal_mu_depth_of_evar_in_pattern' depth E ψ
depth: nat
n': db_index

maximal_mu_depth_of_evar_in_pattern' depth E ψ^[svar:n'↦patt_free_svar X] = maximal_mu_depth_of_evar_in_pattern' depth E ψ
Σ: Signature
E: evar
X: svar
ψ: Pattern
IHψ: (depth : nat) (n : db_index), maximal_mu_depth_of_evar_in_pattern' depth E ψ^[svar:n↦patt_free_svar X] = maximal_mu_depth_of_evar_in_pattern' depth E ψ
depth: nat
n': db_index
maximal_mu_depth_of_evar_in_pattern' (S depth) E ψ^[svar:S n'↦ patt_free_svar X] = maximal_mu_depth_of_evar_in_pattern' (S depth) E ψ
Σ: Signature
E: evar
X: svar
ψ: Pattern
IHψ: (depth : nat) (n : db_index), maximal_mu_depth_of_evar_in_pattern' depth E ψ^[svar:n↦patt_free_svar X] = maximal_mu_depth_of_evar_in_pattern' depth E ψ
depth: nat
n': db_index

maximal_mu_depth_of_evar_in_pattern' depth E ψ^[svar:n'↦patt_free_svar X] = maximal_mu_depth_of_evar_in_pattern' depth E ψ
Σ: Signature
E: evar
X: svar
ψ: Pattern
IHψ: (depth : nat) (n : db_index), maximal_mu_depth_of_evar_in_pattern' depth E ψ^[svar:n↦patt_free_svar X] = maximal_mu_depth_of_evar_in_pattern' depth E ψ
depth: nat
n': db_index

maximal_mu_depth_of_evar_in_pattern' depth E ψ = maximal_mu_depth_of_evar_in_pattern' depth E ψ
reflexivity.
Σ: Signature
E: evar
X: svar
ψ: Pattern
IHψ: (depth : nat) (n : db_index), maximal_mu_depth_of_evar_in_pattern' depth E ψ^[svar:n↦patt_free_svar X] = maximal_mu_depth_of_evar_in_pattern' depth E ψ
depth: nat
n': db_index

maximal_mu_depth_of_evar_in_pattern' (S depth) E ψ^[svar:S n'↦patt_free_svar X] = maximal_mu_depth_of_evar_in_pattern' (S depth) E ψ
Σ: Signature
E: evar
X: svar
ψ: Pattern
IHψ: (depth : nat) (n : db_index), maximal_mu_depth_of_evar_in_pattern' depth E ψ^[svar:n↦patt_free_svar X] = maximal_mu_depth_of_evar_in_pattern' depth E ψ
depth: nat
n': db_index

maximal_mu_depth_of_evar_in_pattern' (S depth) E ψ^[svar:S n'↦patt_free_svar X] = maximal_mu_depth_of_evar_in_pattern' (S depth) E ψ
Σ: Signature
E: evar
X: svar
ψ: Pattern
IHψ: (depth : nat) (n : db_index), maximal_mu_depth_of_evar_in_pattern' depth E ψ^[svar:n↦patt_free_svar X] = maximal_mu_depth_of_evar_in_pattern' depth E ψ
depth: nat
n': db_index

maximal_mu_depth_of_evar_in_pattern' (S depth) E ψ = maximal_mu_depth_of_evar_in_pattern' (S depth) E ψ
reflexivity. } Qed.
Σ: Signature
depth: nat
E: evar
n: db_index
x: evar
ψ: Pattern

E ≠ x → maximal_mu_depth_of_evar_in_pattern' depth E ψ^{evar:n↦x} = maximal_mu_depth_of_evar_in_pattern' depth E ψ
Σ: Signature
depth: nat
E: evar
n: db_index
x: evar
ψ: Pattern

E ≠ x → maximal_mu_depth_of_evar_in_pattern' depth E ψ^{evar:n↦x} = maximal_mu_depth_of_evar_in_pattern' depth E ψ
Σ: Signature
depth: nat
E: evar
n: db_index
x: evar
ψ: Pattern
Hne: E ≠ x

maximal_mu_depth_of_evar_in_pattern' depth E ψ^{evar:n↦x} = maximal_mu_depth_of_evar_in_pattern' depth E ψ
Σ: Signature
depth: nat
E: evar
n: db_index
x: evar
ψ: Pattern
Hne: E ≠ x

maximal_mu_depth_of_evar_in_pattern' depth E ψ^[evar:n↦patt_free_evar x] = maximal_mu_depth_of_evar_in_pattern' depth E ψ
Σ: Signature
E, x: evar
ψ: Pattern
Hne: E ≠ x

(depth : nat) (n : db_index), maximal_mu_depth_of_evar_in_pattern' depth E ψ^[evar:n↦patt_free_evar x] = maximal_mu_depth_of_evar_in_pattern' depth E ψ
Σ: Signature
E, x: evar
n: db_index
Hne: E ≠ x
depth: nat
n': db_index

maximal_mu_depth_of_evar_in_pattern' depth E match compare_nat n n' with | Nat_less _ _ _ => patt_bound_evar n | Nat_equal _ _ _ => patt_free_evar x | Nat_greater _ _ _ => patt_bound_evar (Nat.pred n) end = 0
Σ: Signature
E, x: evar
ψ1, ψ2: Pattern
Hne: E ≠ x
IHψ1: (depth : nat) (n : db_index), maximal_mu_depth_of_evar_in_pattern' depth E ψ1^[evar:n↦patt_free_evar x] = maximal_mu_depth_of_evar_in_pattern' depth E ψ1
IHψ2: (depth : nat) (n : db_index), maximal_mu_depth_of_evar_in_pattern' depth E ψ2^[evar:n↦patt_free_evar x] = maximal_mu_depth_of_evar_in_pattern' depth E ψ2
depth: nat
n': db_index
maximal_mu_depth_of_evar_in_pattern' depth E ψ1^[evar:n'↦patt_free_evar x] `max` maximal_mu_depth_of_evar_in_pattern' depth E ψ2^[evar:n'↦patt_free_evar x] = maximal_mu_depth_of_evar_in_pattern' depth E ψ1 `max` maximal_mu_depth_of_evar_in_pattern' depth E ψ2
Σ: Signature
E, x: evar
ψ1, ψ2: Pattern
Hne: E ≠ x
IHψ1: (depth : nat) (n : db_index), maximal_mu_depth_of_evar_in_pattern' depth E ψ1^[evar:n↦patt_free_evar x] = maximal_mu_depth_of_evar_in_pattern' depth E ψ1
IHψ2: (depth : nat) (n : db_index), maximal_mu_depth_of_evar_in_pattern' depth E ψ2^[evar:n↦patt_free_evar x] = maximal_mu_depth_of_evar_in_pattern' depth E ψ2
depth: nat
n': db_index
maximal_mu_depth_of_evar_in_pattern' depth E ψ1^[evar:n'↦patt_free_evar x] `max` maximal_mu_depth_of_evar_in_pattern' depth E ψ2^[evar:n'↦patt_free_evar x] = maximal_mu_depth_of_evar_in_pattern' depth E ψ1 `max` maximal_mu_depth_of_evar_in_pattern' depth E ψ2
Σ: Signature
E, x: evar
ψ: Pattern
Hne: E ≠ x
IHψ: (depth : nat) (n : db_index), maximal_mu_depth_of_evar_in_pattern' depth E ψ^[evar:n↦patt_free_evar x] = maximal_mu_depth_of_evar_in_pattern' depth E ψ
depth: nat
n': db_index
maximal_mu_depth_of_evar_in_pattern' depth E ψ^[evar:S n'↦patt_free_evar x] = maximal_mu_depth_of_evar_in_pattern' depth E ψ
Σ: Signature
E, x: evar
ψ: Pattern
Hne: E ≠ x
IHψ: (depth : nat) (n : db_index), maximal_mu_depth_of_evar_in_pattern' depth E ψ^[evar:n↦patt_free_evar x] = maximal_mu_depth_of_evar_in_pattern' depth E ψ
depth: nat
n': db_index
maximal_mu_depth_of_evar_in_pattern' (S depth) E ψ^[evar:n'↦ patt_free_evar x] = maximal_mu_depth_of_evar_in_pattern' (S depth) E ψ
Σ: Signature
E, x: evar
n: db_index
Hne: E ≠ x
depth: nat
n': db_index

maximal_mu_depth_of_evar_in_pattern' depth E match compare_nat n n' with | Nat_less _ _ _ => patt_bound_evar n | Nat_equal _ _ _ => patt_free_evar x | Nat_greater _ _ _ => patt_bound_evar (Nat.pred n) end = 0
Σ: Signature
E, x: evar
n: db_index
Hne: E ≠ x
depth: nat
n': db_index
e: n = n'
H: compare_nat n n' = Nat_equal n n' e

(if decide (x = E) then depth else 0) = 0
Σ: Signature
E, x: evar
n: db_index
Hne: E ≠ x
depth: nat
n': db_index
e: n = n'
H: compare_nat n n' = Nat_equal n n' e
e0: x = E
H0: decide (x = E) = left e0

depth = 0
Σ: Signature
E: evar
Hne: E ≠ E
depth: nat
n': db_index
H: compare_nat n' n' = Nat_equal n' n' erefl
H0: decide (E = E) = left erefl

depth = 0
contradiction.
Σ: Signature
E, x: evar
ψ1, ψ2: Pattern
Hne: E ≠ x
IHψ1: (depth : nat) (n : db_index), maximal_mu_depth_of_evar_in_pattern' depth E ψ1^[evar:n↦patt_free_evar x] = maximal_mu_depth_of_evar_in_pattern' depth E ψ1
IHψ2: (depth : nat) (n : db_index), maximal_mu_depth_of_evar_in_pattern' depth E ψ2^[evar:n↦patt_free_evar x] = maximal_mu_depth_of_evar_in_pattern' depth E ψ2
depth: nat
n': db_index

maximal_mu_depth_of_evar_in_pattern' depth E ψ1^[evar:n'↦patt_free_evar x] `max` maximal_mu_depth_of_evar_in_pattern' depth E ψ2^[evar:n'↦patt_free_evar x] = maximal_mu_depth_of_evar_in_pattern' depth E ψ1 `max` maximal_mu_depth_of_evar_in_pattern' depth E ψ2
Σ: Signature
E, x: evar
ψ1, ψ2: Pattern
Hne: E ≠ x
IHψ1: (depth : nat) (n : db_index), maximal_mu_depth_of_evar_in_pattern' depth E ψ1^[evar:n↦patt_free_evar x] = maximal_mu_depth_of_evar_in_pattern' depth E ψ1
IHψ2: (depth : nat) (n : db_index), maximal_mu_depth_of_evar_in_pattern' depth E ψ2^[evar:n↦patt_free_evar x] = maximal_mu_depth_of_evar_in_pattern' depth E ψ2
depth: nat
n': db_index
maximal_mu_depth_of_evar_in_pattern' depth E ψ1^[evar:n'↦patt_free_evar x] `max` maximal_mu_depth_of_evar_in_pattern' depth E ψ2^[evar:n'↦patt_free_evar x] = maximal_mu_depth_of_evar_in_pattern' depth E ψ1 `max` maximal_mu_depth_of_evar_in_pattern' depth E ψ2
Σ: Signature
E, x: evar
ψ: Pattern
Hne: E ≠ x
IHψ: (depth : nat) (n : db_index), maximal_mu_depth_of_evar_in_pattern' depth E ψ^[evar:n↦patt_free_evar x] = maximal_mu_depth_of_evar_in_pattern' depth E ψ
depth: nat
n': db_index
maximal_mu_depth_of_evar_in_pattern' depth E ψ^[evar:S n'↦patt_free_evar x] = maximal_mu_depth_of_evar_in_pattern' depth E ψ
Σ: Signature
E, x: evar
ψ: Pattern
Hne: E ≠ x
IHψ: (depth : nat) (n : db_index), maximal_mu_depth_of_evar_in_pattern' depth E ψ^[evar:n↦patt_free_evar x] = maximal_mu_depth_of_evar_in_pattern' depth E ψ
depth: nat
n': db_index
maximal_mu_depth_of_evar_in_pattern' (S depth) E ψ^[evar:n'↦ patt_free_evar x] = maximal_mu_depth_of_evar_in_pattern' (S depth) E ψ
Σ: Signature
E, x: evar
ψ1, ψ2: Pattern
Hne: E ≠ x
IHψ1: (depth : nat) (n : db_index), maximal_mu_depth_of_evar_in_pattern' depth E ψ1^[evar:n↦patt_free_evar x] = maximal_mu_depth_of_evar_in_pattern' depth E ψ1
IHψ2: (depth : nat) (n : db_index), maximal_mu_depth_of_evar_in_pattern' depth E ψ2^[evar:n↦patt_free_evar x] = maximal_mu_depth_of_evar_in_pattern' depth E ψ2
depth: nat
n': db_index

maximal_mu_depth_of_evar_in_pattern' depth E ψ1^[evar:n'↦patt_free_evar x] `max` maximal_mu_depth_of_evar_in_pattern' depth E ψ2^[evar:n'↦patt_free_evar x] = maximal_mu_depth_of_evar_in_pattern' depth E ψ1 `max` maximal_mu_depth_of_evar_in_pattern' depth E ψ2
Σ: Signature
E, x: evar
ψ1, ψ2: Pattern
Hne: E ≠ x
IHψ1: (depth : nat) (n : db_index), maximal_mu_depth_of_evar_in_pattern' depth E ψ1^[evar:n↦patt_free_evar x] = maximal_mu_depth_of_evar_in_pattern' depth E ψ1
IHψ2: (depth : nat) (n : db_index), maximal_mu_depth_of_evar_in_pattern' depth E ψ2^[evar:n↦patt_free_evar x] = maximal_mu_depth_of_evar_in_pattern' depth E ψ2
depth: nat
n': db_index

maximal_mu_depth_of_evar_in_pattern' depth E ψ1 `max` maximal_mu_depth_of_evar_in_pattern' depth E ψ2^[evar:n'↦patt_free_evar x] = maximal_mu_depth_of_evar_in_pattern' depth E ψ1 `max` maximal_mu_depth_of_evar_in_pattern' depth E ψ2
Σ: Signature
E, x: evar
ψ1, ψ2: Pattern
Hne: E ≠ x
IHψ1: (depth : nat) (n : db_index), maximal_mu_depth_of_evar_in_pattern' depth E ψ1^[evar:n↦patt_free_evar x] = maximal_mu_depth_of_evar_in_pattern' depth E ψ1
IHψ2: (depth : nat) (n : db_index), maximal_mu_depth_of_evar_in_pattern' depth E ψ2^[evar:n↦patt_free_evar x] = maximal_mu_depth_of_evar_in_pattern' depth E ψ2
depth: nat
n': db_index

maximal_mu_depth_of_evar_in_pattern' depth E ψ1 `max` maximal_mu_depth_of_evar_in_pattern' depth E ψ2 = maximal_mu_depth_of_evar_in_pattern' depth E ψ1 `max` maximal_mu_depth_of_evar_in_pattern' depth E ψ2
reflexivity.
Σ: Signature
E, x: evar
ψ1, ψ2: Pattern
Hne: E ≠ x
IHψ1: (depth : nat) (n : db_index), maximal_mu_depth_of_evar_in_pattern' depth E ψ1^[evar:n↦patt_free_evar x] = maximal_mu_depth_of_evar_in_pattern' depth E ψ1
IHψ2: (depth : nat) (n : db_index), maximal_mu_depth_of_evar_in_pattern' depth E ψ2^[evar:n↦patt_free_evar x] = maximal_mu_depth_of_evar_in_pattern' depth E ψ2
depth: nat
n': db_index

maximal_mu_depth_of_evar_in_pattern' depth E ψ1^[evar:n'↦patt_free_evar x] `max` maximal_mu_depth_of_evar_in_pattern' depth E ψ2^[evar:n'↦patt_free_evar x] = maximal_mu_depth_of_evar_in_pattern' depth E ψ1 `max` maximal_mu_depth_of_evar_in_pattern' depth E ψ2
Σ: Signature
E, x: evar
ψ: Pattern
Hne: E ≠ x
IHψ: (depth : nat) (n : db_index), maximal_mu_depth_of_evar_in_pattern' depth E ψ^[evar:n↦patt_free_evar x] = maximal_mu_depth_of_evar_in_pattern' depth E ψ
depth: nat
n': db_index
maximal_mu_depth_of_evar_in_pattern' depth E ψ^[evar:S n'↦patt_free_evar x] = maximal_mu_depth_of_evar_in_pattern' depth E ψ
Σ: Signature
E, x: evar
ψ: Pattern
Hne: E ≠ x
IHψ: (depth : nat) (n : db_index), maximal_mu_depth_of_evar_in_pattern' depth E ψ^[evar:n↦patt_free_evar x] = maximal_mu_depth_of_evar_in_pattern' depth E ψ
depth: nat
n': db_index
maximal_mu_depth_of_evar_in_pattern' (S depth) E ψ^[evar:n'↦ patt_free_evar x] = maximal_mu_depth_of_evar_in_pattern' (S depth) E ψ
Σ: Signature
E, x: evar
ψ1, ψ2: Pattern
Hne: E ≠ x
IHψ1: (depth : nat) (n : db_index), maximal_mu_depth_of_evar_in_pattern' depth E ψ1^[evar:n↦patt_free_evar x] = maximal_mu_depth_of_evar_in_pattern' depth E ψ1
IHψ2: (depth : nat) (n : db_index), maximal_mu_depth_of_evar_in_pattern' depth E ψ2^[evar:n↦patt_free_evar x] = maximal_mu_depth_of_evar_in_pattern' depth E ψ2
depth: nat
n': db_index

maximal_mu_depth_of_evar_in_pattern' depth E ψ1^[evar:n'↦patt_free_evar x] `max` maximal_mu_depth_of_evar_in_pattern' depth E ψ2^[evar:n'↦patt_free_evar x] = maximal_mu_depth_of_evar_in_pattern' depth E ψ1 `max` maximal_mu_depth_of_evar_in_pattern' depth E ψ2
Σ: Signature
E, x: evar
ψ1, ψ2: Pattern
Hne: E ≠ x
IHψ1: (depth : nat) (n : db_index), maximal_mu_depth_of_evar_in_pattern' depth E ψ1^[evar:n↦patt_free_evar x] = maximal_mu_depth_of_evar_in_pattern' depth E ψ1
IHψ2: (depth : nat) (n : db_index), maximal_mu_depth_of_evar_in_pattern' depth E ψ2^[evar:n↦patt_free_evar x] = maximal_mu_depth_of_evar_in_pattern' depth E ψ2
depth: nat
n': db_index

maximal_mu_depth_of_evar_in_pattern' depth E ψ1 `max` maximal_mu_depth_of_evar_in_pattern' depth E ψ2^[evar:n'↦patt_free_evar x] = maximal_mu_depth_of_evar_in_pattern' depth E ψ1 `max` maximal_mu_depth_of_evar_in_pattern' depth E ψ2
Σ: Signature
E, x: evar
ψ1, ψ2: Pattern
Hne: E ≠ x
IHψ1: (depth : nat) (n : db_index), maximal_mu_depth_of_evar_in_pattern' depth E ψ1^[evar:n↦patt_free_evar x] = maximal_mu_depth_of_evar_in_pattern' depth E ψ1
IHψ2: (depth : nat) (n : db_index), maximal_mu_depth_of_evar_in_pattern' depth E ψ2^[evar:n↦patt_free_evar x] = maximal_mu_depth_of_evar_in_pattern' depth E ψ2
depth: nat
n': db_index

maximal_mu_depth_of_evar_in_pattern' depth E ψ1 `max` maximal_mu_depth_of_evar_in_pattern' depth E ψ2 = maximal_mu_depth_of_evar_in_pattern' depth E ψ1 `max` maximal_mu_depth_of_evar_in_pattern' depth E ψ2
reflexivity.
Σ: Signature
E, x: evar
ψ: Pattern
Hne: E ≠ x
IHψ: (depth : nat) (n : db_index), maximal_mu_depth_of_evar_in_pattern' depth E ψ^[evar:n↦patt_free_evar x] = maximal_mu_depth_of_evar_in_pattern' depth E ψ
depth: nat
n': db_index

maximal_mu_depth_of_evar_in_pattern' depth E ψ^[evar:S n'↦patt_free_evar x] = maximal_mu_depth_of_evar_in_pattern' depth E ψ
Σ: Signature
E, x: evar
ψ: Pattern
Hne: E ≠ x
IHψ: (depth : nat) (n : db_index), maximal_mu_depth_of_evar_in_pattern' depth E ψ^[evar:n↦patt_free_evar x] = maximal_mu_depth_of_evar_in_pattern' depth E ψ
depth: nat
n': db_index
maximal_mu_depth_of_evar_in_pattern' (S depth) E ψ^[evar:n'↦ patt_free_evar x] = maximal_mu_depth_of_evar_in_pattern' (S depth) E ψ
Σ: Signature
E, x: evar
ψ: Pattern
Hne: E ≠ x
IHψ: (depth : nat) (n : db_index), maximal_mu_depth_of_evar_in_pattern' depth E ψ^[evar:n↦patt_free_evar x] = maximal_mu_depth_of_evar_in_pattern' depth E ψ
depth: nat
n': db_index

maximal_mu_depth_of_evar_in_pattern' depth E ψ^[evar:S n'↦patt_free_evar x] = maximal_mu_depth_of_evar_in_pattern' depth E ψ
Σ: Signature
E, x: evar
ψ: Pattern
Hne: E ≠ x
IHψ: (depth : nat) (n : db_index), maximal_mu_depth_of_evar_in_pattern' depth E ψ^[evar:n↦patt_free_evar x] = maximal_mu_depth_of_evar_in_pattern' depth E ψ
depth: nat
n': db_index

maximal_mu_depth_of_evar_in_pattern' depth E ψ = maximal_mu_depth_of_evar_in_pattern' depth E ψ
reflexivity.
Σ: Signature
E, x: evar
ψ: Pattern
Hne: E ≠ x
IHψ: (depth : nat) (n : db_index), maximal_mu_depth_of_evar_in_pattern' depth E ψ^[evar:n↦patt_free_evar x] = maximal_mu_depth_of_evar_in_pattern' depth E ψ
depth: nat
n': db_index

maximal_mu_depth_of_evar_in_pattern' (S depth) E ψ^[evar:n'↦patt_free_evar x] = maximal_mu_depth_of_evar_in_pattern' (S depth) E ψ
Σ: Signature
E, x: evar
ψ: Pattern
Hne: E ≠ x
IHψ: (depth : nat) (n : db_index), maximal_mu_depth_of_evar_in_pattern' depth E ψ^[evar:n↦patt_free_evar x] = maximal_mu_depth_of_evar_in_pattern' depth E ψ
depth: nat
n': db_index

maximal_mu_depth_of_evar_in_pattern' (S depth) E ψ^[evar:n'↦patt_free_evar x] = maximal_mu_depth_of_evar_in_pattern' (S depth) E ψ
Σ: Signature
E, x: evar
ψ: Pattern
Hne: E ≠ x
IHψ: (depth : nat) (n : db_index), maximal_mu_depth_of_evar_in_pattern' depth E ψ^[evar:n↦patt_free_evar x] = maximal_mu_depth_of_evar_in_pattern' depth E ψ
depth: nat
n': db_index

maximal_mu_depth_of_evar_in_pattern' (S depth) E ψ = maximal_mu_depth_of_evar_in_pattern' (S depth) E ψ
reflexivity. } Qed.
Σ: Signature
E: evar
ψ: Pattern
depth: nat

E ∉ free_evars ψ → maximal_mu_depth_of_evar_in_pattern' depth E ψ = 0
Σ: Signature
E: evar
ψ: Pattern
depth: nat

E ∉ free_evars ψ → maximal_mu_depth_of_evar_in_pattern' depth E ψ = 0
Σ: Signature
E: evar
ψ: Pattern
depth: nat
Hnotin: E ∉ free_evars ψ

maximal_mu_depth_of_evar_in_pattern' depth E ψ = 0
Σ: Signature
ψ: Pattern

(E : evar) (depth : nat), E ∉ free_evars ψ → maximal_mu_depth_of_evar_in_pattern' depth E ψ = 0
Σ: Signature
x, E: evar
depth: nat
Hnotin: E ∉ {[x]}

(if decide (x = E) then depth else 0) = 0
Σ: Signature
ψ1, ψ2: Pattern
IHψ1: (E : evar) (depth : nat), E ∉ free_evars ψ1 → maximal_mu_depth_of_evar_in_pattern' depth E ψ1 = 0
IHψ2: (E : evar) (depth : nat), E ∉ free_evars ψ2 → maximal_mu_depth_of_evar_in_pattern' depth E ψ2 = 0
E: evar
depth: nat
Hnotin: E ∉ free_evars ψ1 ∪ free_evars ψ2
maximal_mu_depth_of_evar_in_pattern' depth E ψ1 `max` maximal_mu_depth_of_evar_in_pattern' depth E ψ2 = 0
Σ: Signature
ψ1, ψ2: Pattern
IHψ1: (E : evar) (depth : nat), E ∉ free_evars ψ1 → maximal_mu_depth_of_evar_in_pattern' depth E ψ1 = 0
IHψ2: (E : evar) (depth : nat), E ∉ free_evars ψ2 → maximal_mu_depth_of_evar_in_pattern' depth E ψ2 = 0
E: evar
depth: nat
Hnotin: E ∉ free_evars ψ1 ∪ free_evars ψ2
maximal_mu_depth_of_evar_in_pattern' depth E ψ1 `max` maximal_mu_depth_of_evar_in_pattern' depth E ψ2 = 0
Σ: Signature
ψ: Pattern
IHψ: (E : evar) (depth : nat), E ∉ free_evars ψ → maximal_mu_depth_of_evar_in_pattern' depth E ψ = 0
E: evar
depth: nat
Hnotin: E ∉ free_evars ψ
maximal_mu_depth_of_evar_in_pattern' depth E ψ = 0
Σ: Signature
ψ: Pattern
IHψ: (E : evar) (depth : nat), E ∉ free_evars ψ → maximal_mu_depth_of_evar_in_pattern' depth E ψ = 0
E: evar
depth: nat
Hnotin: E ∉ free_evars ψ
maximal_mu_depth_of_evar_in_pattern' (S depth) E ψ = 0
Σ: Signature
x, E: evar
depth: nat
Hnotin: E ∉ {[x]}

(if decide (x = E) then depth else 0) = 0
Σ: Signature
x, E: evar
depth: nat
Hnotin: E ∉ {[x]}
e: x = E
H: decide (x = E) = left e

depth = 0
Σ: Signature
x, E: evar
depth: nat
Hnotin: E ∉ {[x]}
n: x ≠ E
H: decide (x = E) = right n
0 = 0
Σ: Signature
x, E: evar
depth: nat
Hnotin: E ∉ {[x]}
n: x ≠ E
H: decide (x = E) = right n

0 = 0
reflexivity.
Σ: Signature
ψ1, ψ2: Pattern
IHψ1: (E : evar) (depth : nat), E ∉ free_evars ψ1 → maximal_mu_depth_of_evar_in_pattern' depth E ψ1 = 0
IHψ2: (E : evar) (depth : nat), E ∉ free_evars ψ2 → maximal_mu_depth_of_evar_in_pattern' depth E ψ2 = 0
E: evar
depth: nat
Hnotin: E ∉ free_evars ψ1 ∪ free_evars ψ2

maximal_mu_depth_of_evar_in_pattern' depth E ψ1 `max` maximal_mu_depth_of_evar_in_pattern' depth E ψ2 = 0
Σ: Signature
ψ1, ψ2: Pattern
IHψ1: (E : evar) (depth : nat), E ∉ free_evars ψ1 → maximal_mu_depth_of_evar_in_pattern' depth E ψ1 = 0
IHψ2: (E : evar) (depth : nat), E ∉ free_evars ψ2 → maximal_mu_depth_of_evar_in_pattern' depth E ψ2 = 0
E: evar
depth: nat
Hnotin: E ∉ free_evars ψ1 ∪ free_evars ψ2
maximal_mu_depth_of_evar_in_pattern' depth E ψ1 `max` maximal_mu_depth_of_evar_in_pattern' depth E ψ2 = 0
Σ: Signature
ψ: Pattern
IHψ: (E : evar) (depth : nat), E ∉ free_evars ψ → maximal_mu_depth_of_evar_in_pattern' depth E ψ = 0
E: evar
depth: nat
Hnotin: E ∉ free_evars ψ
maximal_mu_depth_of_evar_in_pattern' depth E ψ = 0
Σ: Signature
ψ: Pattern
IHψ: (E : evar) (depth : nat), E ∉ free_evars ψ → maximal_mu_depth_of_evar_in_pattern' depth E ψ = 0
E: evar
depth: nat
Hnotin: E ∉ free_evars ψ
maximal_mu_depth_of_evar_in_pattern' (S depth) E ψ = 0
Σ: Signature
ψ1, ψ2: Pattern
IHψ1: (E : evar) (depth : nat), E ∉ free_evars ψ1 → maximal_mu_depth_of_evar_in_pattern' depth E ψ1 = 0
IHψ2: (E : evar) (depth : nat), E ∉ free_evars ψ2 → maximal_mu_depth_of_evar_in_pattern' depth E ψ2 = 0
E: evar
depth: nat
Hnotin: E ∉ free_evars ψ1 ∪ free_evars ψ2

maximal_mu_depth_of_evar_in_pattern' depth E ψ1 `max` maximal_mu_depth_of_evar_in_pattern' depth E ψ2 = 0
Σ: Signature
ψ1, ψ2: Pattern
IHψ1: (E : evar) (depth : nat), E ∉ free_evars ψ1 → maximal_mu_depth_of_evar_in_pattern' depth E ψ1 = 0
IHψ2: (E : evar) (depth : nat), E ∉ free_evars ψ2 → maximal_mu_depth_of_evar_in_pattern' depth E ψ2 = 0
E: evar
depth: nat
Hnotin: E ∉ free_evars ψ1 ∪ free_evars ψ2

E ∉ free_evars ψ1
Σ: Signature
ψ1, ψ2: Pattern
IHψ1: (E : evar) (depth : nat), E ∉ free_evars ψ1 → maximal_mu_depth_of_evar_in_pattern' depth E ψ1 = 0
IHψ2: (E : evar) (depth : nat), E ∉ free_evars ψ2 → maximal_mu_depth_of_evar_in_pattern' depth E ψ2 = 0
E: evar
depth: nat
Hnotin: E ∉ free_evars ψ1 ∪ free_evars ψ2
0 `max` maximal_mu_depth_of_evar_in_pattern' depth E ψ2 = 0
Σ: Signature
ψ1, ψ2: Pattern
IHψ1: (E : evar) (depth : nat), E ∉ free_evars ψ1 → maximal_mu_depth_of_evar_in_pattern' depth E ψ1 = 0
IHψ2: (E : evar) (depth : nat), E ∉ free_evars ψ2 → maximal_mu_depth_of_evar_in_pattern' depth E ψ2 = 0
E: evar
depth: nat
Hnotin: E ∉ free_evars ψ1 ∪ free_evars ψ2

0 `max` maximal_mu_depth_of_evar_in_pattern' depth E ψ2 = 0
Σ: Signature
ψ1, ψ2: Pattern
IHψ1: (E : evar) (depth : nat), E ∉ free_evars ψ1 → maximal_mu_depth_of_evar_in_pattern' depth E ψ1 = 0
IHψ2: (E : evar) (depth : nat), E ∉ free_evars ψ2 → maximal_mu_depth_of_evar_in_pattern' depth E ψ2 = 0
E: evar
depth: nat
Hnotin: E ∉ free_evars ψ1 ∪ free_evars ψ2

E ∉ free_evars ψ2
Σ: Signature
ψ1, ψ2: Pattern
IHψ1: (E : evar) (depth : nat), E ∉ free_evars ψ1 → maximal_mu_depth_of_evar_in_pattern' depth E ψ1 = 0
IHψ2: (E : evar) (depth : nat), E ∉ free_evars ψ2 → maximal_mu_depth_of_evar_in_pattern' depth E ψ2 = 0
E: evar
depth: nat
Hnotin: E ∉ free_evars ψ1 ∪ free_evars ψ2
0 `max` 0 = 0
Σ: Signature
ψ1, ψ2: Pattern
IHψ1: (E : evar) (depth : nat), E ∉ free_evars ψ1 → maximal_mu_depth_of_evar_in_pattern' depth E ψ1 = 0
IHψ2: (E : evar) (depth : nat), E ∉ free_evars ψ2 → maximal_mu_depth_of_evar_in_pattern' depth E ψ2 = 0
E: evar
depth: nat
Hnotin: E ∉ free_evars ψ1 ∪ free_evars ψ2

0 `max` 0 = 0
reflexivity.
Σ: Signature
ψ1, ψ2: Pattern
IHψ1: (E : evar) (depth : nat), E ∉ free_evars ψ1 → maximal_mu_depth_of_evar_in_pattern' depth E ψ1 = 0
IHψ2: (E : evar) (depth : nat), E ∉ free_evars ψ2 → maximal_mu_depth_of_evar_in_pattern' depth E ψ2 = 0
E: evar
depth: nat
Hnotin: E ∉ free_evars ψ1 ∪ free_evars ψ2

maximal_mu_depth_of_evar_in_pattern' depth E ψ1 `max` maximal_mu_depth_of_evar_in_pattern' depth E ψ2 = 0
Σ: Signature
ψ: Pattern
IHψ: (E : evar) (depth : nat), E ∉ free_evars ψ → maximal_mu_depth_of_evar_in_pattern' depth E ψ = 0
E: evar
depth: nat
Hnotin: E ∉ free_evars ψ
maximal_mu_depth_of_evar_in_pattern' depth E ψ = 0
Σ: Signature
ψ: Pattern
IHψ: (E : evar) (depth : nat), E ∉ free_evars ψ → maximal_mu_depth_of_evar_in_pattern' depth E ψ = 0
E: evar
depth: nat
Hnotin: E ∉ free_evars ψ
maximal_mu_depth_of_evar_in_pattern' (S depth) E ψ = 0
Σ: Signature
ψ1, ψ2: Pattern
IHψ1: (E : evar) (depth : nat), E ∉ free_evars ψ1 → maximal_mu_depth_of_evar_in_pattern' depth E ψ1 = 0
IHψ2: (E : evar) (depth : nat), E ∉ free_evars ψ2 → maximal_mu_depth_of_evar_in_pattern' depth E ψ2 = 0
E: evar
depth: nat
Hnotin: E ∉ free_evars ψ1 ∪ free_evars ψ2

maximal_mu_depth_of_evar_in_pattern' depth E ψ1 `max` maximal_mu_depth_of_evar_in_pattern' depth E ψ2 = 0
Σ: Signature
ψ1, ψ2: Pattern
IHψ1: (E : evar) (depth : nat), E ∉ free_evars ψ1 → maximal_mu_depth_of_evar_in_pattern' depth E ψ1 = 0
IHψ2: (E : evar) (depth : nat), E ∉ free_evars ψ2 → maximal_mu_depth_of_evar_in_pattern' depth E ψ2 = 0
E: evar
depth: nat
Hnotin: E ∉ free_evars ψ1 ∪ free_evars ψ2

E ∉ free_evars ψ1
Σ: Signature
ψ1, ψ2: Pattern
IHψ1: (E : evar) (depth : nat), E ∉ free_evars ψ1 → maximal_mu_depth_of_evar_in_pattern' depth E ψ1 = 0
IHψ2: (E : evar) (depth : nat), E ∉ free_evars ψ2 → maximal_mu_depth_of_evar_in_pattern' depth E ψ2 = 0
E: evar
depth: nat
Hnotin: E ∉ free_evars ψ1 ∪ free_evars ψ2
0 `max` maximal_mu_depth_of_evar_in_pattern' depth E ψ2 = 0
Σ: Signature
ψ1, ψ2: Pattern
IHψ1: (E : evar) (depth : nat), E ∉ free_evars ψ1 → maximal_mu_depth_of_evar_in_pattern' depth E ψ1 = 0
IHψ2: (E : evar) (depth : nat), E ∉ free_evars ψ2 → maximal_mu_depth_of_evar_in_pattern' depth E ψ2 = 0
E: evar
depth: nat
Hnotin: E ∉ free_evars ψ1 ∪ free_evars ψ2

0 `max` maximal_mu_depth_of_evar_in_pattern' depth E ψ2 = 0
Σ: Signature
ψ1, ψ2: Pattern
IHψ1: (E : evar) (depth : nat), E ∉ free_evars ψ1 → maximal_mu_depth_of_evar_in_pattern' depth E ψ1 = 0
IHψ2: (E : evar) (depth : nat), E ∉ free_evars ψ2 → maximal_mu_depth_of_evar_in_pattern' depth E ψ2 = 0
E: evar
depth: nat
Hnotin: E ∉ free_evars ψ1 ∪ free_evars ψ2

E ∉ free_evars ψ2
Σ: Signature
ψ1, ψ2: Pattern
IHψ1: (E : evar) (depth : nat), E ∉ free_evars ψ1 → maximal_mu_depth_of_evar_in_pattern' depth E ψ1 = 0
IHψ2: (E : evar) (depth : nat), E ∉ free_evars ψ2 → maximal_mu_depth_of_evar_in_pattern' depth E ψ2 = 0
E: evar
depth: nat
Hnotin: E ∉ free_evars ψ1 ∪ free_evars ψ2
0 `max` 0 = 0
Σ: Signature
ψ1, ψ2: Pattern
IHψ1: (E : evar) (depth : nat), E ∉ free_evars ψ1 → maximal_mu_depth_of_evar_in_pattern' depth E ψ1 = 0
IHψ2: (E : evar) (depth : nat), E ∉ free_evars ψ2 → maximal_mu_depth_of_evar_in_pattern' depth E ψ2 = 0
E: evar
depth: nat
Hnotin: E ∉ free_evars ψ1 ∪ free_evars ψ2

0 `max` 0 = 0
reflexivity.
Σ: Signature
ψ: Pattern
IHψ: (E : evar) (depth : nat), E ∉ free_evars ψ → maximal_mu_depth_of_evar_in_pattern' depth E ψ = 0
E: evar
depth: nat
Hnotin: E ∉ free_evars ψ

maximal_mu_depth_of_evar_in_pattern' depth E ψ = 0
Σ: Signature
ψ: Pattern
IHψ: (E : evar) (depth : nat), E ∉ free_evars ψ → maximal_mu_depth_of_evar_in_pattern' depth E ψ = 0
E: evar
depth: nat
Hnotin: E ∉ free_evars ψ
maximal_mu_depth_of_evar_in_pattern' (S depth) E ψ = 0
Σ: Signature
ψ: Pattern
IHψ: (E : evar) (depth : nat), E ∉ free_evars ψ → maximal_mu_depth_of_evar_in_pattern' depth E ψ = 0
E: evar
depth: nat
Hnotin: E ∉ free_evars ψ

maximal_mu_depth_of_evar_in_pattern' depth E ψ = 0
Σ: Signature
ψ: Pattern
IHψ: (E : evar) (depth : nat), E ∉ free_evars ψ → maximal_mu_depth_of_evar_in_pattern' depth E ψ = 0
E: evar
depth: nat
Hnotin: E ∉ free_evars ψ

E ∉ free_evars ψ
Σ: Signature
ψ: Pattern
IHψ: (E : evar) (depth : nat), E ∉ free_evars ψ → maximal_mu_depth_of_evar_in_pattern' depth E ψ = 0
E: evar
depth: nat
Hnotin: E ∉ free_evars ψ
0 = 0
Σ: Signature
ψ: Pattern
IHψ: (E : evar) (depth : nat), E ∉ free_evars ψ → maximal_mu_depth_of_evar_in_pattern' depth E ψ = 0
E: evar
depth: nat
Hnotin: E ∉ free_evars ψ

0 = 0
reflexivity.
Σ: Signature
ψ: Pattern
IHψ: (E : evar) (depth : nat), E ∉ free_evars ψ → maximal_mu_depth_of_evar_in_pattern' depth E ψ = 0
E: evar
depth: nat
Hnotin: E ∉ free_evars ψ

maximal_mu_depth_of_evar_in_pattern' (S depth) E ψ = 0
Σ: Signature
ψ: Pattern
IHψ: (E : evar) (depth : nat), E ∉ free_evars ψ → maximal_mu_depth_of_evar_in_pattern' depth E ψ = 0
E: evar
depth: nat
Hnotin: E ∉ free_evars ψ

maximal_mu_depth_of_evar_in_pattern' (S depth) E ψ = 0
Σ: Signature
ψ: Pattern
IHψ: (E : evar) (depth : nat), E ∉ free_evars ψ → maximal_mu_depth_of_evar_in_pattern' depth E ψ = 0
E: evar
depth: nat
Hnotin: E ∉ free_evars ψ

E ∉ free_evars ψ
Σ: Signature
ψ: Pattern
IHψ: (E : evar) (depth : nat), E ∉ free_evars ψ → maximal_mu_depth_of_evar_in_pattern' depth E ψ = 0
E: evar
depth: nat
Hnotin: E ∉ free_evars ψ
0 = 0
Σ: Signature
ψ: Pattern
IHψ: (E : evar) (depth : nat), E ∉ free_evars ψ → maximal_mu_depth_of_evar_in_pattern' depth E ψ = 0
E: evar
depth: nat
Hnotin: E ∉ free_evars ψ

0 = 0
reflexivity. } Qed.
Σ: Signature
E: evar
ψ: Pattern
depth: nat

E ∈ free_evars ψ → maximal_mu_depth_of_evar_in_pattern' (S depth) E ψ = S (maximal_mu_depth_of_evar_in_pattern' depth E ψ)
Σ: Signature
E: evar
ψ: Pattern
depth: nat

E ∈ free_evars ψ → maximal_mu_depth_of_evar_in_pattern' (S depth) E ψ = S (maximal_mu_depth_of_evar_in_pattern' depth E ψ)
Σ: Signature
E: evar
ψ: Pattern
depth: nat
Hin: E ∈ free_evars ψ

maximal_mu_depth_of_evar_in_pattern' (S depth) E ψ = S (maximal_mu_depth_of_evar_in_pattern' depth E ψ)
Σ: Signature
ψ: Pattern

(E : evar) (depth : nat), E ∈ free_evars ψ → maximal_mu_depth_of_evar_in_pattern' (S depth) E ψ = S (maximal_mu_depth_of_evar_in_pattern' depth E ψ)
Σ: Signature
x, E: evar
depth: nat
Hin: E ∈ {[x]}

(if decide (x = E) then S depth else 0) = S (if decide (x = E) then depth else 0)
Σ: Signature
x: svar
E: evar
depth: nat
Hin: E ∈ ∅
0 = 1
Σ: Signature
n: db_index
E: evar
depth: nat
Hin: E ∈ ∅
0 = 1
Σ: Signature
n: db_index
E: evar
depth: nat
Hin: E ∈ ∅
0 = 1
Σ: Signature
sigma: symbols
E: evar
depth: nat
Hin: E ∈ ∅
0 = 1
Σ: Signature
ψ1, ψ2: Pattern
IHψ1: (E : evar) (depth : nat), E ∈ free_evars ψ1 → maximal_mu_depth_of_evar_in_pattern' (S depth) E ψ1 = S (maximal_mu_depth_of_evar_in_pattern' depth E ψ1)
IHψ2: (E : evar) (depth : nat), E ∈ free_evars ψ2 → maximal_mu_depth_of_evar_in_pattern' (S depth) E ψ2 = S (maximal_mu_depth_of_evar_in_pattern' depth E ψ2)
E: evar
depth: nat
Hin: E ∈ free_evars ψ1 ∪ free_evars ψ2
maximal_mu_depth_of_evar_in_pattern' (S depth) E ψ1 `max` maximal_mu_depth_of_evar_in_pattern' (S depth) E ψ2 = S (maximal_mu_depth_of_evar_in_pattern' depth E ψ1 `max` maximal_mu_depth_of_evar_in_pattern' depth E ψ2)
Σ: Signature
E: evar
depth: nat
Hin: E ∈ ∅
0 = 1
Σ: Signature
ψ1, ψ2: Pattern
IHψ1: (E : evar) (depth : nat), E ∈ free_evars ψ1 → maximal_mu_depth_of_evar_in_pattern' (S depth) E ψ1 = S (maximal_mu_depth_of_evar_in_pattern' depth E ψ1)
IHψ2: (E : evar) (depth : nat), E ∈ free_evars ψ2 → maximal_mu_depth_of_evar_in_pattern' (S depth) E ψ2 = S (maximal_mu_depth_of_evar_in_pattern' depth E ψ2)
E: evar
depth: nat
Hin: E ∈ free_evars ψ1 ∪ free_evars ψ2
maximal_mu_depth_of_evar_in_pattern' (S depth) E ψ1 `max` maximal_mu_depth_of_evar_in_pattern' (S depth) E ψ2 = S (maximal_mu_depth_of_evar_in_pattern' depth E ψ1 `max` maximal_mu_depth_of_evar_in_pattern' depth E ψ2)
Σ: Signature
ψ: Pattern
IHψ: (E : evar) (depth : nat), E ∈ free_evars ψ → maximal_mu_depth_of_evar_in_pattern' (S depth) E ψ = S (maximal_mu_depth_of_evar_in_pattern' depth E ψ)
E: evar
depth: nat
Hin: E ∈ free_evars ψ
maximal_mu_depth_of_evar_in_pattern' (S depth) E ψ = S (maximal_mu_depth_of_evar_in_pattern' depth E ψ)
Σ: Signature
ψ: Pattern
IHψ: (E : evar) (depth : nat), E ∈ free_evars ψ → maximal_mu_depth_of_evar_in_pattern' (S depth) E ψ = S (maximal_mu_depth_of_evar_in_pattern' depth E ψ)
E: evar
depth: nat
Hin: E ∈ free_evars ψ
maximal_mu_depth_of_evar_in_pattern' (S (S depth)) E ψ = S (maximal_mu_depth_of_evar_in_pattern' (S depth) E ψ)
Σ: Signature
x, E: evar
depth: nat
Hin: E ∈ {[x]}

(if decide (x = E) then S depth else 0) = S (if decide (x = E) then depth else 0)
Σ: Signature
x, E: evar
depth: nat
Hin: E ∈ {[x]}
e: x = E
H: decide (x = E) = left e

S depth = S depth
Σ: Signature
x, E: evar
depth: nat
Hin: E ∈ {[x]}
n: x ≠ E
H: decide (x = E) = right n
0 = 1
Σ: Signature
x, E: evar
depth: nat
Hin: E ∈ {[x]}
n: x ≠ E
H: decide (x = E) = right n

0 = 1
set_solver.
Σ: Signature
x: svar
E: evar
depth: nat
Hin: E ∈ ∅

0 = 1
Σ: Signature
n: db_index
E: evar
depth: nat
Hin: E ∈ ∅
0 = 1
Σ: Signature
n: db_index
E: evar
depth: nat
Hin: E ∈ ∅
0 = 1
Σ: Signature
sigma: symbols
E: evar
depth: nat
Hin: E ∈ ∅
0 = 1
Σ: Signature
ψ1, ψ2: Pattern
IHψ1: (E : evar) (depth : nat), E ∈ free_evars ψ1 → maximal_mu_depth_of_evar_in_pattern' (S depth) E ψ1 = S (maximal_mu_depth_of_evar_in_pattern' depth E ψ1)
IHψ2: (E : evar) (depth : nat), E ∈ free_evars ψ2 → maximal_mu_depth_of_evar_in_pattern' (S depth) E ψ2 = S (maximal_mu_depth_of_evar_in_pattern' depth E ψ2)
E: evar
depth: nat
Hin: E ∈ free_evars ψ1 ∪ free_evars ψ2
maximal_mu_depth_of_evar_in_pattern' (S depth) E ψ1 `max` maximal_mu_depth_of_evar_in_pattern' (S depth) E ψ2 = S (maximal_mu_depth_of_evar_in_pattern' depth E ψ1 `max` maximal_mu_depth_of_evar_in_pattern' depth E ψ2)
Σ: Signature
E: evar
depth: nat
Hin: E ∈ ∅
0 = 1
Σ: Signature
ψ1, ψ2: Pattern
IHψ1: (E : evar) (depth : nat), E ∈ free_evars ψ1 → maximal_mu_depth_of_evar_in_pattern' (S depth) E ψ1 = S (maximal_mu_depth_of_evar_in_pattern' depth E ψ1)
IHψ2: (E : evar) (depth : nat), E ∈ free_evars ψ2 → maximal_mu_depth_of_evar_in_pattern' (S depth) E ψ2 = S (maximal_mu_depth_of_evar_in_pattern' depth E ψ2)
E: evar
depth: nat
Hin: E ∈ free_evars ψ1 ∪ free_evars ψ2
maximal_mu_depth_of_evar_in_pattern' (S depth) E ψ1 `max` maximal_mu_depth_of_evar_in_pattern' (S depth) E ψ2 = S (maximal_mu_depth_of_evar_in_pattern' depth E ψ1 `max` maximal_mu_depth_of_evar_in_pattern' depth E ψ2)
Σ: Signature
ψ: Pattern
IHψ: (E : evar) (depth : nat), E ∈ free_evars ψ → maximal_mu_depth_of_evar_in_pattern' (S depth) E ψ = S (maximal_mu_depth_of_evar_in_pattern' depth E ψ)
E: evar
depth: nat
Hin: E ∈ free_evars ψ
maximal_mu_depth_of_evar_in_pattern' (S depth) E ψ = S (maximal_mu_depth_of_evar_in_pattern' depth E ψ)
Σ: Signature
ψ: Pattern
IHψ: (E : evar) (depth : nat), E ∈ free_evars ψ → maximal_mu_depth_of_evar_in_pattern' (S depth) E ψ = S (maximal_mu_depth_of_evar_in_pattern' depth E ψ)
E: evar
depth: nat
Hin: E ∈ free_evars ψ
maximal_mu_depth_of_evar_in_pattern' (S (S depth)) E ψ = S (maximal_mu_depth_of_evar_in_pattern' (S depth) E ψ)
Σ: Signature
x: svar
E: evar
depth: nat
Hin: E ∈ ∅

0 = 1
set_solver.
Σ: Signature
n: db_index
E: evar
depth: nat
Hin: E ∈ ∅

0 = 1
Σ: Signature
n: db_index
E: evar
depth: nat
Hin: E ∈ ∅
0 = 1
Σ: Signature
sigma: symbols
E: evar
depth: nat
Hin: E ∈ ∅
0 = 1
Σ: Signature
ψ1, ψ2: Pattern
IHψ1: (E : evar) (depth : nat), E ∈ free_evars ψ1 → maximal_mu_depth_of_evar_in_pattern' (S depth) E ψ1 = S (maximal_mu_depth_of_evar_in_pattern' depth E ψ1)
IHψ2: (E : evar) (depth : nat), E ∈ free_evars ψ2 → maximal_mu_depth_of_evar_in_pattern' (S depth) E ψ2 = S (maximal_mu_depth_of_evar_in_pattern' depth E ψ2)
E: evar
depth: nat
Hin: E ∈ free_evars ψ1 ∪ free_evars ψ2
maximal_mu_depth_of_evar_in_pattern' (S depth) E ψ1 `max` maximal_mu_depth_of_evar_in_pattern' (S depth) E ψ2 = S (maximal_mu_depth_of_evar_in_pattern' depth E ψ1 `max` maximal_mu_depth_of_evar_in_pattern' depth E ψ2)
Σ: Signature
E: evar
depth: nat
Hin: E ∈ ∅
0 = 1
Σ: Signature
ψ1, ψ2: Pattern
IHψ1: (E : evar) (depth : nat), E ∈ free_evars ψ1 → maximal_mu_depth_of_evar_in_pattern' (S depth) E ψ1 = S (maximal_mu_depth_of_evar_in_pattern' depth E ψ1)
IHψ2: (E : evar) (depth : nat), E ∈ free_evars ψ2 → maximal_mu_depth_of_evar_in_pattern' (S depth) E ψ2 = S (maximal_mu_depth_of_evar_in_pattern' depth E ψ2)
E: evar
depth: nat
Hin: E ∈ free_evars ψ1 ∪ free_evars ψ2
maximal_mu_depth_of_evar_in_pattern' (S depth) E ψ1 `max` maximal_mu_depth_of_evar_in_pattern' (S depth) E ψ2 = S (maximal_mu_depth_of_evar_in_pattern' depth E ψ1 `max` maximal_mu_depth_of_evar_in_pattern' depth E ψ2)
Σ: Signature
ψ: Pattern
IHψ: (E : evar) (depth : nat), E ∈ free_evars ψ → maximal_mu_depth_of_evar_in_pattern' (S depth) E ψ = S (maximal_mu_depth_of_evar_in_pattern' depth E ψ)
E: evar
depth: nat
Hin: E ∈ free_evars ψ
maximal_mu_depth_of_evar_in_pattern' (S depth) E ψ = S (maximal_mu_depth_of_evar_in_pattern' depth E ψ)
Σ: Signature
ψ: Pattern
IHψ: (E : evar) (depth : nat), E ∈ free_evars ψ → maximal_mu_depth_of_evar_in_pattern' (S depth) E ψ = S (maximal_mu_depth_of_evar_in_pattern' depth E ψ)
E: evar
depth: nat
Hin: E ∈ free_evars ψ
maximal_mu_depth_of_evar_in_pattern' (S (S depth)) E ψ = S (maximal_mu_depth_of_evar_in_pattern' (S depth) E ψ)
Σ: Signature
n: db_index
E: evar
depth: nat
Hin: E ∈ ∅

0 = 1
set_solver.
Σ: Signature
n: db_index
E: evar
depth: nat
Hin: E ∈ ∅

0 = 1
Σ: Signature
sigma: symbols
E: evar
depth: nat
Hin: E ∈ ∅
0 = 1
Σ: Signature
ψ1, ψ2: Pattern
IHψ1: (E : evar) (depth : nat), E ∈ free_evars ψ1 → maximal_mu_depth_of_evar_in_pattern' (S depth) E ψ1 = S (maximal_mu_depth_of_evar_in_pattern' depth E ψ1)
IHψ2: (E : evar) (depth : nat), E ∈ free_evars ψ2 → maximal_mu_depth_of_evar_in_pattern' (S depth) E ψ2 = S (maximal_mu_depth_of_evar_in_pattern' depth E ψ2)
E: evar
depth: nat
Hin: E ∈ free_evars ψ1 ∪ free_evars ψ2
maximal_mu_depth_of_evar_in_pattern' (S depth) E ψ1 `max` maximal_mu_depth_of_evar_in_pattern' (S depth) E ψ2 = S (maximal_mu_depth_of_evar_in_pattern' depth E ψ1 `max` maximal_mu_depth_of_evar_in_pattern' depth E ψ2)
Σ: Signature
E: evar
depth: nat
Hin: E ∈ ∅
0 = 1
Σ: Signature
ψ1, ψ2: Pattern
IHψ1: (E : evar) (depth : nat), E ∈ free_evars ψ1 → maximal_mu_depth_of_evar_in_pattern' (S depth) E ψ1 = S (maximal_mu_depth_of_evar_in_pattern' depth E ψ1)
IHψ2: (E : evar) (depth : nat), E ∈ free_evars ψ2 → maximal_mu_depth_of_evar_in_pattern' (S depth) E ψ2 = S (maximal_mu_depth_of_evar_in_pattern' depth E ψ2)
E: evar
depth: nat
Hin: E ∈ free_evars ψ1 ∪ free_evars ψ2
maximal_mu_depth_of_evar_in_pattern' (S depth) E ψ1 `max` maximal_mu_depth_of_evar_in_pattern' (S depth) E ψ2 = S (maximal_mu_depth_of_evar_in_pattern' depth E ψ1 `max` maximal_mu_depth_of_evar_in_pattern' depth E ψ2)
Σ: Signature
ψ: Pattern
IHψ: (E : evar) (depth : nat), E ∈ free_evars ψ → maximal_mu_depth_of_evar_in_pattern' (S depth) E ψ = S (maximal_mu_depth_of_evar_in_pattern' depth E ψ)
E: evar
depth: nat
Hin: E ∈ free_evars ψ
maximal_mu_depth_of_evar_in_pattern' (S depth) E ψ = S (maximal_mu_depth_of_evar_in_pattern' depth E ψ)
Σ: Signature
ψ: Pattern
IHψ: (E : evar) (depth : nat), E ∈ free_evars ψ → maximal_mu_depth_of_evar_in_pattern' (S depth) E ψ = S (maximal_mu_depth_of_evar_in_pattern' depth E ψ)
E: evar
depth: nat
Hin: E ∈ free_evars ψ
maximal_mu_depth_of_evar_in_pattern' (S (S depth)) E ψ = S (maximal_mu_depth_of_evar_in_pattern' (S depth) E ψ)
Σ: Signature
n: db_index
E: evar
depth: nat
Hin: E ∈ ∅

0 = 1
set_solver.
Σ: Signature
sigma: symbols
E: evar
depth: nat
Hin: E ∈ ∅

0 = 1
Σ: Signature
ψ1, ψ2: Pattern
IHψ1: (E : evar) (depth : nat), E ∈ free_evars ψ1 → maximal_mu_depth_of_evar_in_pattern' (S depth) E ψ1 = S (maximal_mu_depth_of_evar_in_pattern' depth E ψ1)
IHψ2: (E : evar) (depth : nat), E ∈ free_evars ψ2 → maximal_mu_depth_of_evar_in_pattern' (S depth) E ψ2 = S (maximal_mu_depth_of_evar_in_pattern' depth E ψ2)
E: evar
depth: nat
Hin: E ∈ free_evars ψ1 ∪ free_evars ψ2
maximal_mu_depth_of_evar_in_pattern' (S depth) E ψ1 `max` maximal_mu_depth_of_evar_in_pattern' (S depth) E ψ2 = S (maximal_mu_depth_of_evar_in_pattern' depth E ψ1 `max` maximal_mu_depth_of_evar_in_pattern' depth E ψ2)
Σ: Signature
E: evar
depth: nat
Hin: E ∈ ∅
0 = 1
Σ: Signature
ψ1, ψ2: Pattern
IHψ1: (E : evar) (depth : nat), E ∈ free_evars ψ1 → maximal_mu_depth_of_evar_in_pattern' (S depth) E ψ1 = S (maximal_mu_depth_of_evar_in_pattern' depth E ψ1)
IHψ2: (E : evar) (depth : nat), E ∈ free_evars ψ2 → maximal_mu_depth_of_evar_in_pattern' (S depth) E ψ2 = S (maximal_mu_depth_of_evar_in_pattern' depth E ψ2)
E: evar
depth: nat
Hin: E ∈ free_evars ψ1 ∪ free_evars ψ2
maximal_mu_depth_of_evar_in_pattern' (S depth) E ψ1 `max` maximal_mu_depth_of_evar_in_pattern' (S depth) E ψ2 = S (maximal_mu_depth_of_evar_in_pattern' depth E ψ1 `max` maximal_mu_depth_of_evar_in_pattern' depth E ψ2)
Σ: Signature
ψ: Pattern
IHψ: (E : evar) (depth : nat), E ∈ free_evars ψ → maximal_mu_depth_of_evar_in_pattern' (S depth) E ψ = S (maximal_mu_depth_of_evar_in_pattern' depth E ψ)
E: evar
depth: nat
Hin: E ∈ free_evars ψ
maximal_mu_depth_of_evar_in_pattern' (S depth) E ψ = S (maximal_mu_depth_of_evar_in_pattern' depth E ψ)
Σ: Signature
ψ: Pattern
IHψ: (E : evar) (depth : nat), E ∈ free_evars ψ → maximal_mu_depth_of_evar_in_pattern' (S depth) E ψ = S (maximal_mu_depth_of_evar_in_pattern' depth E ψ)
E: evar
depth: nat
Hin: E ∈ free_evars ψ
maximal_mu_depth_of_evar_in_pattern' (S (S depth)) E ψ = S (maximal_mu_depth_of_evar_in_pattern' (S depth) E ψ)
Σ: Signature
sigma: symbols
E: evar
depth: nat
Hin: E ∈ ∅

0 = 1
set_solver.
Σ: Signature
ψ1, ψ2: Pattern
IHψ1: (E : evar) (depth : nat), E ∈ free_evars ψ1 → maximal_mu_depth_of_evar_in_pattern' (S depth) E ψ1 = S (maximal_mu_depth_of_evar_in_pattern' depth E ψ1)
IHψ2: (E : evar) (depth : nat), E ∈ free_evars ψ2 → maximal_mu_depth_of_evar_in_pattern' (S depth) E ψ2 = S (maximal_mu_depth_of_evar_in_pattern' depth E ψ2)
E: evar
depth: nat
Hin: E ∈ free_evars ψ1 ∪ free_evars ψ2

maximal_mu_depth_of_evar_in_pattern' (S depth) E ψ1 `max` maximal_mu_depth_of_evar_in_pattern' (S depth) E ψ2 = S (maximal_mu_depth_of_evar_in_pattern' depth E ψ1 `max` maximal_mu_depth_of_evar_in_pattern' depth E ψ2)
Σ: Signature
E: evar
depth: nat
Hin: E ∈ ∅
0 = 1
Σ: Signature
ψ1, ψ2: Pattern
IHψ1: (E : evar) (depth : nat), E ∈ free_evars ψ1 → maximal_mu_depth_of_evar_in_pattern' (S depth) E ψ1 = S (maximal_mu_depth_of_evar_in_pattern' depth E ψ1)
IHψ2: (E : evar) (depth : nat), E ∈ free_evars ψ2 → maximal_mu_depth_of_evar_in_pattern' (S depth) E ψ2 = S (maximal_mu_depth_of_evar_in_pattern' depth E ψ2)
E: evar
depth: nat
Hin: E ∈ free_evars ψ1 ∪ free_evars ψ2
maximal_mu_depth_of_evar_in_pattern' (S depth) E ψ1 `max` maximal_mu_depth_of_evar_in_pattern' (S depth) E ψ2 = S (maximal_mu_depth_of_evar_in_pattern' depth E ψ1 `max` maximal_mu_depth_of_evar_in_pattern' depth E ψ2)
Σ: Signature
ψ: Pattern
IHψ: (E : evar) (depth : nat), E ∈ free_evars ψ → maximal_mu_depth_of_evar_in_pattern' (S depth) E ψ = S (maximal_mu_depth_of_evar_in_pattern' depth E ψ)
E: evar
depth: nat
Hin: E ∈ free_evars ψ
maximal_mu_depth_of_evar_in_pattern' (S depth) E ψ = S (maximal_mu_depth_of_evar_in_pattern' depth E ψ)
Σ: Signature
ψ: Pattern
IHψ: (E : evar) (depth : nat), E ∈ free_evars ψ → maximal_mu_depth_of_evar_in_pattern' (S depth) E ψ = S (maximal_mu_depth_of_evar_in_pattern' depth E ψ)
E: evar
depth: nat
Hin: E ∈ free_evars ψ
maximal_mu_depth_of_evar_in_pattern' (S (S depth)) E ψ = S (maximal_mu_depth_of_evar_in_pattern' (S depth) E ψ)
Σ: Signature
ψ1, ψ2: Pattern
IHψ1: (E : evar) (depth : nat), E ∈ free_evars ψ1 → maximal_mu_depth_of_evar_in_pattern' (S depth) E ψ1 = S (maximal_mu_depth_of_evar_in_pattern' depth E ψ1)
IHψ2: (E : evar) (depth : nat), E ∈ free_evars ψ2 → maximal_mu_depth_of_evar_in_pattern' (S depth) E ψ2 = S (maximal_mu_depth_of_evar_in_pattern' depth E ψ2)
E: evar
depth: nat
Hin: E ∈ free_evars ψ1 ∪ free_evars ψ2

maximal_mu_depth_of_evar_in_pattern' (S depth) E ψ1 `max` maximal_mu_depth_of_evar_in_pattern' (S depth) E ψ2 = S (maximal_mu_depth_of_evar_in_pattern' depth E ψ1 `max` maximal_mu_depth_of_evar_in_pattern' depth E ψ2)
Σ: Signature
ψ1, ψ2: Pattern
IHψ1: (E : evar) (depth : nat), E ∈ free_evars ψ1 → maximal_mu_depth_of_evar_in_pattern' (S depth) E ψ1 = S (maximal_mu_depth_of_evar_in_pattern' depth E ψ1)
IHψ2: (E : evar) (depth : nat), E ∈ free_evars ψ2 → maximal_mu_depth_of_evar_in_pattern' (S depth) E ψ2 = S (maximal_mu_depth_of_evar_in_pattern' depth E ψ2)
E: evar
depth: nat
Hin: E ∈ free_evars ψ1 ∪ free_evars ψ2
e: E ∈ free_evars ψ1
e0: E ∈ free_evars ψ2

maximal_mu_depth_of_evar_in_pattern' (S depth) E ψ1 `max` maximal_mu_depth_of_evar_in_pattern' (S depth) E ψ2 = S (maximal_mu_depth_of_evar_in_pattern' depth E ψ1 `max` maximal_mu_depth_of_evar_in_pattern' depth E ψ2)
Σ: Signature
ψ1, ψ2: Pattern
IHψ1: (E : evar) (depth : nat), E ∈ free_evars ψ1 → maximal_mu_depth_of_evar_in_pattern' (S depth) E ψ1 = S (maximal_mu_depth_of_evar_in_pattern' depth E ψ1)
IHψ2: (E : evar) (depth : nat), E ∈ free_evars ψ2 → maximal_mu_depth_of_evar_in_pattern' (S depth) E ψ2 = S (maximal_mu_depth_of_evar_in_pattern' depth E ψ2)
E: evar
depth: nat
Hin: E ∈ free_evars ψ1 ∪ free_evars ψ2
e: E ∈ free_evars ψ1
n: E ∉ free_evars ψ2
maximal_mu_depth_of_evar_in_pattern' (S depth) E ψ1 `max` maximal_mu_depth_of_evar_in_pattern' (S depth) E ψ2 = S (maximal_mu_depth_of_evar_in_pattern' depth E ψ1 `max` maximal_mu_depth_of_evar_in_pattern' depth E ψ2)
Σ: Signature
ψ1, ψ2: Pattern
IHψ1: (E : evar) (depth : nat), E ∈ free_evars ψ1 → maximal_mu_depth_of_evar_in_pattern' (S depth) E ψ1 = S (maximal_mu_depth_of_evar_in_pattern' depth E ψ1)
IHψ2: (E : evar) (depth : nat), E ∈ free_evars ψ2 → maximal_mu_depth_of_evar_in_pattern' (S depth) E ψ2 = S (maximal_mu_depth_of_evar_in_pattern' depth E ψ2)
E: evar
depth: nat
Hin: E ∈ free_evars ψ1 ∪ free_evars ψ2
n: E ∉ free_evars ψ1
e: E ∈ free_evars ψ2
maximal_mu_depth_of_evar_in_pattern' (S depth) E ψ1 `max` maximal_mu_depth_of_evar_in_pattern' (S depth) E ψ2 = S (maximal_mu_depth_of_evar_in_pattern' depth E ψ1 `max` maximal_mu_depth_of_evar_in_pattern' depth E ψ2)
Σ: Signature
ψ1, ψ2: Pattern
IHψ1: (E : evar) (depth : nat), E ∈ free_evars ψ1 → maximal_mu_depth_of_evar_in_pattern' (S depth) E ψ1 = S (maximal_mu_depth_of_evar_in_pattern' depth E ψ1)
IHψ2: (E : evar) (depth : nat), E ∈ free_evars ψ2 → maximal_mu_depth_of_evar_in_pattern' (S depth) E ψ2 = S (maximal_mu_depth_of_evar_in_pattern' depth E ψ2)
E: evar
depth: nat
Hin: E ∈ free_evars ψ1 ∪ free_evars ψ2
n: E ∉ free_evars ψ1
n0: E ∉ free_evars ψ2
maximal_mu_depth_of_evar_in_pattern' (S depth) E ψ1 `max` maximal_mu_depth_of_evar_in_pattern' (S depth) E ψ2 = S (maximal_mu_depth_of_evar_in_pattern' depth E ψ1 `max` maximal_mu_depth_of_evar_in_pattern' depth E ψ2)
Σ: Signature
ψ1, ψ2: Pattern
IHψ1: (E : evar) (depth : nat), E ∈ free_evars ψ1 → maximal_mu_depth_of_evar_in_pattern' (S depth) E ψ1 = S (maximal_mu_depth_of_evar_in_pattern' depth E ψ1)
IHψ2: (E : evar) (depth : nat), E ∈ free_evars ψ2 → maximal_mu_depth_of_evar_in_pattern' (S depth) E ψ2 = S (maximal_mu_depth_of_evar_in_pattern' depth E ψ2)
E: evar
depth: nat
Hin: E ∈ free_evars ψ1 ∪ free_evars ψ2
e: E ∈ free_evars ψ1
e0: E ∈ free_evars ψ2

maximal_mu_depth_of_evar_in_pattern' (S depth) E ψ1 `max` maximal_mu_depth_of_evar_in_pattern' (S depth) E ψ2 = S (maximal_mu_depth_of_evar_in_pattern' depth E ψ1 `max` maximal_mu_depth_of_evar_in_pattern' depth E ψ2)
Σ: Signature
ψ1, ψ2: Pattern
IHψ1: (E : evar) (depth : nat), E ∈ free_evars ψ1 → maximal_mu_depth_of_evar_in_pattern' (S depth) E ψ1 = S (maximal_mu_depth_of_evar_in_pattern' depth E ψ1)
IHψ2: (E : evar) (depth : nat), E ∈ free_evars ψ2 → maximal_mu_depth_of_evar_in_pattern' (S depth) E ψ2 = S (maximal_mu_depth_of_evar_in_pattern' depth E ψ2)
E: evar
depth: nat
Hin: E ∈ free_evars ψ1 ∪ free_evars ψ2
e: E ∈ free_evars ψ1
e0: E ∈ free_evars ψ2

E ∈ free_evars ψ1
Σ: Signature
ψ1, ψ2: Pattern
IHψ1: (E : evar) (depth : nat), E ∈ free_evars ψ1 → maximal_mu_depth_of_evar_in_pattern' (S depth) E ψ1 = S (maximal_mu_depth_of_evar_in_pattern' depth E ψ1)
IHψ2: (E : evar) (depth : nat), E ∈ free_evars ψ2 → maximal_mu_depth_of_evar_in_pattern' (S depth) E ψ2 = S (maximal_mu_depth_of_evar_in_pattern' depth E ψ2)
E: evar
depth: nat
Hin: E ∈ free_evars ψ1 ∪ free_evars ψ2
e: E ∈ free_evars ψ1
e0: E ∈ free_evars ψ2
S (maximal_mu_depth_of_evar_in_pattern' depth E ψ1) `max` maximal_mu_depth_of_evar_in_pattern' (S depth) E ψ2 = S (maximal_mu_depth_of_evar_in_pattern' depth E ψ1 `max` maximal_mu_depth_of_evar_in_pattern' depth E ψ2)
Σ: Signature
ψ1, ψ2: Pattern
IHψ1: (E : evar) (depth : nat), E ∈ free_evars ψ1 → maximal_mu_depth_of_evar_in_pattern' (S depth) E ψ1 = S (maximal_mu_depth_of_evar_in_pattern' depth E ψ1)
IHψ2: (E : evar) (depth : nat), E ∈ free_evars ψ2 → maximal_mu_depth_of_evar_in_pattern' (S depth) E ψ2 = S (maximal_mu_depth_of_evar_in_pattern' depth E ψ2)
E: evar
depth: nat
Hin: E ∈ free_evars ψ1 ∪ free_evars ψ2
e: E ∈ free_evars ψ1
e0: E ∈ free_evars ψ2

S (maximal_mu_depth_of_evar_in_pattern' depth E ψ1) `max` maximal_mu_depth_of_evar_in_pattern' (S depth) E ψ2 = S (maximal_mu_depth_of_evar_in_pattern' depth E ψ1 `max` maximal_mu_depth_of_evar_in_pattern' depth E ψ2)
Σ: Signature
ψ1, ψ2: Pattern
IHψ1: (E : evar) (depth : nat), E ∈ free_evars ψ1 → maximal_mu_depth_of_evar_in_pattern' (S depth) E ψ1 = S (maximal_mu_depth_of_evar_in_pattern' depth E ψ1)
IHψ2: (E : evar) (depth : nat), E ∈ free_evars ψ2 → maximal_mu_depth_of_evar_in_pattern' (S depth) E ψ2 = S (maximal_mu_depth_of_evar_in_pattern' depth E ψ2)
E: evar
depth: nat
Hin: E ∈ free_evars ψ1 ∪ free_evars ψ2
e: E ∈ free_evars ψ1
e0: E ∈ free_evars ψ2

E ∈ free_evars ψ2
Σ: Signature
ψ1, ψ2: Pattern
IHψ1: (E : evar) (depth : nat), E ∈ free_evars ψ1 → maximal_mu_depth_of_evar_in_pattern' (S depth) E ψ1 = S (maximal_mu_depth_of_evar_in_pattern' depth E ψ1)
IHψ2: (E : evar) (depth : nat), E ∈ free_evars ψ2 → maximal_mu_depth_of_evar_in_pattern' (S depth) E ψ2 = S (maximal_mu_depth_of_evar_in_pattern' depth E ψ2)
E: evar
depth: nat
Hin: E ∈ free_evars ψ1 ∪ free_evars ψ2
e: E ∈ free_evars ψ1
e0: E ∈ free_evars ψ2
S (maximal_mu_depth_of_evar_in_pattern' depth E ψ1) `max` S (maximal_mu_depth_of_evar_in_pattern' depth E ψ2) = S (maximal_mu_depth_of_evar_in_pattern' depth E ψ1 `max` maximal_mu_depth_of_evar_in_pattern' depth E ψ2)
Σ: Signature
ψ1, ψ2: Pattern
IHψ1: (E : evar) (depth : nat), E ∈ free_evars ψ1 → maximal_mu_depth_of_evar_in_pattern' (S depth) E ψ1 = S (maximal_mu_depth_of_evar_in_pattern' depth E ψ1)
IHψ2: (E : evar) (depth : nat), E ∈ free_evars ψ2 → maximal_mu_depth_of_evar_in_pattern' (S depth) E ψ2 = S (maximal_mu_depth_of_evar_in_pattern' depth E ψ2)
E: evar
depth: nat
Hin: E ∈ free_evars ψ1 ∪ free_evars ψ2
e: E ∈ free_evars ψ1
e0: E ∈ free_evars ψ2

S (maximal_mu_depth_of_evar_in_pattern' depth E ψ1) `max` S (maximal_mu_depth_of_evar_in_pattern' depth E ψ2) = S (maximal_mu_depth_of_evar_in_pattern' depth E ψ1 `max` maximal_mu_depth_of_evar_in_pattern' depth E ψ2)
Σ: Signature
ψ1, ψ2: Pattern
IHψ1: (E : evar) (depth : nat), E ∈ free_evars ψ1 → maximal_mu_depth_of_evar_in_pattern' (S depth) E ψ1 = S (maximal_mu_depth_of_evar_in_pattern' depth E ψ1)
IHψ2: (E : evar) (depth : nat), E ∈ free_evars ψ2 → maximal_mu_depth_of_evar_in_pattern' (S depth) E ψ2 = S (maximal_mu_depth_of_evar_in_pattern' depth E ψ2)
E: evar
depth: nat
Hin: E ∈ free_evars ψ1 ∪ free_evars ψ2
e: E ∈ free_evars ψ1
e0: E ∈ free_evars ψ2

S (maximal_mu_depth_of_evar_in_pattern' depth E ψ1 `max` maximal_mu_depth_of_evar_in_pattern' depth E ψ2) = S (maximal_mu_depth_of_evar_in_pattern' depth E ψ1 `max` maximal_mu_depth_of_evar_in_pattern' depth E ψ2)
reflexivity.
Σ: Signature
ψ1, ψ2: Pattern
IHψ1: (E : evar) (depth : nat), E ∈ free_evars ψ1 → maximal_mu_depth_of_evar_in_pattern' (S depth) E ψ1 = S (maximal_mu_depth_of_evar_in_pattern' depth E ψ1)
IHψ2: (E : evar) (depth : nat), E ∈ free_evars ψ2 → maximal_mu_depth_of_evar_in_pattern' (S depth) E ψ2 = S (maximal_mu_depth_of_evar_in_pattern' depth E ψ2)
E: evar
depth: nat
Hin: E ∈ free_evars ψ1 ∪ free_evars ψ2
e: E ∈ free_evars ψ1
n: E ∉ free_evars ψ2

maximal_mu_depth_of_evar_in_pattern' (S depth) E ψ1 `max` maximal_mu_depth_of_evar_in_pattern' (S depth) E ψ2 = S (maximal_mu_depth_of_evar_in_pattern' depth E ψ1 `max` maximal_mu_depth_of_evar_in_pattern' depth E ψ2)
Σ: Signature
ψ1, ψ2: Pattern
IHψ1: (E : evar) (depth : nat), E ∈ free_evars ψ1 → maximal_mu_depth_of_evar_in_pattern' (S depth) E ψ1 = S (maximal_mu_depth_of_evar_in_pattern' depth E ψ1)
IHψ2: (E : evar) (depth : nat), E ∈ free_evars ψ2 → maximal_mu_depth_of_evar_in_pattern' (S depth) E ψ2 = S (maximal_mu_depth_of_evar_in_pattern' depth E ψ2)
E: evar
depth: nat
Hin: E ∈ free_evars ψ1 ∪ free_evars ψ2
n: E ∉ free_evars ψ1
e: E ∈ free_evars ψ2
maximal_mu_depth_of_evar_in_pattern' (S depth) E ψ1 `max` maximal_mu_depth_of_evar_in_pattern' (S depth) E ψ2 = S (maximal_mu_depth_of_evar_in_pattern' depth E ψ1 `max` maximal_mu_depth_of_evar_in_pattern' depth E ψ2)
Σ: Signature
ψ1, ψ2: Pattern
IHψ1: (E : evar) (depth : nat), E ∈ free_evars ψ1 → maximal_mu_depth_of_evar_in_pattern' (S depth) E ψ1 = S (maximal_mu_depth_of_evar_in_pattern' depth E ψ1)
IHψ2: (E : evar) (depth : nat), E ∈ free_evars ψ2 → maximal_mu_depth_of_evar_in_pattern' (S depth) E ψ2 = S (maximal_mu_depth_of_evar_in_pattern' depth E ψ2)
E: evar
depth: nat
Hin: E ∈ free_evars ψ1 ∪ free_evars ψ2
n: E ∉ free_evars ψ1
n0: E ∉ free_evars ψ2
maximal_mu_depth_of_evar_in_pattern' (S depth) E ψ1 `max` maximal_mu_depth_of_evar_in_pattern' (S depth) E ψ2 = S (maximal_mu_depth_of_evar_in_pattern' depth E ψ1 `max` maximal_mu_depth_of_evar_in_pattern' depth E ψ2)
Σ: Signature
ψ1, ψ2: Pattern
IHψ1: (E : evar) (depth : nat), E ∈ free_evars ψ1 → maximal_mu_depth_of_evar_in_pattern' (S depth) E ψ1 = S (maximal_mu_depth_of_evar_in_pattern' depth E ψ1)
IHψ2: (E : evar) (depth : nat), E ∈ free_evars ψ2 → maximal_mu_depth_of_evar_in_pattern' (S depth) E ψ2 = S (maximal_mu_depth_of_evar_in_pattern' depth E ψ2)
E: evar
depth: nat
Hin: E ∈ free_evars ψ1 ∪ free_evars ψ2
e: E ∈ free_evars ψ1
n: E ∉ free_evars ψ2

maximal_mu_depth_of_evar_in_pattern' (S depth) E ψ1 `max` maximal_mu_depth_of_evar_in_pattern' (S depth) E ψ2 = S (maximal_mu_depth_of_evar_in_pattern' depth E ψ1 `max` maximal_mu_depth_of_evar_in_pattern' depth E ψ2)
Σ: Signature
ψ1, ψ2: Pattern
IHψ1: (E : evar) (depth : nat), E ∈ free_evars ψ1 → maximal_mu_depth_of_evar_in_pattern' (S depth) E ψ1 = S (maximal_mu_depth_of_evar_in_pattern' depth E ψ1)
IHψ2: (E : evar) (depth : nat), E ∈ free_evars ψ2 → maximal_mu_depth_of_evar_in_pattern' (S depth) E ψ2 = S (maximal_mu_depth_of_evar_in_pattern' depth E ψ2)
E: evar
depth: nat
Hin: E ∈ free_evars ψ1 ∪ free_evars ψ2
e: E ∈ free_evars ψ1
n: E ∉ free_evars ψ2

E ∈ free_evars ψ1
Σ: Signature
ψ1, ψ2: Pattern
IHψ1: (E : evar) (depth : nat), E ∈ free_evars ψ1 → maximal_mu_depth_of_evar_in_pattern' (S depth) E ψ1 = S (maximal_mu_depth_of_evar_in_pattern' depth E ψ1)
IHψ2: (E : evar) (depth : nat), E ∈ free_evars ψ2 → maximal_mu_depth_of_evar_in_pattern' (S depth) E ψ2 = S (maximal_mu_depth_of_evar_in_pattern' depth E ψ2)
E: evar
depth: nat
Hin: E ∈ free_evars ψ1 ∪ free_evars ψ2
e: E ∈ free_evars ψ1
n: E ∉ free_evars ψ2
S (maximal_mu_depth_of_evar_in_pattern' depth E ψ1) `max` maximal_mu_depth_of_evar_in_pattern' (S depth) E ψ2 = S (maximal_mu_depth_of_evar_in_pattern' depth E ψ1 `max` maximal_mu_depth_of_evar_in_pattern' depth E ψ2)
Σ: Signature
ψ1, ψ2: Pattern
IHψ1: (E : evar) (depth : nat), E ∈ free_evars ψ1 → maximal_mu_depth_of_evar_in_pattern' (S depth) E ψ1 = S (maximal_mu_depth_of_evar_in_pattern' depth E ψ1)
IHψ2: (E : evar) (depth : nat), E ∈ free_evars ψ2 → maximal_mu_depth_of_evar_in_pattern' (S depth) E ψ2 = S (maximal_mu_depth_of_evar_in_pattern' depth E ψ2)
E: evar
depth: nat
Hin: E ∈ free_evars ψ1 ∪ free_evars ψ2
e: E ∈ free_evars ψ1
n: E ∉ free_evars ψ2

S (maximal_mu_depth_of_evar_in_pattern' depth E ψ1) `max` maximal_mu_depth_of_evar_in_pattern' (S depth) E ψ2 = S (maximal_mu_depth_of_evar_in_pattern' depth E ψ1 `max` maximal_mu_depth_of_evar_in_pattern' depth E ψ2)
Σ: Signature
ψ1, ψ2: Pattern
IHψ1: (E : evar) (depth : nat), E ∈ free_evars ψ1 → maximal_mu_depth_of_evar_in_pattern' (S depth) E ψ1 = S (maximal_mu_depth_of_evar_in_pattern' depth E ψ1)
IHψ2: (E : evar) (depth : nat), E ∈ free_evars ψ2 → maximal_mu_depth_of_evar_in_pattern' (S depth) E ψ2 = S (maximal_mu_depth_of_evar_in_pattern' depth E ψ2)
E: evar
depth: nat
Hin: E ∈ free_evars ψ1 ∪ free_evars ψ2
e: E ∈ free_evars ψ1
n: E ∉ free_evars ψ2

E ∉ free_evars ψ2
Σ: Signature
ψ1, ψ2: Pattern
IHψ1: (E : evar) (depth : nat), E ∈ free_evars ψ1 → maximal_mu_depth_of_evar_in_pattern' (S depth) E ψ1 = S (maximal_mu_depth_of_evar_in_pattern' depth E ψ1)
IHψ2: (E : evar) (depth : nat), E ∈ free_evars ψ2 → maximal_mu_depth_of_evar_in_pattern' (S depth) E ψ2 = S (maximal_mu_depth_of_evar_in_pattern' depth E ψ2)
E: evar
depth: nat
Hin: E ∈ free_evars ψ1 ∪ free_evars ψ2
e: E ∈ free_evars ψ1
n: E ∉ free_evars ψ2
S (maximal_mu_depth_of_evar_in_pattern' depth E ψ1) `max` 0 = S (maximal_mu_depth_of_evar_in_pattern' depth E ψ1 `max` maximal_mu_depth_of_evar_in_pattern' depth E ψ2)
Σ: Signature
ψ1, ψ2: Pattern
IHψ1: (E : evar) (depth : nat), E ∈ free_evars ψ1 → maximal_mu_depth_of_evar_in_pattern' (S depth) E ψ1 = S (maximal_mu_depth_of_evar_in_pattern' depth E ψ1)
IHψ2: (E : evar) (depth : nat), E ∈ free_evars ψ2 → maximal_mu_depth_of_evar_in_pattern' (S depth) E ψ2 = S (maximal_mu_depth_of_evar_in_pattern' depth E ψ2)
E: evar
depth: nat
Hin: E ∈ free_evars ψ1 ∪ free_evars ψ2
e: E ∈ free_evars ψ1
n: E ∉ free_evars ψ2

E ∉ free_evars ψ2
assumption.
Σ: Signature
ψ1, ψ2: Pattern
IHψ1: (E : evar) (depth : nat), E ∈ free_evars ψ1 → maximal_mu_depth_of_evar_in_pattern' (S depth) E ψ1 = S (maximal_mu_depth_of_evar_in_pattern' depth E ψ1)
IHψ2: (E : evar) (depth : nat), E ∈ free_evars ψ2 → maximal_mu_depth_of_evar_in_pattern' (S depth) E ψ2 = S (maximal_mu_depth_of_evar_in_pattern' depth E ψ2)
E: evar
depth: nat
Hin: E ∈ free_evars ψ1 ∪ free_evars ψ2
e: E ∈ free_evars ψ1
n: E ∉ free_evars ψ2

S (maximal_mu_depth_of_evar_in_pattern' depth E ψ1) `max` 0 = S (maximal_mu_depth_of_evar_in_pattern' depth E ψ1 `max` maximal_mu_depth_of_evar_in_pattern' depth E ψ2)
Σ: Signature
ψ1, ψ2: Pattern
IHψ1: (E : evar) (depth : nat), E ∈ free_evars ψ1 → maximal_mu_depth_of_evar_in_pattern' (S depth) E ψ1 = S (maximal_mu_depth_of_evar_in_pattern' depth E ψ1)
IHψ2: (E : evar) (depth : nat), E ∈ free_evars ψ2 → maximal_mu_depth_of_evar_in_pattern' (S depth) E ψ2 = S (maximal_mu_depth_of_evar_in_pattern' depth E ψ2)
E: evar
depth: nat
Hin: E ∈ free_evars ψ1 ∪ free_evars ψ2
e: E ∈ free_evars ψ1
n: E ∉ free_evars ψ2

E ∉ free_evars ψ2
Σ: Signature
ψ1, ψ2: Pattern
IHψ1: (E : evar) (depth : nat), E ∈ free_evars ψ1 → maximal_mu_depth_of_evar_in_pattern' (S depth) E ψ1 = S (maximal_mu_depth_of_evar_in_pattern' depth E ψ1)
IHψ2: (E : evar) (depth : nat), E ∈ free_evars ψ2 → maximal_mu_depth_of_evar_in_pattern' (S depth) E ψ2 = S (maximal_mu_depth_of_evar_in_pattern' depth E ψ2)
E: evar
depth: nat
Hin: E ∈ free_evars ψ1 ∪ free_evars ψ2
e: E ∈ free_evars ψ1
n: E ∉ free_evars ψ2
S (maximal_mu_depth_of_evar_in_pattern' depth E ψ1) `max` 0 = S (maximal_mu_depth_of_evar_in_pattern' depth E ψ1 `max` 0)
Σ: Signature
ψ1, ψ2: Pattern
IHψ1: (E : evar) (depth : nat), E ∈ free_evars ψ1 → maximal_mu_depth_of_evar_in_pattern' (S depth) E ψ1 = S (maximal_mu_depth_of_evar_in_pattern' depth E ψ1)
IHψ2: (E : evar) (depth : nat), E ∈ free_evars ψ2 → maximal_mu_depth_of_evar_in_pattern' (S depth) E ψ2 = S (maximal_mu_depth_of_evar_in_pattern' depth E ψ2)
E: evar
depth: nat
Hin: E ∈ free_evars ψ1 ∪ free_evars ψ2
e: E ∈ free_evars ψ1
n: E ∉ free_evars ψ2

E ∉ free_evars ψ2
assumption.
Σ: Signature
ψ1, ψ2: Pattern
IHψ1: (E : evar) (depth : nat), E ∈ free_evars ψ1 → maximal_mu_depth_of_evar_in_pattern' (S depth) E ψ1 = S (maximal_mu_depth_of_evar_in_pattern' depth E ψ1)
IHψ2: (E : evar) (depth : nat), E ∈ free_evars ψ2 → maximal_mu_depth_of_evar_in_pattern' (S depth) E ψ2 = S (maximal_mu_depth_of_evar_in_pattern' depth E ψ2)
E: evar
depth: nat
Hin: E ∈ free_evars ψ1 ∪ free_evars ψ2
e: E ∈ free_evars ψ1
n: E ∉ free_evars ψ2

S (maximal_mu_depth_of_evar_in_pattern' depth E ψ1) `max` 0 = S (maximal_mu_depth_of_evar_in_pattern' depth E ψ1 `max` 0)
Σ: Signature
ψ1, ψ2: Pattern
IHψ1: (E : evar) (depth : nat), E ∈ free_evars ψ1 → maximal_mu_depth_of_evar_in_pattern' (S depth) E ψ1 = S (maximal_mu_depth_of_evar_in_pattern' depth E ψ1)
IHψ2: (E : evar) (depth : nat), E ∈ free_evars ψ2 → maximal_mu_depth_of_evar_in_pattern' (S depth) E ψ2 = S (maximal_mu_depth_of_evar_in_pattern' depth E ψ2)
E: evar
depth: nat
Hin: E ∈ free_evars ψ1 ∪ free_evars ψ2
e: E ∈ free_evars ψ1
n: E ∉ free_evars ψ2

S (maximal_mu_depth_of_evar_in_pattern' depth E ψ1) = S (maximal_mu_depth_of_evar_in_pattern' depth E ψ1 `max` 0)
Σ: Signature
ψ1, ψ2: Pattern
IHψ1: (E : evar) (depth : nat), E ∈ free_evars ψ1 → maximal_mu_depth_of_evar_in_pattern' (S depth) E ψ1 = S (maximal_mu_depth_of_evar_in_pattern' depth E ψ1)
IHψ2: (E : evar) (depth : nat), E ∈ free_evars ψ2 → maximal_mu_depth_of_evar_in_pattern' (S depth) E ψ2 = S (maximal_mu_depth_of_evar_in_pattern' depth E ψ2)
E: evar
depth: nat
Hin: E ∈ free_evars ψ1 ∪ free_evars ψ2
e: E ∈ free_evars ψ1
n: E ∉ free_evars ψ2

S (maximal_mu_depth_of_evar_in_pattern' depth E ψ1) = S (0 `max` maximal_mu_depth_of_evar_in_pattern' depth E ψ1)
Σ: Signature
ψ1, ψ2: Pattern
IHψ1: (E : evar) (depth : nat), E ∈ free_evars ψ1 → maximal_mu_depth_of_evar_in_pattern' (S depth) E ψ1 = S (maximal_mu_depth_of_evar_in_pattern' depth E ψ1)
IHψ2: (E : evar) (depth : nat), E ∈ free_evars ψ2 → maximal_mu_depth_of_evar_in_pattern' (S depth) E ψ2 = S (maximal_mu_depth_of_evar_in_pattern' depth E ψ2)
E: evar
depth: nat
Hin: E ∈ free_evars ψ1 ∪ free_evars ψ2
e: E ∈ free_evars ψ1
n: E ∉ free_evars ψ2

S (maximal_mu_depth_of_evar_in_pattern' depth E ψ1) = S (maximal_mu_depth_of_evar_in_pattern' depth E ψ1)
reflexivity.
Σ: Signature
ψ1, ψ2: Pattern
IHψ1: (E : evar) (depth : nat), E ∈ free_evars ψ1 → maximal_mu_depth_of_evar_in_pattern' (S depth) E ψ1 = S (maximal_mu_depth_of_evar_in_pattern' depth E ψ1)
IHψ2: (E : evar) (depth : nat), E ∈ free_evars ψ2 → maximal_mu_depth_of_evar_in_pattern' (S depth) E ψ2 = S (maximal_mu_depth_of_evar_in_pattern' depth E ψ2)
E: evar
depth: nat
Hin: E ∈ free_evars ψ1 ∪ free_evars ψ2
n: E ∉ free_evars ψ1
e: E ∈ free_evars ψ2

maximal_mu_depth_of_evar_in_pattern' (S depth) E ψ1 `max` maximal_mu_depth_of_evar_in_pattern' (S depth) E ψ2 = S (maximal_mu_depth_of_evar_in_pattern' depth E ψ1 `max` maximal_mu_depth_of_evar_in_pattern' depth E ψ2)
Σ: Signature
ψ1, ψ2: Pattern
IHψ1: (E : evar) (depth : nat), E ∈ free_evars ψ1 → maximal_mu_depth_of_evar_in_pattern' (S depth) E ψ1 = S (maximal_mu_depth_of_evar_in_pattern' depth E ψ1)
IHψ2: (E : evar) (depth : nat), E ∈ free_evars ψ2 → maximal_mu_depth_of_evar_in_pattern' (S depth) E ψ2 = S (maximal_mu_depth_of_evar_in_pattern' depth E ψ2)
E: evar
depth: nat
Hin: E ∈ free_evars ψ1 ∪ free_evars ψ2
n: E ∉ free_evars ψ1
n0: E ∉ free_evars ψ2
maximal_mu_depth_of_evar_in_pattern' (S depth) E ψ1 `max` maximal_mu_depth_of_evar_in_pattern' (S depth) E ψ2 = S (maximal_mu_depth_of_evar_in_pattern' depth E ψ1 `max` maximal_mu_depth_of_evar_in_pattern' depth E ψ2)
Σ: Signature
ψ1, ψ2: Pattern
IHψ1: (E : evar) (depth : nat), E ∈ free_evars ψ1 → maximal_mu_depth_of_evar_in_pattern' (S depth) E ψ1 = S (maximal_mu_depth_of_evar_in_pattern' depth E ψ1)
IHψ2: (E : evar) (depth : nat), E ∈ free_evars ψ2 → maximal_mu_depth_of_evar_in_pattern' (S depth) E ψ2 = S (maximal_mu_depth_of_evar_in_pattern' depth E ψ2)
E: evar
depth: nat
Hin: E ∈ free_evars ψ1 ∪ free_evars ψ2
n: E ∉ free_evars ψ1
e: E ∈ free_evars ψ2

maximal_mu_depth_of_evar_in_pattern' (S depth) E ψ1 `max` maximal_mu_depth_of_evar_in_pattern' (S depth) E ψ2 = S (maximal_mu_depth_of_evar_in_pattern' depth E ψ1 `max` maximal_mu_depth_of_evar_in_pattern' depth E ψ2)
Σ: Signature
ψ1, ψ2: Pattern
IHψ1: (E : evar) (depth : nat), E ∈ free_evars ψ1 → maximal_mu_depth_of_evar_in_pattern' (S depth) E ψ1 = S (maximal_mu_depth_of_evar_in_pattern' depth E ψ1)
IHψ2: (E : evar) (depth : nat), E ∈ free_evars ψ2 → maximal_mu_depth_of_evar_in_pattern' (S depth) E ψ2 = S (maximal_mu_depth_of_evar_in_pattern' depth E ψ2)
E: evar
depth: nat
Hin: E ∈ free_evars ψ1 ∪ free_evars ψ2
n: E ∉ free_evars ψ1
e: E ∈ free_evars ψ2

E ∈ free_evars ψ2
Σ: Signature
ψ1, ψ2: Pattern
IHψ1: (E : evar) (depth : nat), E ∈ free_evars ψ1 → maximal_mu_depth_of_evar_in_pattern' (S depth) E ψ1 = S (maximal_mu_depth_of_evar_in_pattern' depth E ψ1)
IHψ2: (E : evar) (depth : nat), E ∈ free_evars ψ2 → maximal_mu_depth_of_evar_in_pattern' (S depth) E ψ2 = S (maximal_mu_depth_of_evar_in_pattern' depth E ψ2)
E: evar
depth: nat
Hin: E ∈ free_evars ψ1 ∪ free_evars ψ2
n: E ∉ free_evars ψ1
e: E ∈ free_evars ψ2
maximal_mu_depth_of_evar_in_pattern' (S depth) E ψ1 `max` S (maximal_mu_depth_of_evar_in_pattern' depth E ψ2) = S (maximal_mu_depth_of_evar_in_pattern' depth E ψ1 `max` maximal_mu_depth_of_evar_in_pattern' depth E ψ2)
Σ: Signature
ψ1, ψ2: Pattern
IHψ1: (E : evar) (depth : nat), E ∈ free_evars ψ1 → maximal_mu_depth_of_evar_in_pattern' (S depth) E ψ1 = S (maximal_mu_depth_of_evar_in_pattern' depth E ψ1)
IHψ2: (E : evar) (depth : nat), E ∈ free_evars ψ2 → maximal_mu_depth_of_evar_in_pattern' (S depth) E ψ2 = S (maximal_mu_depth_of_evar_in_pattern' depth E ψ2)
E: evar
depth: nat
Hin: E ∈ free_evars ψ1 ∪ free_evars ψ2
n: E ∉ free_evars ψ1
e: E ∈ free_evars ψ2

maximal_mu_depth_of_evar_in_pattern' (S depth) E ψ1 `max` S (maximal_mu_depth_of_evar_in_pattern' depth E ψ2) = S (maximal_mu_depth_of_evar_in_pattern' depth E ψ1 `max` maximal_mu_depth_of_evar_in_pattern' depth E ψ2)
Σ: Signature
ψ1, ψ2: Pattern
IHψ1: (E : evar) (depth : nat), E ∈ free_evars ψ1 → maximal_mu_depth_of_evar_in_pattern' (S depth) E ψ1 = S (maximal_mu_depth_of_evar_in_pattern' depth E ψ1)
IHψ2: (E : evar) (depth : nat), E ∈ free_evars ψ2 → maximal_mu_depth_of_evar_in_pattern' (S depth) E ψ2 = S (maximal_mu_depth_of_evar_in_pattern' depth E ψ2)
E: evar
depth: nat
Hin: E ∈ free_evars ψ1 ∪ free_evars ψ2
n: E ∉ free_evars ψ1
e: E ∈ free_evars ψ2

E ∉ free_evars ψ1
Σ: Signature
ψ1, ψ2: Pattern
IHψ1: (E : evar) (depth : nat), E ∈ free_evars ψ1 → maximal_mu_depth_of_evar_in_pattern' (S depth) E ψ1 = S (maximal_mu_depth_of_evar_in_pattern' depth E ψ1)
IHψ2: (E : evar) (depth : nat), E ∈ free_evars ψ2 → maximal_mu_depth_of_evar_in_pattern' (S depth) E ψ2 = S (maximal_mu_depth_of_evar_in_pattern' depth E ψ2)
E: evar
depth: nat
Hin: E ∈ free_evars ψ1 ∪ free_evars ψ2
n: E ∉ free_evars ψ1
e: E ∈ free_evars ψ2
0 `max` S (maximal_mu_depth_of_evar_in_pattern' depth E ψ2) = S (maximal_mu_depth_of_evar_in_pattern' depth E ψ1 `max` maximal_mu_depth_of_evar_in_pattern' depth E ψ2)
Σ: Signature
ψ1, ψ2: Pattern
IHψ1: (E : evar) (depth : nat), E ∈ free_evars ψ1 → maximal_mu_depth_of_evar_in_pattern' (S depth) E ψ1 = S (maximal_mu_depth_of_evar_in_pattern' depth E ψ1)
IHψ2: (E : evar) (depth : nat), E ∈ free_evars ψ2 → maximal_mu_depth_of_evar_in_pattern' (S depth) E ψ2 = S (maximal_mu_depth_of_evar_in_pattern' depth E ψ2)
E: evar
depth: nat
Hin: E ∈ free_evars ψ1 ∪ free_evars ψ2
n: E ∉ free_evars ψ1
e: E ∈ free_evars ψ2

E ∉ free_evars ψ1
assumption.
Σ: Signature
ψ1, ψ2: Pattern
IHψ1: (E : evar) (depth : nat), E ∈ free_evars ψ1 → maximal_mu_depth_of_evar_in_pattern' (S depth) E ψ1 = S (maximal_mu_depth_of_evar_in_pattern' depth E ψ1)
IHψ2: (E : evar) (depth : nat), E ∈ free_evars ψ2 → maximal_mu_depth_of_evar_in_pattern' (S depth) E ψ2 = S (maximal_mu_depth_of_evar_in_pattern' depth E ψ2)
E: evar
depth: nat
Hin: E ∈ free_evars ψ1 ∪ free_evars ψ2
n: E ∉ free_evars ψ1
e: E ∈ free_evars ψ2

0 `max` S (maximal_mu_depth_of_evar_in_pattern' depth E ψ2) = S (maximal_mu_depth_of_evar_in_pattern' depth E ψ1 `max` maximal_mu_depth_of_evar_in_pattern' depth E ψ2)
Σ: Signature
ψ1, ψ2: Pattern
IHψ1: (E : evar) (depth : nat), E ∈ free_evars ψ1 → maximal_mu_depth_of_evar_in_pattern' (S depth) E ψ1 = S (maximal_mu_depth_of_evar_in_pattern' depth E ψ1)
IHψ2: (E : evar) (depth : nat), E ∈ free_evars ψ2 → maximal_mu_depth_of_evar_in_pattern' (S depth) E ψ2 = S (maximal_mu_depth_of_evar_in_pattern' depth E ψ2)
E: evar
depth: nat
Hin: E ∈ free_evars ψ1 ∪ free_evars ψ2
n: E ∉ free_evars ψ1
e: E ∈ free_evars ψ2

E ∉ free_evars ψ1
Σ: Signature
ψ1, ψ2: Pattern
IHψ1: (E : evar) (depth : nat), E ∈ free_evars ψ1 → maximal_mu_depth_of_evar_in_pattern' (S depth) E ψ1 = S (maximal_mu_depth_of_evar_in_pattern' depth E ψ1)
IHψ2: (E : evar) (depth : nat), E ∈ free_evars ψ2 → maximal_mu_depth_of_evar_in_pattern' (S depth) E ψ2 = S (maximal_mu_depth_of_evar_in_pattern' depth E ψ2)
E: evar
depth: nat
Hin: E ∈ free_evars ψ1 ∪ free_evars ψ2
n: E ∉ free_evars ψ1
e: E ∈ free_evars ψ2
0 `max` S (maximal_mu_depth_of_evar_in_pattern' depth E ψ2) = S (0 `max` maximal_mu_depth_of_evar_in_pattern' depth E ψ2)
Σ: Signature
ψ1, ψ2: Pattern
IHψ1: (E : evar) (depth : nat), E ∈ free_evars ψ1 → maximal_mu_depth_of_evar_in_pattern' (S depth) E ψ1 = S (maximal_mu_depth_of_evar_in_pattern' depth E ψ1)
IHψ2: (E : evar) (depth : nat), E ∈ free_evars ψ2 → maximal_mu_depth_of_evar_in_pattern' (S depth) E ψ2 = S (maximal_mu_depth_of_evar_in_pattern' depth E ψ2)
E: evar
depth: nat
Hin: E ∈ free_evars ψ1 ∪ free_evars ψ2
n: E ∉ free_evars ψ1
e: E ∈ free_evars ψ2

E ∉ free_evars ψ1
assumption.
Σ: Signature
ψ1, ψ2: Pattern
IHψ1: (E : evar) (depth : nat), E ∈ free_evars ψ1 → maximal_mu_depth_of_evar_in_pattern' (S depth) E ψ1 = S (maximal_mu_depth_of_evar_in_pattern' depth E ψ1)
IHψ2: (E : evar) (depth : nat), E ∈ free_evars ψ2 → maximal_mu_depth_of_evar_in_pattern' (S depth) E ψ2 = S (maximal_mu_depth_of_evar_in_pattern' depth E ψ2)
E: evar
depth: nat
Hin: E ∈ free_evars ψ1 ∪ free_evars ψ2
n: E ∉ free_evars ψ1
e: E ∈ free_evars ψ2

0 `max` S (maximal_mu_depth_of_evar_in_pattern' depth E ψ2) = S (0 `max` maximal_mu_depth_of_evar_in_pattern' depth E ψ2)
Σ: Signature
ψ1, ψ2: Pattern
IHψ1: (E : evar) (depth : nat), E ∈ free_evars ψ1 → maximal_mu_depth_of_evar_in_pattern' (S depth) E ψ1 = S (maximal_mu_depth_of_evar_in_pattern' depth E ψ1)
IHψ2: (E : evar) (depth : nat), E ∈ free_evars ψ2 → maximal_mu_depth_of_evar_in_pattern' (S depth) E ψ2 = S (maximal_mu_depth_of_evar_in_pattern' depth E ψ2)
E: evar
depth: nat
Hin: E ∈ free_evars ψ1 ∪ free_evars ψ2
n: E ∉ free_evars ψ1
e: E ∈ free_evars ψ2

S (maximal_mu_depth_of_evar_in_pattern' depth E ψ2) = S (maximal_mu_depth_of_evar_in_pattern' depth E ψ2)
reflexivity.
Σ: Signature
ψ1, ψ2: Pattern
IHψ1: (E : evar) (depth : nat), E ∈ free_evars ψ1 → maximal_mu_depth_of_evar_in_pattern' (S depth) E ψ1 = S (maximal_mu_depth_of_evar_in_pattern' depth E ψ1)
IHψ2: (E : evar) (depth : nat), E ∈ free_evars ψ2 → maximal_mu_depth_of_evar_in_pattern' (S depth) E ψ2 = S (maximal_mu_depth_of_evar_in_pattern' depth E ψ2)
E: evar
depth: nat
Hin: E ∈ free_evars ψ1 ∪ free_evars ψ2
n: E ∉ free_evars ψ1
n0: E ∉ free_evars ψ2

maximal_mu_depth_of_evar_in_pattern' (S depth) E ψ1 `max` maximal_mu_depth_of_evar_in_pattern' (S depth) E ψ2 = S (maximal_mu_depth_of_evar_in_pattern' depth E ψ1 `max` maximal_mu_depth_of_evar_in_pattern' depth E ψ2)
Σ: Signature
ψ1, ψ2: Pattern
IHψ1: (E : evar) (depth : nat), E ∈ free_evars ψ1 → maximal_mu_depth_of_evar_in_pattern' (S depth) E ψ1 = S (maximal_mu_depth_of_evar_in_pattern' depth E ψ1)
IHψ2: (E : evar) (depth : nat), E ∈ free_evars ψ2 → maximal_mu_depth_of_evar_in_pattern' (S depth) E ψ2 = S (maximal_mu_depth_of_evar_in_pattern' depth E ψ2)
E: evar
depth: nat
Hin: E ∈ free_evars ψ1 ∪ free_evars ψ2
n: E ∉ free_evars ψ1
n0: E ∉ free_evars ψ2

maximal_mu_depth_of_evar_in_pattern' (S depth) E ψ1 `max` maximal_mu_depth_of_evar_in_pattern' (S depth) E ψ2 = S (maximal_mu_depth_of_evar_in_pattern' depth E ψ1 `max` maximal_mu_depth_of_evar_in_pattern' depth E ψ2)
Σ: Signature
ψ1, ψ2: Pattern
IHψ1: (E : evar) (depth : nat), E ∈ free_evars ψ1 → maximal_mu_depth_of_evar_in_pattern' (S depth) E ψ1 = S (maximal_mu_depth_of_evar_in_pattern' depth E ψ1)
IHψ2: (E : evar) (depth : nat), E ∈ free_evars ψ2 → maximal_mu_depth_of_evar_in_pattern' (S depth) E ψ2 = S (maximal_mu_depth_of_evar_in_pattern' depth E ψ2)
E: evar
depth: nat
Hin: E ∈ free_evars ψ1 ∪ free_evars ψ2
n: E ∉ free_evars ψ1
n0: E ∉ free_evars ψ2

False
set_solver. }
Σ: Signature
E: evar
depth: nat
Hin: E ∈ ∅

0 = 1
Σ: Signature
ψ1, ψ2: Pattern
IHψ1: (E : evar) (depth : nat), E ∈ free_evars ψ1 → maximal_mu_depth_of_evar_in_pattern' (S depth) E ψ1 = S (maximal_mu_depth_of_evar_in_pattern' depth E ψ1)
IHψ2: (E : evar) (depth : nat), E ∈ free_evars ψ2 → maximal_mu_depth_of_evar_in_pattern' (S depth) E ψ2 = S (maximal_mu_depth_of_evar_in_pattern' depth E ψ2)
E: evar
depth: nat
Hin: E ∈ free_evars ψ1 ∪ free_evars ψ2
maximal_mu_depth_of_evar_in_pattern' (S depth) E ψ1 `max` maximal_mu_depth_of_evar_in_pattern' (S depth) E ψ2 = S (maximal_mu_depth_of_evar_in_pattern' depth E ψ1 `max` maximal_mu_depth_of_evar_in_pattern' depth E ψ2)
Σ: Signature
ψ: Pattern
IHψ: (E : evar) (depth : nat), E ∈ free_evars ψ → maximal_mu_depth_of_evar_in_pattern' (S depth) E ψ = S (maximal_mu_depth_of_evar_in_pattern' depth E ψ)
E: evar
depth: nat
Hin: E ∈ free_evars ψ
maximal_mu_depth_of_evar_in_pattern' (S depth) E ψ = S (maximal_mu_depth_of_evar_in_pattern' depth E ψ)
Σ: Signature
ψ: Pattern
IHψ: (E : evar) (depth : nat), E ∈ free_evars ψ → maximal_mu_depth_of_evar_in_pattern' (S depth) E ψ = S (maximal_mu_depth_of_evar_in_pattern' depth E ψ)
E: evar
depth: nat
Hin: E ∈ free_evars ψ
maximal_mu_depth_of_evar_in_pattern' (S (S depth)) E ψ = S (maximal_mu_depth_of_evar_in_pattern' (S depth) E ψ)
Σ: Signature
E: evar
depth: nat
Hin: E ∈ ∅

0 = 1
set_solver.
Σ: Signature
ψ1, ψ2: Pattern
IHψ1: (E : evar) (depth : nat), E ∈ free_evars ψ1 → maximal_mu_depth_of_evar_in_pattern' (S depth) E ψ1 = S (maximal_mu_depth_of_evar_in_pattern' depth E ψ1)
IHψ2: (E : evar) (depth : nat), E ∈ free_evars ψ2 → maximal_mu_depth_of_evar_in_pattern' (S depth) E ψ2 = S (maximal_mu_depth_of_evar_in_pattern' depth E ψ2)
E: evar
depth: nat
Hin: E ∈ free_evars ψ1 ∪ free_evars ψ2

maximal_mu_depth_of_evar_in_pattern' (S depth) E ψ1 `max` maximal_mu_depth_of_evar_in_pattern' (S depth) E ψ2 = S (maximal_mu_depth_of_evar_in_pattern' depth E ψ1 `max` maximal_mu_depth_of_evar_in_pattern' depth E ψ2)
Σ: Signature
ψ: Pattern
IHψ: (E : evar) (depth : nat), E ∈ free_evars ψ → maximal_mu_depth_of_evar_in_pattern' (S depth) E ψ = S (maximal_mu_depth_of_evar_in_pattern' depth E ψ)
E: evar
depth: nat
Hin: E ∈ free_evars ψ
maximal_mu_depth_of_evar_in_pattern' (S depth) E ψ = S (maximal_mu_depth_of_evar_in_pattern' depth E ψ)
Σ: Signature
ψ: Pattern
IHψ: (E : evar) (depth : nat), E ∈ free_evars ψ → maximal_mu_depth_of_evar_in_pattern' (S depth) E ψ = S (maximal_mu_depth_of_evar_in_pattern' depth E ψ)
E: evar
depth: nat
Hin: E ∈ free_evars ψ
maximal_mu_depth_of_evar_in_pattern' (S (S depth)) E ψ = S (maximal_mu_depth_of_evar_in_pattern' (S depth) E ψ)
Σ: Signature
ψ1, ψ2: Pattern
IHψ1: (E : evar) (depth : nat), E ∈ free_evars ψ1 → maximal_mu_depth_of_evar_in_pattern' (S depth) E ψ1 = S (maximal_mu_depth_of_evar_in_pattern' depth E ψ1)
IHψ2: (E : evar) (depth : nat), E ∈ free_evars ψ2 → maximal_mu_depth_of_evar_in_pattern' (S depth) E ψ2 = S (maximal_mu_depth_of_evar_in_pattern' depth E ψ2)
E: evar
depth: nat
Hin: E ∈ free_evars ψ1 ∪ free_evars ψ2

maximal_mu_depth_of_evar_in_pattern' (S depth) E ψ1 `max` maximal_mu_depth_of_evar_in_pattern' (S depth) E ψ2 = S (maximal_mu_depth_of_evar_in_pattern' depth E ψ1 `max` maximal_mu_depth_of_evar_in_pattern' depth E ψ2)
Σ: Signature
ψ1, ψ2: Pattern
IHψ1: (E : evar) (depth : nat), E ∈ free_evars ψ1 → maximal_mu_depth_of_evar_in_pattern' (S depth) E ψ1 = S (maximal_mu_depth_of_evar_in_pattern' depth E ψ1)
IHψ2: (E : evar) (depth : nat), E ∈ free_evars ψ2 → maximal_mu_depth_of_evar_in_pattern' (S depth) E ψ2 = S (maximal_mu_depth_of_evar_in_pattern' depth E ψ2)
E: evar
depth: nat
Hin: E ∈ free_evars ψ1 ∪ free_evars ψ2
e: E ∈ free_evars ψ1
e0: E ∈ free_evars ψ2

maximal_mu_depth_of_evar_in_pattern' (S depth) E ψ1 `max` maximal_mu_depth_of_evar_in_pattern' (S depth) E ψ2 = S (maximal_mu_depth_of_evar_in_pattern' depth E ψ1 `max` maximal_mu_depth_of_evar_in_pattern' depth E ψ2)
Σ: Signature
ψ1, ψ2: Pattern
IHψ1: (E : evar) (depth : nat), E ∈ free_evars ψ1 → maximal_mu_depth_of_evar_in_pattern' (S depth) E ψ1 = S (maximal_mu_depth_of_evar_in_pattern' depth E ψ1)
IHψ2: (E : evar) (depth : nat), E ∈ free_evars ψ2 → maximal_mu_depth_of_evar_in_pattern' (S depth) E ψ2 = S (maximal_mu_depth_of_evar_in_pattern' depth E ψ2)
E: evar
depth: nat
Hin: E ∈ free_evars ψ1 ∪ free_evars ψ2
e: E ∈ free_evars ψ1
n: E ∉ free_evars ψ2
maximal_mu_depth_of_evar_in_pattern' (S depth) E ψ1 `max` maximal_mu_depth_of_evar_in_pattern' (S depth) E ψ2 = S (maximal_mu_depth_of_evar_in_pattern' depth E ψ1 `max` maximal_mu_depth_of_evar_in_pattern' depth E ψ2)
Σ: Signature
ψ1, ψ2: Pattern
IHψ1: (E : evar) (depth : nat), E ∈ free_evars ψ1 → maximal_mu_depth_of_evar_in_pattern' (S depth) E ψ1 = S (maximal_mu_depth_of_evar_in_pattern' depth E ψ1)
IHψ2: (E : evar) (depth : nat), E ∈ free_evars ψ2 → maximal_mu_depth_of_evar_in_pattern' (S depth) E ψ2 = S (maximal_mu_depth_of_evar_in_pattern' depth E ψ2)
E: evar
depth: nat
Hin: E ∈ free_evars ψ1 ∪ free_evars ψ2
n: E ∉ free_evars ψ1
e: E ∈ free_evars ψ2
maximal_mu_depth_of_evar_in_pattern' (S depth) E ψ1 `max` maximal_mu_depth_of_evar_in_pattern' (S depth) E ψ2 = S (maximal_mu_depth_of_evar_in_pattern' depth E ψ1 `max` maximal_mu_depth_of_evar_in_pattern' depth E ψ2)
Σ: Signature
ψ1, ψ2: Pattern
IHψ1: (E : evar) (depth : nat), E ∈ free_evars ψ1 → maximal_mu_depth_of_evar_in_pattern' (S depth) E ψ1 = S (maximal_mu_depth_of_evar_in_pattern' depth E ψ1)
IHψ2: (E : evar) (depth : nat), E ∈ free_evars ψ2 → maximal_mu_depth_of_evar_in_pattern' (S depth) E ψ2 = S (maximal_mu_depth_of_evar_in_pattern' depth E ψ2)
E: evar
depth: nat
Hin: E ∈ free_evars ψ1 ∪ free_evars ψ2
n: E ∉ free_evars ψ1
n0: E ∉ free_evars ψ2
maximal_mu_depth_of_evar_in_pattern' (S depth) E ψ1 `max` maximal_mu_depth_of_evar_in_pattern' (S depth) E ψ2 = S (maximal_mu_depth_of_evar_in_pattern' depth E ψ1 `max` maximal_mu_depth_of_evar_in_pattern' depth E ψ2)
Σ: Signature
ψ1, ψ2: Pattern
IHψ1: (E : evar) (depth : nat), E ∈ free_evars ψ1 → maximal_mu_depth_of_evar_in_pattern' (S depth) E ψ1 = S (maximal_mu_depth_of_evar_in_pattern' depth E ψ1)
IHψ2: (E : evar) (depth : nat), E ∈ free_evars ψ2 → maximal_mu_depth_of_evar_in_pattern' (S depth) E ψ2 = S (maximal_mu_depth_of_evar_in_pattern' depth E ψ2)
E: evar
depth: nat
Hin: E ∈ free_evars ψ1 ∪ free_evars ψ2
e: E ∈ free_evars ψ1
e0: E ∈ free_evars ψ2

maximal_mu_depth_of_evar_in_pattern' (S depth) E ψ1 `max` maximal_mu_depth_of_evar_in_pattern' (S depth) E ψ2 = S (maximal_mu_depth_of_evar_in_pattern' depth E ψ1 `max` maximal_mu_depth_of_evar_in_pattern' depth E ψ2)
Σ: Signature
ψ1, ψ2: Pattern
IHψ1: (E : evar) (depth : nat), E ∈ free_evars ψ1 → maximal_mu_depth_of_evar_in_pattern' (S depth) E ψ1 = S (maximal_mu_depth_of_evar_in_pattern' depth E ψ1)
IHψ2: (E : evar) (depth : nat), E ∈ free_evars ψ2 → maximal_mu_depth_of_evar_in_pattern' (S depth) E ψ2 = S (maximal_mu_depth_of_evar_in_pattern' depth E ψ2)
E: evar
depth: nat
Hin: E ∈ free_evars ψ1 ∪ free_evars ψ2
e: E ∈ free_evars ψ1
e0: E ∈ free_evars ψ2

E ∈ free_evars ψ1
Σ: Signature
ψ1, ψ2: Pattern
IHψ1: (E : evar) (depth : nat), E ∈ free_evars ψ1 → maximal_mu_depth_of_evar_in_pattern' (S depth) E ψ1 = S (maximal_mu_depth_of_evar_in_pattern' depth E ψ1)
IHψ2: (E : evar) (depth : nat), E ∈ free_evars ψ2 → maximal_mu_depth_of_evar_in_pattern' (S depth) E ψ2 = S (maximal_mu_depth_of_evar_in_pattern' depth E ψ2)
E: evar
depth: nat
Hin: E ∈ free_evars ψ1 ∪ free_evars ψ2
e: E ∈ free_evars ψ1
e0: E ∈ free_evars ψ2
S (maximal_mu_depth_of_evar_in_pattern' depth E ψ1) `max` maximal_mu_depth_of_evar_in_pattern' (S depth) E ψ2 = S (maximal_mu_depth_of_evar_in_pattern' depth E ψ1 `max` maximal_mu_depth_of_evar_in_pattern' depth E ψ2)
Σ: Signature
ψ1, ψ2: Pattern
IHψ1: (E : evar) (depth : nat), E ∈ free_evars ψ1 → maximal_mu_depth_of_evar_in_pattern' (S depth) E ψ1 = S (maximal_mu_depth_of_evar_in_pattern' depth E ψ1)
IHψ2: (E : evar) (depth : nat), E ∈ free_evars ψ2 → maximal_mu_depth_of_evar_in_pattern' (S depth) E ψ2 = S (maximal_mu_depth_of_evar_in_pattern' depth E ψ2)
E: evar
depth: nat
Hin: E ∈ free_evars ψ1 ∪ free_evars ψ2
e: E ∈ free_evars ψ1
e0: E ∈ free_evars ψ2

S (maximal_mu_depth_of_evar_in_pattern' depth E ψ1) `max` maximal_mu_depth_of_evar_in_pattern' (S depth) E ψ2 = S (maximal_mu_depth_of_evar_in_pattern' depth E ψ1 `max` maximal_mu_depth_of_evar_in_pattern' depth E ψ2)
Σ: Signature
ψ1, ψ2: Pattern
IHψ1: (E : evar) (depth : nat), E ∈ free_evars ψ1 → maximal_mu_depth_of_evar_in_pattern' (S depth) E ψ1 = S (maximal_mu_depth_of_evar_in_pattern' depth E ψ1)
IHψ2: (E : evar) (depth : nat), E ∈ free_evars ψ2 → maximal_mu_depth_of_evar_in_pattern' (S depth) E ψ2 = S (maximal_mu_depth_of_evar_in_pattern' depth E ψ2)
E: evar
depth: nat
Hin: E ∈ free_evars ψ1 ∪ free_evars ψ2
e: E ∈ free_evars ψ1
e0: E ∈ free_evars ψ2

E ∈ free_evars ψ2
Σ: Signature
ψ1, ψ2: Pattern
IHψ1: (E : evar) (depth : nat), E ∈ free_evars ψ1 → maximal_mu_depth_of_evar_in_pattern' (S depth) E ψ1 = S (maximal_mu_depth_of_evar_in_pattern' depth E ψ1)
IHψ2: (E : evar) (depth : nat), E ∈ free_evars ψ2 → maximal_mu_depth_of_evar_in_pattern' (S depth) E ψ2 = S (maximal_mu_depth_of_evar_in_pattern' depth E ψ2)
E: evar
depth: nat
Hin: E ∈ free_evars ψ1 ∪ free_evars ψ2
e: E ∈ free_evars ψ1
e0: E ∈ free_evars ψ2
S (maximal_mu_depth_of_evar_in_pattern' depth E ψ1) `max` S (maximal_mu_depth_of_evar_in_pattern' depth E ψ2) = S (maximal_mu_depth_of_evar_in_pattern' depth E ψ1 `max` maximal_mu_depth_of_evar_in_pattern' depth E ψ2)
Σ: Signature
ψ1, ψ2: Pattern
IHψ1: (E : evar) (depth : nat), E ∈ free_evars ψ1 → maximal_mu_depth_of_evar_in_pattern' (S depth) E ψ1 = S (maximal_mu_depth_of_evar_in_pattern' depth E ψ1)
IHψ2: (E : evar) (depth : nat), E ∈ free_evars ψ2 → maximal_mu_depth_of_evar_in_pattern' (S depth) E ψ2 = S (maximal_mu_depth_of_evar_in_pattern' depth E ψ2)
E: evar
depth: nat
Hin: E ∈ free_evars ψ1 ∪ free_evars ψ2
e: E ∈ free_evars ψ1
e0: E ∈ free_evars ψ2

S (maximal_mu_depth_of_evar_in_pattern' depth E ψ1) `max` S (maximal_mu_depth_of_evar_in_pattern' depth E ψ2) = S (maximal_mu_depth_of_evar_in_pattern' depth E ψ1 `max` maximal_mu_depth_of_evar_in_pattern' depth E ψ2)
Σ: Signature
ψ1, ψ2: Pattern
IHψ1: (E : evar) (depth : nat), E ∈ free_evars ψ1 → maximal_mu_depth_of_evar_in_pattern' (S depth) E ψ1 = S (maximal_mu_depth_of_evar_in_pattern' depth E ψ1)
IHψ2: (E : evar) (depth : nat), E ∈ free_evars ψ2 → maximal_mu_depth_of_evar_in_pattern' (S depth) E ψ2 = S (maximal_mu_depth_of_evar_in_pattern' depth E ψ2)
E: evar
depth: nat
Hin: E ∈ free_evars ψ1 ∪ free_evars ψ2
e: E ∈ free_evars ψ1
e0: E ∈ free_evars ψ2

S (maximal_mu_depth_of_evar_in_pattern' depth E ψ1 `max` maximal_mu_depth_of_evar_in_pattern' depth E ψ2) = S (maximal_mu_depth_of_evar_in_pattern' depth E ψ1 `max` maximal_mu_depth_of_evar_in_pattern' depth E ψ2)
reflexivity.
Σ: Signature
ψ1, ψ2: Pattern
IHψ1: (E : evar) (depth : nat), E ∈ free_evars ψ1 → maximal_mu_depth_of_evar_in_pattern' (S depth) E ψ1 = S (maximal_mu_depth_of_evar_in_pattern' depth E ψ1)
IHψ2: (E : evar) (depth : nat), E ∈ free_evars ψ2 → maximal_mu_depth_of_evar_in_pattern' (S depth) E ψ2 = S (maximal_mu_depth_of_evar_in_pattern' depth E ψ2)
E: evar
depth: nat
Hin: E ∈ free_evars ψ1 ∪ free_evars ψ2
e: E ∈ free_evars ψ1
n: E ∉ free_evars ψ2

maximal_mu_depth_of_evar_in_pattern' (S depth) E ψ1 `max` maximal_mu_depth_of_evar_in_pattern' (S depth) E ψ2 = S (maximal_mu_depth_of_evar_in_pattern' depth E ψ1 `max` maximal_mu_depth_of_evar_in_pattern' depth E ψ2)
Σ: Signature
ψ1, ψ2: Pattern
IHψ1: (E : evar) (depth : nat), E ∈ free_evars ψ1 → maximal_mu_depth_of_evar_in_pattern' (S depth) E ψ1 = S (maximal_mu_depth_of_evar_in_pattern' depth E ψ1)
IHψ2: (E : evar) (depth : nat), E ∈ free_evars ψ2 → maximal_mu_depth_of_evar_in_pattern' (S depth) E ψ2 = S (maximal_mu_depth_of_evar_in_pattern' depth E ψ2)
E: evar
depth: nat
Hin: E ∈ free_evars ψ1 ∪ free_evars ψ2
n: E ∉ free_evars ψ1
e: E ∈ free_evars ψ2
maximal_mu_depth_of_evar_in_pattern' (S depth) E ψ1 `max` maximal_mu_depth_of_evar_in_pattern' (S depth) E ψ2 = S (maximal_mu_depth_of_evar_in_pattern' depth E ψ1 `max` maximal_mu_depth_of_evar_in_pattern' depth E ψ2)
Σ: Signature
ψ1, ψ2: Pattern
IHψ1: (E : evar) (depth : nat), E ∈ free_evars ψ1 → maximal_mu_depth_of_evar_in_pattern' (S depth) E ψ1 = S (maximal_mu_depth_of_evar_in_pattern' depth E ψ1)
IHψ2: (E : evar) (depth : nat), E ∈ free_evars ψ2 → maximal_mu_depth_of_evar_in_pattern' (S depth) E ψ2 = S (maximal_mu_depth_of_evar_in_pattern' depth E ψ2)
E: evar
depth: nat
Hin: E ∈ free_evars ψ1 ∪ free_evars ψ2
n: E ∉ free_evars ψ1
n0: E ∉ free_evars ψ2
maximal_mu_depth_of_evar_in_pattern' (S depth) E ψ1 `max` maximal_mu_depth_of_evar_in_pattern' (S depth) E ψ2 = S (maximal_mu_depth_of_evar_in_pattern' depth E ψ1 `max` maximal_mu_depth_of_evar_in_pattern' depth E ψ2)
Σ: Signature
ψ1, ψ2: Pattern
IHψ1: (E : evar) (depth : nat), E ∈ free_evars ψ1 → maximal_mu_depth_of_evar_in_pattern' (S depth) E ψ1 = S (maximal_mu_depth_of_evar_in_pattern' depth E ψ1)
IHψ2: (E : evar) (depth : nat), E ∈ free_evars ψ2 → maximal_mu_depth_of_evar_in_pattern' (S depth) E ψ2 = S (maximal_mu_depth_of_evar_in_pattern' depth E ψ2)
E: evar
depth: nat
Hin: E ∈ free_evars ψ1 ∪ free_evars ψ2
e: E ∈ free_evars ψ1
n: E ∉ free_evars ψ2

maximal_mu_depth_of_evar_in_pattern' (S depth) E ψ1 `max` maximal_mu_depth_of_evar_in_pattern' (S depth) E ψ2 = S (maximal_mu_depth_of_evar_in_pattern' depth E ψ1 `max` maximal_mu_depth_of_evar_in_pattern' depth E ψ2)
Σ: Signature
ψ1, ψ2: Pattern
IHψ1: (E : evar) (depth : nat), E ∈ free_evars ψ1 → maximal_mu_depth_of_evar_in_pattern' (S depth) E ψ1 = S (maximal_mu_depth_of_evar_in_pattern' depth E ψ1)
IHψ2: (E : evar) (depth : nat), E ∈ free_evars ψ2 → maximal_mu_depth_of_evar_in_pattern' (S depth) E ψ2 = S (maximal_mu_depth_of_evar_in_pattern' depth E ψ2)
E: evar
depth: nat
Hin: E ∈ free_evars ψ1 ∪ free_evars ψ2
e: E ∈ free_evars ψ1
n: E ∉ free_evars ψ2

E ∈ free_evars ψ1
Σ: Signature
ψ1, ψ2: Pattern
IHψ1: (E : evar) (depth : nat), E ∈ free_evars ψ1 → maximal_mu_depth_of_evar_in_pattern' (S depth) E ψ1 = S (maximal_mu_depth_of_evar_in_pattern' depth E ψ1)
IHψ2: (E : evar) (depth : nat), E ∈ free_evars ψ2 → maximal_mu_depth_of_evar_in_pattern' (S depth) E ψ2 = S (maximal_mu_depth_of_evar_in_pattern' depth E ψ2)
E: evar
depth: nat
Hin: E ∈ free_evars ψ1 ∪ free_evars ψ2
e: E ∈ free_evars ψ1
n: E ∉ free_evars ψ2
S (maximal_mu_depth_of_evar_in_pattern' depth E ψ1) `max` maximal_mu_depth_of_evar_in_pattern' (S depth) E ψ2 = S (maximal_mu_depth_of_evar_in_pattern' depth E ψ1 `max` maximal_mu_depth_of_evar_in_pattern' depth E ψ2)
Σ: Signature
ψ1, ψ2: Pattern
IHψ1: (E : evar) (depth : nat), E ∈ free_evars ψ1 → maximal_mu_depth_of_evar_in_pattern' (S depth) E ψ1 = S (maximal_mu_depth_of_evar_in_pattern' depth E ψ1)
IHψ2: (E : evar) (depth : nat), E ∈ free_evars ψ2 → maximal_mu_depth_of_evar_in_pattern' (S depth) E ψ2 = S (maximal_mu_depth_of_evar_in_pattern' depth E ψ2)
E: evar
depth: nat
Hin: E ∈ free_evars ψ1 ∪ free_evars ψ2
e: E ∈ free_evars ψ1
n: E ∉ free_evars ψ2

S (maximal_mu_depth_of_evar_in_pattern' depth E ψ1) `max` maximal_mu_depth_of_evar_in_pattern' (S depth) E ψ2 = S (maximal_mu_depth_of_evar_in_pattern' depth E ψ1 `max` maximal_mu_depth_of_evar_in_pattern' depth E ψ2)
Σ: Signature
ψ1, ψ2: Pattern
IHψ1: (E : evar) (depth : nat), E ∈ free_evars ψ1 → maximal_mu_depth_of_evar_in_pattern' (S depth) E ψ1 = S (maximal_mu_depth_of_evar_in_pattern' depth E ψ1)
IHψ2: (E : evar) (depth : nat), E ∈ free_evars ψ2 → maximal_mu_depth_of_evar_in_pattern' (S depth) E ψ2 = S (maximal_mu_depth_of_evar_in_pattern' depth E ψ2)
E: evar
depth: nat
Hin: E ∈ free_evars ψ1 ∪ free_evars ψ2
e: E ∈ free_evars ψ1
n: E ∉ free_evars ψ2

E ∉ free_evars ψ2
Σ: Signature
ψ1, ψ2: Pattern
IHψ1: (E : evar) (depth : nat), E ∈ free_evars ψ1 → maximal_mu_depth_of_evar_in_pattern' (S depth) E ψ1 = S (maximal_mu_depth_of_evar_in_pattern' depth E ψ1)
IHψ2: (E : evar) (depth : nat), E ∈ free_evars ψ2 → maximal_mu_depth_of_evar_in_pattern' (S depth) E ψ2 = S (maximal_mu_depth_of_evar_in_pattern' depth E ψ2)
E: evar
depth: nat
Hin: E ∈ free_evars ψ1 ∪ free_evars ψ2
e: E ∈ free_evars ψ1
n: E ∉ free_evars ψ2
S (maximal_mu_depth_of_evar_in_pattern' depth E ψ1) `max` 0 = S (maximal_mu_depth_of_evar_in_pattern' depth E ψ1 `max` maximal_mu_depth_of_evar_in_pattern' depth E ψ2)
Σ: Signature
ψ1, ψ2: Pattern
IHψ1: (E : evar) (depth : nat), E ∈ free_evars ψ1 → maximal_mu_depth_of_evar_in_pattern' (S depth) E ψ1 = S (maximal_mu_depth_of_evar_in_pattern' depth E ψ1)
IHψ2: (E : evar) (depth : nat), E ∈ free_evars ψ2 → maximal_mu_depth_of_evar_in_pattern' (S depth) E ψ2 = S (maximal_mu_depth_of_evar_in_pattern' depth E ψ2)
E: evar
depth: nat
Hin: E ∈ free_evars ψ1 ∪ free_evars ψ2
e: E ∈ free_evars ψ1
n: E ∉ free_evars ψ2

E ∉ free_evars ψ2
assumption.
Σ: Signature
ψ1, ψ2: Pattern
IHψ1: (E : evar) (depth : nat), E ∈ free_evars ψ1 → maximal_mu_depth_of_evar_in_pattern' (S depth) E ψ1 = S (maximal_mu_depth_of_evar_in_pattern' depth E ψ1)
IHψ2: (E : evar) (depth : nat), E ∈ free_evars ψ2 → maximal_mu_depth_of_evar_in_pattern' (S depth) E ψ2 = S (maximal_mu_depth_of_evar_in_pattern' depth E ψ2)
E: evar
depth: nat
Hin: E ∈ free_evars ψ1 ∪ free_evars ψ2
e: E ∈ free_evars ψ1
n: E ∉ free_evars ψ2

S (maximal_mu_depth_of_evar_in_pattern' depth E ψ1) `max` 0 = S (maximal_mu_depth_of_evar_in_pattern' depth E ψ1 `max` maximal_mu_depth_of_evar_in_pattern' depth E ψ2)
Σ: Signature
ψ1, ψ2: Pattern
IHψ1: (E : evar) (depth : nat), E ∈ free_evars ψ1 → maximal_mu_depth_of_evar_in_pattern' (S depth) E ψ1 = S (maximal_mu_depth_of_evar_in_pattern' depth E ψ1)
IHψ2: (E : evar) (depth : nat), E ∈ free_evars ψ2 → maximal_mu_depth_of_evar_in_pattern' (S depth) E ψ2 = S (maximal_mu_depth_of_evar_in_pattern' depth E ψ2)
E: evar
depth: nat
Hin: E ∈ free_evars ψ1 ∪ free_evars ψ2
e: E ∈ free_evars ψ1
n: E ∉ free_evars ψ2

E ∉ free_evars ψ2
Σ: Signature
ψ1, ψ2: Pattern
IHψ1: (E : evar) (depth : nat), E ∈ free_evars ψ1 → maximal_mu_depth_of_evar_in_pattern' (S depth) E ψ1 = S (maximal_mu_depth_of_evar_in_pattern' depth E ψ1)
IHψ2: (E : evar) (depth : nat), E ∈ free_evars ψ2 → maximal_mu_depth_of_evar_in_pattern' (S depth) E ψ2 = S (maximal_mu_depth_of_evar_in_pattern' depth E ψ2)
E: evar
depth: nat
Hin: E ∈ free_evars ψ1 ∪ free_evars ψ2
e: E ∈ free_evars ψ1
n: E ∉ free_evars ψ2
S (maximal_mu_depth_of_evar_in_pattern' depth E ψ1) `max` 0 = S (maximal_mu_depth_of_evar_in_pattern' depth E ψ1 `max` 0)
Σ: Signature
ψ1, ψ2: Pattern
IHψ1: (E : evar) (depth : nat), E ∈ free_evars ψ1 → maximal_mu_depth_of_evar_in_pattern' (S depth) E ψ1 = S (maximal_mu_depth_of_evar_in_pattern' depth E ψ1)
IHψ2: (E : evar) (depth : nat), E ∈ free_evars ψ2 → maximal_mu_depth_of_evar_in_pattern' (S depth) E ψ2 = S (maximal_mu_depth_of_evar_in_pattern' depth E ψ2)
E: evar
depth: nat
Hin: E ∈ free_evars ψ1 ∪ free_evars ψ2
e: E ∈ free_evars ψ1
n: E ∉ free_evars ψ2

E ∉ free_evars ψ2
assumption.
Σ: Signature
ψ1, ψ2: Pattern
IHψ1: (E : evar) (depth : nat), E ∈ free_evars ψ1 → maximal_mu_depth_of_evar_in_pattern' (S depth) E ψ1 = S (maximal_mu_depth_of_evar_in_pattern' depth E ψ1)
IHψ2: (E : evar) (depth : nat), E ∈ free_evars ψ2 → maximal_mu_depth_of_evar_in_pattern' (S depth) E ψ2 = S (maximal_mu_depth_of_evar_in_pattern' depth E ψ2)
E: evar
depth: nat
Hin: E ∈ free_evars ψ1 ∪ free_evars ψ2
e: E ∈ free_evars ψ1
n: E ∉ free_evars ψ2

S (maximal_mu_depth_of_evar_in_pattern' depth E ψ1) `max` 0 = S (maximal_mu_depth_of_evar_in_pattern' depth E ψ1 `max` 0)
Σ: Signature
ψ1, ψ2: Pattern
IHψ1: (E : evar) (depth : nat), E ∈ free_evars ψ1 → maximal_mu_depth_of_evar_in_pattern' (S depth) E ψ1 = S (maximal_mu_depth_of_evar_in_pattern' depth E ψ1)
IHψ2: (E : evar) (depth : nat), E ∈ free_evars ψ2 → maximal_mu_depth_of_evar_in_pattern' (S depth) E ψ2 = S (maximal_mu_depth_of_evar_in_pattern' depth E ψ2)
E: evar
depth: nat
Hin: E ∈ free_evars ψ1 ∪ free_evars ψ2
e: E ∈ free_evars ψ1
n: E ∉ free_evars ψ2

S (maximal_mu_depth_of_evar_in_pattern' depth E ψ1) = S (maximal_mu_depth_of_evar_in_pattern' depth E ψ1 `max` 0)
Σ: Signature
ψ1, ψ2: Pattern
IHψ1: (E : evar) (depth : nat), E ∈ free_evars ψ1 → maximal_mu_depth_of_evar_in_pattern' (S depth) E ψ1 = S (maximal_mu_depth_of_evar_in_pattern' depth E ψ1)
IHψ2: (E : evar) (depth : nat), E ∈ free_evars ψ2 → maximal_mu_depth_of_evar_in_pattern' (S depth) E ψ2 = S (maximal_mu_depth_of_evar_in_pattern' depth E ψ2)
E: evar
depth: nat
Hin: E ∈ free_evars ψ1 ∪ free_evars ψ2
e: E ∈ free_evars ψ1
n: E ∉ free_evars ψ2

S (maximal_mu_depth_of_evar_in_pattern' depth E ψ1) = S (0 `max` maximal_mu_depth_of_evar_in_pattern' depth E ψ1)
Σ: Signature
ψ1, ψ2: Pattern
IHψ1: (E : evar) (depth : nat), E ∈ free_evars ψ1 → maximal_mu_depth_of_evar_in_pattern' (S depth) E ψ1 = S (maximal_mu_depth_of_evar_in_pattern' depth E ψ1)
IHψ2: (E : evar) (depth : nat), E ∈ free_evars ψ2 → maximal_mu_depth_of_evar_in_pattern' (S depth) E ψ2 = S (maximal_mu_depth_of_evar_in_pattern' depth E ψ2)
E: evar
depth: nat
Hin: E ∈ free_evars ψ1 ∪ free_evars ψ2
e: E ∈ free_evars ψ1
n: E ∉ free_evars ψ2

S (maximal_mu_depth_of_evar_in_pattern' depth E ψ1) = S (maximal_mu_depth_of_evar_in_pattern' depth E ψ1)
reflexivity.
Σ: Signature
ψ1, ψ2: Pattern
IHψ1: (E : evar) (depth : nat), E ∈ free_evars ψ1 → maximal_mu_depth_of_evar_in_pattern' (S depth) E ψ1 = S (maximal_mu_depth_of_evar_in_pattern' depth E ψ1)
IHψ2: (E : evar) (depth : nat), E ∈ free_evars ψ2 → maximal_mu_depth_of_evar_in_pattern' (S depth) E ψ2 = S (maximal_mu_depth_of_evar_in_pattern' depth E ψ2)
E: evar
depth: nat
Hin: E ∈ free_evars ψ1 ∪ free_evars ψ2
n: E ∉ free_evars ψ1
e: E ∈ free_evars ψ2

maximal_mu_depth_of_evar_in_pattern' (S depth) E ψ1 `max` maximal_mu_depth_of_evar_in_pattern' (S depth) E ψ2 = S (maximal_mu_depth_of_evar_in_pattern' depth E ψ1 `max` maximal_mu_depth_of_evar_in_pattern' depth E ψ2)
Σ: Signature
ψ1, ψ2: Pattern
IHψ1: (E : evar) (depth : nat), E ∈ free_evars ψ1 → maximal_mu_depth_of_evar_in_pattern' (S depth) E ψ1 = S (maximal_mu_depth_of_evar_in_pattern' depth E ψ1)
IHψ2: (E : evar) (depth : nat), E ∈ free_evars ψ2 → maximal_mu_depth_of_evar_in_pattern' (S depth) E ψ2 = S (maximal_mu_depth_of_evar_in_pattern' depth E ψ2)
E: evar
depth: nat
Hin: E ∈ free_evars ψ1 ∪ free_evars ψ2
n: E ∉ free_evars ψ1
n0: E ∉ free_evars ψ2
maximal_mu_depth_of_evar_in_pattern' (S depth) E ψ1 `max` maximal_mu_depth_of_evar_in_pattern' (S depth) E ψ2 = S (maximal_mu_depth_of_evar_in_pattern' depth E ψ1 `max` maximal_mu_depth_of_evar_in_pattern' depth E ψ2)
Σ: Signature
ψ1, ψ2: Pattern
IHψ1: (E : evar) (depth : nat), E ∈ free_evars ψ1 → maximal_mu_depth_of_evar_in_pattern' (S depth) E ψ1 = S (maximal_mu_depth_of_evar_in_pattern' depth E ψ1)
IHψ2: (E : evar) (depth : nat), E ∈ free_evars ψ2 → maximal_mu_depth_of_evar_in_pattern' (S depth) E ψ2 = S (maximal_mu_depth_of_evar_in_pattern' depth E ψ2)
E: evar
depth: nat
Hin: E ∈ free_evars ψ1 ∪ free_evars ψ2
n: E ∉ free_evars ψ1
e: E ∈ free_evars ψ2

maximal_mu_depth_of_evar_in_pattern' (S depth) E ψ1 `max` maximal_mu_depth_of_evar_in_pattern' (S depth) E ψ2 = S (maximal_mu_depth_of_evar_in_pattern' depth E ψ1 `max` maximal_mu_depth_of_evar_in_pattern' depth E ψ2)
Σ: Signature
ψ1, ψ2: Pattern
IHψ1: (E : evar) (depth : nat), E ∈ free_evars ψ1 → maximal_mu_depth_of_evar_in_pattern' (S depth) E ψ1 = S (maximal_mu_depth_of_evar_in_pattern' depth E ψ1)
IHψ2: (E : evar) (depth : nat), E ∈ free_evars ψ2 → maximal_mu_depth_of_evar_in_pattern' (S depth) E ψ2 = S (maximal_mu_depth_of_evar_in_pattern' depth E ψ2)
E: evar
depth: nat
Hin: E ∈ free_evars ψ1 ∪ free_evars ψ2
n: E ∉ free_evars ψ1
e: E ∈ free_evars ψ2

E ∈ free_evars ψ2
Σ: Signature
ψ1, ψ2: Pattern
IHψ1: (E : evar) (depth : nat), E ∈ free_evars ψ1 → maximal_mu_depth_of_evar_in_pattern' (S depth) E ψ1 = S (maximal_mu_depth_of_evar_in_pattern' depth E ψ1)
IHψ2: (E : evar) (depth : nat), E ∈ free_evars ψ2 → maximal_mu_depth_of_evar_in_pattern' (S depth) E ψ2 = S (maximal_mu_depth_of_evar_in_pattern' depth E ψ2)
E: evar
depth: nat
Hin: E ∈ free_evars ψ1 ∪ free_evars ψ2
n: E ∉ free_evars ψ1
e: E ∈ free_evars ψ2
maximal_mu_depth_of_evar_in_pattern' (S depth) E ψ1 `max` S (maximal_mu_depth_of_evar_in_pattern' depth E ψ2) = S (maximal_mu_depth_of_evar_in_pattern' depth E ψ1 `max` maximal_mu_depth_of_evar_in_pattern' depth E ψ2)
Σ: Signature
ψ1, ψ2: Pattern
IHψ1: (E : evar) (depth : nat), E ∈ free_evars ψ1 → maximal_mu_depth_of_evar_in_pattern' (S depth) E ψ1 = S (maximal_mu_depth_of_evar_in_pattern' depth E ψ1)
IHψ2: (E : evar) (depth : nat), E ∈ free_evars ψ2 → maximal_mu_depth_of_evar_in_pattern' (S depth) E ψ2 = S (maximal_mu_depth_of_evar_in_pattern' depth E ψ2)
E: evar
depth: nat
Hin: E ∈ free_evars ψ1 ∪ free_evars ψ2
n: E ∉ free_evars ψ1
e: E ∈ free_evars ψ2

maximal_mu_depth_of_evar_in_pattern' (S depth) E ψ1 `max` S (maximal_mu_depth_of_evar_in_pattern' depth E ψ2) = S (maximal_mu_depth_of_evar_in_pattern' depth E ψ1 `max` maximal_mu_depth_of_evar_in_pattern' depth E ψ2)
Σ: Signature
ψ1, ψ2: Pattern
IHψ1: (E : evar) (depth : nat), E ∈ free_evars ψ1 → maximal_mu_depth_of_evar_in_pattern' (S depth) E ψ1 = S (maximal_mu_depth_of_evar_in_pattern' depth E ψ1)
IHψ2: (E : evar) (depth : nat), E ∈ free_evars ψ2 → maximal_mu_depth_of_evar_in_pattern' (S depth) E ψ2 = S (maximal_mu_depth_of_evar_in_pattern' depth E ψ2)
E: evar
depth: nat
Hin: E ∈ free_evars ψ1 ∪ free_evars ψ2
n: E ∉ free_evars ψ1
e: E ∈ free_evars ψ2

E ∉ free_evars ψ1
Σ: Signature
ψ1, ψ2: Pattern
IHψ1: (E : evar) (depth : nat), E ∈ free_evars ψ1 → maximal_mu_depth_of_evar_in_pattern' (S depth) E ψ1 = S (maximal_mu_depth_of_evar_in_pattern' depth E ψ1)
IHψ2: (E : evar) (depth : nat), E ∈ free_evars ψ2 → maximal_mu_depth_of_evar_in_pattern' (S depth) E ψ2 = S (maximal_mu_depth_of_evar_in_pattern' depth E ψ2)
E: evar
depth: nat
Hin: E ∈ free_evars ψ1 ∪ free_evars ψ2
n: E ∉ free_evars ψ1
e: E ∈ free_evars ψ2
0 `max` S (maximal_mu_depth_of_evar_in_pattern' depth E ψ2) = S (maximal_mu_depth_of_evar_in_pattern' depth E ψ1 `max` maximal_mu_depth_of_evar_in_pattern' depth E ψ2)
Σ: Signature
ψ1, ψ2: Pattern
IHψ1: (E : evar) (depth : nat), E ∈ free_evars ψ1 → maximal_mu_depth_of_evar_in_pattern' (S depth) E ψ1 = S (maximal_mu_depth_of_evar_in_pattern' depth E ψ1)
IHψ2: (E : evar) (depth : nat), E ∈ free_evars ψ2 → maximal_mu_depth_of_evar_in_pattern' (S depth) E ψ2 = S (maximal_mu_depth_of_evar_in_pattern' depth E ψ2)
E: evar
depth: nat
Hin: E ∈ free_evars ψ1 ∪ free_evars ψ2
n: E ∉ free_evars ψ1
e: E ∈ free_evars ψ2

E ∉ free_evars ψ1
assumption.
Σ: Signature
ψ1, ψ2: Pattern
IHψ1: (E : evar) (depth : nat), E ∈ free_evars ψ1 → maximal_mu_depth_of_evar_in_pattern' (S depth) E ψ1 = S (maximal_mu_depth_of_evar_in_pattern' depth E ψ1)
IHψ2: (E : evar) (depth : nat), E ∈ free_evars ψ2 → maximal_mu_depth_of_evar_in_pattern' (S depth) E ψ2 = S (maximal_mu_depth_of_evar_in_pattern' depth E ψ2)
E: evar
depth: nat
Hin: E ∈ free_evars ψ1 ∪ free_evars ψ2
n: E ∉ free_evars ψ1
e: E ∈ free_evars ψ2

0 `max` S (maximal_mu_depth_of_evar_in_pattern' depth E ψ2) = S (maximal_mu_depth_of_evar_in_pattern' depth E ψ1 `max` maximal_mu_depth_of_evar_in_pattern' depth E ψ2)
Σ: Signature
ψ1, ψ2: Pattern
IHψ1: (E : evar) (depth : nat), E ∈ free_evars ψ1 → maximal_mu_depth_of_evar_in_pattern' (S depth) E ψ1 = S (maximal_mu_depth_of_evar_in_pattern' depth E ψ1)
IHψ2: (E : evar) (depth : nat), E ∈ free_evars ψ2 → maximal_mu_depth_of_evar_in_pattern' (S depth) E ψ2 = S (maximal_mu_depth_of_evar_in_pattern' depth E ψ2)
E: evar
depth: nat
Hin: E ∈ free_evars ψ1 ∪ free_evars ψ2
n: E ∉ free_evars ψ1
e: E ∈ free_evars ψ2

E ∉ free_evars ψ1
Σ: Signature
ψ1, ψ2: Pattern
IHψ1: (E : evar) (depth : nat), E ∈ free_evars ψ1 → maximal_mu_depth_of_evar_in_pattern' (S depth) E ψ1 = S (maximal_mu_depth_of_evar_in_pattern' depth E ψ1)
IHψ2: (E : evar) (depth : nat), E ∈ free_evars ψ2 → maximal_mu_depth_of_evar_in_pattern' (S depth) E ψ2 = S (maximal_mu_depth_of_evar_in_pattern' depth E ψ2)
E: evar
depth: nat
Hin: E ∈ free_evars ψ1 ∪ free_evars ψ2
n: E ∉ free_evars ψ1
e: E ∈ free_evars ψ2
0 `max` S (maximal_mu_depth_of_evar_in_pattern' depth E ψ2) = S (0 `max` maximal_mu_depth_of_evar_in_pattern' depth E ψ2)
Σ: Signature
ψ1, ψ2: Pattern
IHψ1: (E : evar) (depth : nat), E ∈ free_evars ψ1 → maximal_mu_depth_of_evar_in_pattern' (S depth) E ψ1 = S (maximal_mu_depth_of_evar_in_pattern' depth E ψ1)
IHψ2: (E : evar) (depth : nat), E ∈ free_evars ψ2 → maximal_mu_depth_of_evar_in_pattern' (S depth) E ψ2 = S (maximal_mu_depth_of_evar_in_pattern' depth E ψ2)
E: evar
depth: nat
Hin: E ∈ free_evars ψ1 ∪ free_evars ψ2
n: E ∉ free_evars ψ1
e: E ∈ free_evars ψ2

E ∉ free_evars ψ1
assumption.
Σ: Signature
ψ1, ψ2: Pattern
IHψ1: (E : evar) (depth : nat), E ∈ free_evars ψ1 → maximal_mu_depth_of_evar_in_pattern' (S depth) E ψ1 = S (maximal_mu_depth_of_evar_in_pattern' depth E ψ1)
IHψ2: (E : evar) (depth : nat), E ∈ free_evars ψ2 → maximal_mu_depth_of_evar_in_pattern' (S depth) E ψ2 = S (maximal_mu_depth_of_evar_in_pattern' depth E ψ2)
E: evar
depth: nat
Hin: E ∈ free_evars ψ1 ∪ free_evars ψ2
n: E ∉ free_evars ψ1
e: E ∈ free_evars ψ2

0 `max` S (maximal_mu_depth_of_evar_in_pattern' depth E ψ2) = S (0 `max` maximal_mu_depth_of_evar_in_pattern' depth E ψ2)
Σ: Signature
ψ1, ψ2: Pattern
IHψ1: (E : evar) (depth : nat), E ∈ free_evars ψ1 → maximal_mu_depth_of_evar_in_pattern' (S depth) E ψ1 = S (maximal_mu_depth_of_evar_in_pattern' depth E ψ1)
IHψ2: (E : evar) (depth : nat), E ∈ free_evars ψ2 → maximal_mu_depth_of_evar_in_pattern' (S depth) E ψ2 = S (maximal_mu_depth_of_evar_in_pattern' depth E ψ2)
E: evar
depth: nat
Hin: E ∈ free_evars ψ1 ∪ free_evars ψ2
n: E ∉ free_evars ψ1
e: E ∈ free_evars ψ2

S (maximal_mu_depth_of_evar_in_pattern' depth E ψ2) = S (maximal_mu_depth_of_evar_in_pattern' depth E ψ2)
reflexivity.
Σ: Signature
ψ1, ψ2: Pattern
IHψ1: (E : evar) (depth : nat), E ∈ free_evars ψ1 → maximal_mu_depth_of_evar_in_pattern' (S depth) E ψ1 = S (maximal_mu_depth_of_evar_in_pattern' depth E ψ1)
IHψ2: (E : evar) (depth : nat), E ∈ free_evars ψ2 → maximal_mu_depth_of_evar_in_pattern' (S depth) E ψ2 = S (maximal_mu_depth_of_evar_in_pattern' depth E ψ2)
E: evar
depth: nat
Hin: E ∈ free_evars ψ1 ∪ free_evars ψ2
n: E ∉ free_evars ψ1
n0: E ∉ free_evars ψ2

maximal_mu_depth_of_evar_in_pattern' (S depth) E ψ1 `max` maximal_mu_depth_of_evar_in_pattern' (S depth) E ψ2 = S (maximal_mu_depth_of_evar_in_pattern' depth E ψ1 `max` maximal_mu_depth_of_evar_in_pattern' depth E ψ2)
Σ: Signature
ψ1, ψ2: Pattern
IHψ1: (E : evar) (depth : nat), E ∈ free_evars ψ1 → maximal_mu_depth_of_evar_in_pattern' (S depth) E ψ1 = S (maximal_mu_depth_of_evar_in_pattern' depth E ψ1)
IHψ2: (E : evar) (depth : nat), E ∈ free_evars ψ2 → maximal_mu_depth_of_evar_in_pattern' (S depth) E ψ2 = S (maximal_mu_depth_of_evar_in_pattern' depth E ψ2)
E: evar
depth: nat
Hin: E ∈ free_evars ψ1 ∪ free_evars ψ2
n: E ∉ free_evars ψ1
n0: E ∉ free_evars ψ2

maximal_mu_depth_of_evar_in_pattern' (S depth) E ψ1 `max` maximal_mu_depth_of_evar_in_pattern' (S depth) E ψ2 = S (maximal_mu_depth_of_evar_in_pattern' depth E ψ1 `max` maximal_mu_depth_of_evar_in_pattern' depth E ψ2)
Σ: Signature
ψ1, ψ2: Pattern
IHψ1: (E : evar) (depth : nat), E ∈ free_evars ψ1 → maximal_mu_depth_of_evar_in_pattern' (S depth) E ψ1 = S (maximal_mu_depth_of_evar_in_pattern' depth E ψ1)
IHψ2: (E : evar) (depth : nat), E ∈ free_evars ψ2 → maximal_mu_depth_of_evar_in_pattern' (S depth) E ψ2 = S (maximal_mu_depth_of_evar_in_pattern' depth E ψ2)
E: evar
depth: nat
Hin: E ∈ free_evars ψ1 ∪ free_evars ψ2
n: E ∉ free_evars ψ1
n0: E ∉ free_evars ψ2

False
set_solver. }
Σ: Signature
ψ: Pattern
IHψ: (E : evar) (depth : nat), E ∈ free_evars ψ → maximal_mu_depth_of_evar_in_pattern' (S depth) E ψ = S (maximal_mu_depth_of_evar_in_pattern' depth E ψ)
E: evar
depth: nat
Hin: E ∈ free_evars ψ

maximal_mu_depth_of_evar_in_pattern' (S depth) E ψ = S (maximal_mu_depth_of_evar_in_pattern' depth E ψ)
Σ: Signature
ψ: Pattern
IHψ: (E : evar) (depth : nat), E ∈ free_evars ψ → maximal_mu_depth_of_evar_in_pattern' (S depth) E ψ = S (maximal_mu_depth_of_evar_in_pattern' depth E ψ)
E: evar
depth: nat
Hin: E ∈ free_evars ψ
maximal_mu_depth_of_evar_in_pattern' (S (S depth)) E ψ = S (maximal_mu_depth_of_evar_in_pattern' (S depth) E ψ)
Σ: Signature
ψ: Pattern
IHψ: (E : evar) (depth : nat), E ∈ free_evars ψ → maximal_mu_depth_of_evar_in_pattern' (S depth) E ψ = S (maximal_mu_depth_of_evar_in_pattern' depth E ψ)
E: evar
depth: nat
Hin: E ∈ free_evars ψ

maximal_mu_depth_of_evar_in_pattern' (S depth) E ψ = S (maximal_mu_depth_of_evar_in_pattern' depth E ψ)
Σ: Signature
ψ: Pattern
IHψ: (E : evar) (depth : nat), E ∈ free_evars ψ → maximal_mu_depth_of_evar_in_pattern' (S depth) E ψ = S (maximal_mu_depth_of_evar_in_pattern' depth E ψ)
E: evar
depth: nat
Hin: E ∈ free_evars ψ

E ∈ free_evars ψ
Σ: Signature
ψ: Pattern
IHψ: (E : evar) (depth : nat), E ∈ free_evars ψ → maximal_mu_depth_of_evar_in_pattern' (S depth) E ψ = S (maximal_mu_depth_of_evar_in_pattern' depth E ψ)
E: evar
depth: nat
Hin: E ∈ free_evars ψ
S (maximal_mu_depth_of_evar_in_pattern' depth E ψ) = S (maximal_mu_depth_of_evar_in_pattern' depth E ψ)
Σ: Signature
ψ: Pattern
IHψ: (E : evar) (depth : nat), E ∈ free_evars ψ → maximal_mu_depth_of_evar_in_pattern' (S depth) E ψ = S (maximal_mu_depth_of_evar_in_pattern' depth E ψ)
E: evar
depth: nat
Hin: E ∈ free_evars ψ

S (maximal_mu_depth_of_evar_in_pattern' depth E ψ) = S (maximal_mu_depth_of_evar_in_pattern' depth E ψ)
reflexivity.
Σ: Signature
ψ: Pattern
IHψ: (E : evar) (depth : nat), E ∈ free_evars ψ → maximal_mu_depth_of_evar_in_pattern' (S depth) E ψ = S (maximal_mu_depth_of_evar_in_pattern' depth E ψ)
E: evar
depth: nat
Hin: E ∈ free_evars ψ

maximal_mu_depth_of_evar_in_pattern' (S (S depth)) E ψ = S (maximal_mu_depth_of_evar_in_pattern' (S depth) E ψ)
Σ: Signature
ψ: Pattern
IHψ: (E : evar) (depth : nat), E ∈ free_evars ψ → maximal_mu_depth_of_evar_in_pattern' (S depth) E ψ = S (maximal_mu_depth_of_evar_in_pattern' depth E ψ)
E: evar
depth: nat
Hin: E ∈ free_evars ψ

maximal_mu_depth_of_evar_in_pattern' (S (S depth)) E ψ = S (maximal_mu_depth_of_evar_in_pattern' (S depth) E ψ)
Σ: Signature
ψ: Pattern
IHψ: (E : evar) (depth : nat), E ∈ free_evars ψ → maximal_mu_depth_of_evar_in_pattern' (S depth) E ψ = S (maximal_mu_depth_of_evar_in_pattern' depth E ψ)
E: evar
depth: nat
Hin: E ∈ free_evars ψ

E ∈ free_evars ψ
Σ: Signature
ψ: Pattern
IHψ: (E : evar) (depth : nat), E ∈ free_evars ψ → maximal_mu_depth_of_evar_in_pattern' (S depth) E ψ = S (maximal_mu_depth_of_evar_in_pattern' depth E ψ)
E: evar
depth: nat
Hin: E ∈ free_evars ψ
S (maximal_mu_depth_of_evar_in_pattern' (S depth) E ψ) = S (maximal_mu_depth_of_evar_in_pattern' (S depth) E ψ)
Σ: Signature
ψ: Pattern
IHψ: (E : evar) (depth : nat), E ∈ free_evars ψ → maximal_mu_depth_of_evar_in_pattern' (S depth) E ψ = S (maximal_mu_depth_of_evar_in_pattern' depth E ψ)
E: evar
depth: nat
Hin: E ∈ free_evars ψ

S (maximal_mu_depth_of_evar_in_pattern' (S depth) E ψ) = S (maximal_mu_depth_of_evar_in_pattern' (S depth) E ψ)
reflexivity. } Qed.
Σ: Signature
Γ: Theory
E: evar
ψ: Pattern
x: evar
p, q: Pattern
gpi: ProofInfo
exdepth, mudepth: nat
EvS: EVarSet
SvS: SVarSet
HxneqE: x ≠ E
wfψ: well_formed (ex , ψ)
wfp: well_formed p
wfq: well_formed q
Heqx: x = evar_fresh (elements EvS)
HEinψ: E ∈ free_evars ψ
i': ProofInfo
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
ψ_sub_EvS: free_evars ψ ⊆ EvS
Heqi': i' = (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (ex , ψ))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (ex , ψ))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (ex , ψ)) then false else true, FP := ∅)
pile: ProofInfoLe i' gpi
IH: Γ ⊢i ψ^{evar:0↦x}^[[evar:E↦p]] <---> ψ^{evar:0↦x}^[[evar:E↦q]] using gpi

Γ ⊢i (ex , ψ^[[evar:E↦p]]) <---> (ex , ψ^[[evar:E↦q]]) using gpi
Σ: Signature
Γ: Theory
E: evar
ψ: Pattern
x: evar
p, q: Pattern
gpi: ProofInfo
exdepth, mudepth: nat
EvS: EVarSet
SvS: SVarSet
HxneqE: x ≠ E
wfψ: well_formed (ex , ψ)
wfp: well_formed p
wfq: well_formed q
Heqx: x = evar_fresh (elements EvS)
HEinψ: E ∈ free_evars ψ
i': ProofInfo
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
ψ_sub_EvS: free_evars ψ ⊆ EvS
Heqi': i' = (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (ex , ψ))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (ex , ψ))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (ex , ψ)) then false else true, FP := ∅)
pile: ProofInfoLe i' gpi
IH: Γ ⊢i ψ^{evar:0↦x}^[[evar:E↦p]] <---> ψ^{evar:0↦x}^[[evar:E↦q]] using gpi

Γ ⊢i (ex , ψ^[[evar:E↦p]]) <---> (ex , ψ^[[evar:E↦q]]) using gpi
Σ: Signature
Γ: Theory
E: evar
ψ: Pattern
x: evar
p, q: Pattern
gpi: ProofInfo
exdepth, mudepth: nat
EvS: EVarSet
SvS: SVarSet
HxneqE: x ≠ E
wfψ: well_formed (ex , ψ)
wfp: well_formed p
wfq: well_formed q
Heqx: x = evar_fresh (elements EvS)
HEinψ: E ∈ free_evars ψ
i': ProofInfo
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
ψ_sub_EvS: free_evars ψ ⊆ EvS
Heqi': i' = (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (ex , ψ))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (ex , ψ))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (ex , ψ)) then false else true, FP := ∅)
pile: ProofInfoLe i' gpi
IH: Γ ⊢i ψ^[[evar:E↦p]]^{evar:0↦x} <---> ψ^[[evar:E↦q]]^{evar:0↦x} using gpi

Γ ⊢i (ex , ψ^[[evar:E↦p]]) <---> (ex , ψ^[[evar:E↦q]]) using gpi
Σ: Signature
Γ: Theory
E: evar
ψ: Pattern
x: evar
p, q: Pattern
gpi: ProofInfo
exdepth, mudepth: nat
EvS: EVarSet
SvS: SVarSet
HxneqE: x ≠ E
wfψ: well_formed (ex , ψ)
wfp: well_formed p
wfq: well_formed q
Heqx: x = evar_fresh (elements EvS)
HEinψ: E ∈ free_evars ψ
i': ProofInfo
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
ψ_sub_EvS: free_evars ψ ⊆ EvS
Heqi': i' = (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (ex , ψ))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (ex , ψ))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (ex , ψ)) then false else true, FP := ∅)
pile: ProofInfoLe i' gpi
IH: Γ ⊢i ψ^{evar:0↦x}^[[evar:E↦p]] <---> ψ^{evar:0↦x}^[[evar:E↦q]] using gpi
x ≠ E
Σ: Signature
Γ: Theory
E: evar
ψ: Pattern
x: evar
p, q: Pattern
gpi: ProofInfo
exdepth, mudepth: nat
EvS: EVarSet
SvS: SVarSet
HxneqE: x ≠ E
wfψ: well_formed (ex , ψ)
wfp: well_formed p
wfq: well_formed q
Heqx: x = evar_fresh (elements EvS)
HEinψ: E ∈ free_evars ψ
i': ProofInfo
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
ψ_sub_EvS: free_evars ψ ⊆ EvS
Heqi': i' = (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (ex , ψ))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (ex , ψ))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (ex , ψ)) then false else true, FP := ∅)
pile: ProofInfoLe i' gpi
IH: Γ ⊢i ψ^{evar:0↦x}^[[evar:E↦p]] <---> ψ^{evar:0↦x}^[[evar:E↦q]] using gpi
well_formed p = true
Σ: Signature
Γ: Theory
E: evar
ψ: Pattern
x: evar
p, q: Pattern
gpi: ProofInfo
exdepth, mudepth: nat
EvS: EVarSet
SvS: SVarSet
HxneqE: x ≠ E
wfψ: well_formed (ex , ψ)
wfp: well_formed p
wfq: well_formed q
Heqx: x = evar_fresh (elements EvS)
HEinψ: E ∈ free_evars ψ
i': ProofInfo
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
ψ_sub_EvS: free_evars ψ ⊆ EvS
Heqi': i' = (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (ex , ψ))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (ex , ψ))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (ex , ψ)) then false else true, FP := ∅)
pile: ProofInfoLe i' gpi
IH: Γ ⊢i ψ^{evar:0↦x}^[[evar:E↦p]] <---> ψ^{evar:0↦x}^[[evar:E↦q]] using gpi
well_formed q = true
Σ: Signature
Γ: Theory
E: evar
ψ: Pattern
x: evar
p, q: Pattern
gpi: ProofInfo
exdepth, mudepth: nat
EvS: EVarSet
SvS: SVarSet
HxneqE: x ≠ E
wfψ: well_formed (ex , ψ)
wfp: well_formed p
wfq: well_formed q
Heqx: x = evar_fresh (elements EvS)
HEinψ: E ∈ free_evars ψ
i': ProofInfo
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
ψ_sub_EvS: free_evars ψ ⊆ EvS
Heqi': i' = (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (ex , ψ))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (ex , ψ))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (ex , ψ)) then false else true, FP := ∅)
pile: ProofInfoLe i' gpi
IH: Γ ⊢i ψ^{evar:0↦x}^[[evar:E↦p]] <---> ψ^{evar:0↦x}^[[evar:E↦q]] using gpi

x ≠ E
exact HxneqE.
Σ: Signature
Γ: Theory
E: evar
ψ: Pattern
x: evar
p, q: Pattern
gpi: ProofInfo
exdepth, mudepth: nat
EvS: EVarSet
SvS: SVarSet
HxneqE: x ≠ E
wfψ: well_formed (ex , ψ)
wfp: well_formed p
wfq: well_formed q
Heqx: x = evar_fresh (elements EvS)
HEinψ: E ∈ free_evars ψ
i': ProofInfo
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
ψ_sub_EvS: free_evars ψ ⊆ EvS
Heqi': i' = (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (ex , ψ))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (ex , ψ))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (ex , ψ)) then false else true, FP := ∅)
pile: ProofInfoLe i' gpi
IH: Γ ⊢i ψ^[[evar:E↦p]]^{evar:0↦x} <---> ψ^[[evar:E↦q]]^{evar:0↦x} using gpi

Γ ⊢i (ex , ψ^[[evar:E↦p]]) <---> (ex , ψ^[[evar:E↦q]]) using gpi
Σ: Signature
Γ: Theory
E: evar
ψ: Pattern
x: evar
p, q: Pattern
gpi: ProofInfo
exdepth, mudepth: nat
EvS: EVarSet
SvS: SVarSet
HxneqE: x ≠ E
wfψ: well_formed (ex , ψ)
wfp: well_formed p
wfq: well_formed q
Heqx: x = evar_fresh (elements EvS)
HEinψ: E ∈ free_evars ψ
i': ProofInfo
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
ψ_sub_EvS: free_evars ψ ⊆ EvS
Heqi': i' = (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (ex , ψ))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (ex , ψ))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (ex , ψ)) then false else true, FP := ∅)
pile: ProofInfoLe i' gpi
IH: Γ ⊢i ψ^{evar:0↦x}^[[evar:E↦p]] <---> ψ^{evar:0↦x}^[[evar:E↦q]] using gpi
well_formed p = true
Σ: Signature
Γ: Theory
E: evar
ψ: Pattern
x: evar
p, q: Pattern
gpi: ProofInfo
exdepth, mudepth: nat
EvS: EVarSet
SvS: SVarSet
HxneqE: x ≠ E
wfψ: well_formed (ex , ψ)
wfp: well_formed p
wfq: well_formed q
Heqx: x = evar_fresh (elements EvS)
HEinψ: E ∈ free_evars ψ
i': ProofInfo
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
ψ_sub_EvS: free_evars ψ ⊆ EvS
Heqi': i' = (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (ex , ψ))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (ex , ψ))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (ex , ψ)) then false else true, FP := ∅)
pile: ProofInfoLe i' gpi
IH: Γ ⊢i ψ^{evar:0↦x}^[[evar:E↦p]] <---> ψ^{evar:0↦x}^[[evar:E↦q]] using gpi
well_formed q = true
Σ: Signature
Γ: Theory
E: evar
ψ: Pattern
x: evar
p, q: Pattern
gpi: ProofInfo
exdepth, mudepth: nat
EvS: EVarSet
SvS: SVarSet
HxneqE: x ≠ E
wfψ: well_formed (ex , ψ)
wfp: well_formed p
wfq: well_formed q
Heqx: x = evar_fresh (elements EvS)
HEinψ: E ∈ free_evars ψ
i': ProofInfo
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
ψ_sub_EvS: free_evars ψ ⊆ EvS
Heqi': i' = (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (ex , ψ))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (ex , ψ))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (ex , ψ)) then false else true, FP := ∅)
pile: ProofInfoLe i' gpi
IH: Γ ⊢i ψ^{evar:0↦x}^[[evar:E↦p]] <---> ψ^{evar:0↦x}^[[evar:E↦q]] using gpi

well_formed p = true
exact wfp.
Σ: Signature
Γ: Theory
E: evar
ψ: Pattern
x: evar
p, q: Pattern
gpi: ProofInfo
exdepth, mudepth: nat
EvS: EVarSet
SvS: SVarSet
HxneqE: x ≠ E
wfψ: well_formed (ex , ψ)
wfp: well_formed p
wfq: well_formed q
Heqx: x = evar_fresh (elements EvS)
HEinψ: E ∈ free_evars ψ
i': ProofInfo
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
ψ_sub_EvS: free_evars ψ ⊆ EvS
Heqi': i' = (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (ex , ψ))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (ex , ψ))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (ex , ψ)) then false else true, FP := ∅)
pile: ProofInfoLe i' gpi
IH: Γ ⊢i ψ^[[evar:E↦p]]^{evar:0↦x} <---> ψ^[[evar:E↦q]]^{evar:0↦x} using gpi

Γ ⊢i (ex , ψ^[[evar:E↦p]]) <---> (ex , ψ^[[evar:E↦q]]) using gpi
Σ: Signature
Γ: Theory
E: evar
ψ: Pattern
x: evar
p, q: Pattern
gpi: ProofInfo
exdepth, mudepth: nat
EvS: EVarSet
SvS: SVarSet
HxneqE: x ≠ E
wfψ: well_formed (ex , ψ)
wfp: well_formed p
wfq: well_formed q
Heqx: x = evar_fresh (elements EvS)
HEinψ: E ∈ free_evars ψ
i': ProofInfo
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
ψ_sub_EvS: free_evars ψ ⊆ EvS
Heqi': i' = (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (ex , ψ))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (ex , ψ))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (ex , ψ)) then false else true, FP := ∅)
pile: ProofInfoLe i' gpi
IH: Γ ⊢i ψ^{evar:0↦x}^[[evar:E↦p]] <---> ψ^{evar:0↦x}^[[evar:E↦q]] using gpi
well_formed q = true
Σ: Signature
Γ: Theory
E: evar
ψ: Pattern
x: evar
p, q: Pattern
gpi: ProofInfo
exdepth, mudepth: nat
EvS: EVarSet
SvS: SVarSet
HxneqE: x ≠ E
wfψ: well_formed (ex , ψ)
wfp: well_formed p
wfq: well_formed q
Heqx: x = evar_fresh (elements EvS)
HEinψ: E ∈ free_evars ψ
i': ProofInfo
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
ψ_sub_EvS: free_evars ψ ⊆ EvS
Heqi': i' = (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (ex , ψ))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (ex , ψ))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (ex , ψ)) then false else true, FP := ∅)
pile: ProofInfoLe i' gpi
IH: Γ ⊢i ψ^{evar:0↦x}^[[evar:E↦p]] <---> ψ^{evar:0↦x}^[[evar:E↦q]] using gpi

well_formed q = true
exact wfq.
Σ: Signature
Γ: Theory
E: evar
ψ: Pattern
x: evar
p, q: Pattern
gpi: ProofInfo
exdepth, mudepth: nat
EvS: EVarSet
SvS: SVarSet
HxneqE: x ≠ E
wfψ: well_formed (ex , ψ)
wfp: well_formed p
wfq: well_formed q
Heqx: x = evar_fresh (elements EvS)
HEinψ: E ∈ free_evars ψ
i': ProofInfo
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
ψ_sub_EvS: free_evars ψ ⊆ EvS
Heqi': i' = (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (ex , ψ))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (ex , ψ))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (ex , ψ)) then false else true, FP := ∅)
pile: ProofInfoLe i' gpi
IH: Γ ⊢i ψ^[[evar:E↦p]]^{evar:0↦x} <---> ψ^[[evar:E↦q]]^{evar:0↦x} using gpi

Γ ⊢i (ex , ψ^[[evar:E↦p]]) <---> (ex , ψ^[[evar:E↦q]]) using gpi
Σ: Signature
Γ: Theory
E: evar
ψ: Pattern
x: evar
p, q: Pattern
gpi: ProofInfo
exdepth, mudepth: nat
EvS: EVarSet
SvS: SVarSet
HxneqE: x ≠ E
wfψ: well_formed (ex , ψ)
wfp: well_formed p
wfq: well_formed q
Heqx: x = evar_fresh (elements EvS)
HEinψ: E ∈ free_evars ψ
i': ProofInfo
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
ψ_sub_EvS: free_evars ψ ⊆ EvS
Heqi': i' = (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (ex , ψ))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (ex , ψ))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (ex , ψ)) then false else true, FP := ∅)
pile: ProofInfoLe i' gpi
IH: Γ ⊢i ψ^[[evar:E↦p]]^{evar:0↦x} <---> ψ^[[evar:E↦q]]^{evar:0↦x} using gpi

well_formed ψ^[[evar:E↦p]]^{evar:0↦x}
Σ: Signature
Γ: Theory
E: evar
ψ: Pattern
x: evar
p, q: Pattern
gpi: ProofInfo
exdepth, mudepth: nat
EvS: EVarSet
SvS: SVarSet
HxneqE: x ≠ E
wfψ: well_formed (ex , ψ)
wfp: well_formed p
wfq: well_formed q
Heqx: x = evar_fresh (elements EvS)
HEinψ: E ∈ free_evars ψ
i': ProofInfo
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
ψ_sub_EvS: free_evars ψ ⊆ EvS
Heqi': i' = (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (ex , ψ))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (ex , ψ))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (ex , ψ)) then false else true, FP := ∅)
pile: ProofInfoLe i' gpi
IH: Γ ⊢i ψ^[[evar:E↦p]]^{evar:0↦x} <---> ψ^[[evar:E↦q]]^{evar:0↦x} using gpi
well_formed ψ^[[evar:E↦q]]^{evar:0↦x}
Σ: Signature
Γ: Theory
E: evar
ψ: Pattern
x: evar
p, q: Pattern
gpi: ProofInfo
exdepth, mudepth: nat
EvS: EVarSet
SvS: SVarSet
HxneqE: x ≠ E
wfψ: well_formed (ex , ψ)
wfp: well_formed p
wfq: well_formed q
Heqx: x = evar_fresh (elements EvS)
HEinψ: E ∈ free_evars ψ
i': ProofInfo
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
ψ_sub_EvS: free_evars ψ ⊆ EvS
Heqi': i' = (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (ex , ψ))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (ex , ψ))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (ex , ψ)) then false else true, FP := ∅)
pile: ProofInfoLe i' gpi
IH: Γ ⊢i ψ^[[evar:E↦p]]^{evar:0↦x} <---> ψ^[[evar:E↦q]]^{evar:0↦x} using gpi
IH1: Γ ⊢i ψ^[[evar:E↦p]]^{evar:0↦x} ---> ψ^[[evar:E↦q]]^{evar:0↦x} using gpi
Γ ⊢i (ex , ψ^[[evar:E↦p]]) <---> (ex , ψ^[[evar:E↦q]]) using gpi
Σ: Signature
Γ: Theory
E: evar
ψ: Pattern
x: evar
p, q: Pattern
gpi: ProofInfo
exdepth, mudepth: nat
EvS: EVarSet
SvS: SVarSet
HxneqE: x ≠ E
wfψ: well_formed (ex , ψ)
wfp: well_formed p
wfq: well_formed q
Heqx: x = evar_fresh (elements EvS)
HEinψ: E ∈ free_evars ψ
i': ProofInfo
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
ψ_sub_EvS: free_evars ψ ⊆ EvS
Heqi': i' = (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (ex , ψ))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (ex , ψ))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (ex , ψ)) then false else true, FP := ∅)
pile: ProofInfoLe i' gpi
IH: Γ ⊢i ψ^[[evar:E↦p]]^{evar:0↦x} <---> ψ^[[evar:E↦q]]^{evar:0↦x} using gpi

well_formed ψ^[[evar:E↦p]]^{evar:0↦x}
abstract (wf_auto2).
Σ: Signature
Γ: Theory
E: evar
ψ: Pattern
x: evar
p, q: Pattern
gpi: ProofInfo
exdepth, mudepth: nat
EvS: EVarSet
SvS: SVarSet
HxneqE: x ≠ E
wfψ: well_formed (ex , ψ)
wfp: well_formed p
wfq: well_formed q
Heqx: x = evar_fresh (elements EvS)
HEinψ: E ∈ free_evars ψ
i': ProofInfo
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
ψ_sub_EvS: free_evars ψ ⊆ EvS
Heqi': i' = (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (ex , ψ))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (ex , ψ))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (ex , ψ)) then false else true, FP := ∅)
pile: ProofInfoLe i' gpi
IH: Γ ⊢i ψ^[[evar:E↦p]]^{evar:0↦x} <---> ψ^[[evar:E↦q]]^{evar:0↦x} using gpi

well_formed ψ^[[evar:E↦q]]^{evar:0↦x}
Σ: Signature
Γ: Theory
E: evar
ψ: Pattern
x: evar
p, q: Pattern
gpi: ProofInfo
exdepth, mudepth: nat
EvS: EVarSet
SvS: SVarSet
HxneqE: x ≠ E
wfψ: well_formed (ex , ψ)
wfp: well_formed p
wfq: well_formed q
Heqx: x = evar_fresh (elements EvS)
HEinψ: E ∈ free_evars ψ
i': ProofInfo
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
ψ_sub_EvS: free_evars ψ ⊆ EvS
Heqi': i' = (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (ex , ψ))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (ex , ψ))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (ex , ψ)) then false else true, FP := ∅)
pile: ProofInfoLe i' gpi
IH: Γ ⊢i ψ^[[evar:E↦p]]^{evar:0↦x} <---> ψ^[[evar:E↦q]]^{evar:0↦x} using gpi
IH1: Γ ⊢i ψ^[[evar:E↦p]]^{evar:0↦x} ---> ψ^[[evar:E↦q]]^{evar:0↦x} using gpi
Γ ⊢i (ex , ψ^[[evar:E↦p]]) <---> (ex , ψ^[[evar:E↦q]]) using gpi
Σ: Signature
Γ: Theory
E: evar
ψ: Pattern
x: evar
p, q: Pattern
gpi: ProofInfo
exdepth, mudepth: nat
EvS: EVarSet
SvS: SVarSet
HxneqE: x ≠ E
wfψ: well_formed (ex , ψ)
wfp: well_formed p
wfq: well_formed q
Heqx: x = evar_fresh (elements EvS)
HEinψ: E ∈ free_evars ψ
i': ProofInfo
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
ψ_sub_EvS: free_evars ψ ⊆ EvS
Heqi': i' = (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (ex , ψ))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (ex , ψ))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (ex , ψ)) then false else true, FP := ∅)
pile: ProofInfoLe i' gpi
IH: Γ ⊢i ψ^[[evar:E↦p]]^{evar:0↦x} <---> ψ^[[evar:E↦q]]^{evar:0↦x} using gpi

well_formed ψ^[[evar:E↦q]]^{evar:0↦x}
abstract (wf_auto2).
Σ: Signature
Γ: Theory
E: evar
ψ: Pattern
x: evar
p, q: Pattern
gpi: ProofInfo
exdepth, mudepth: nat
EvS: EVarSet
SvS: SVarSet
HxneqE: x ≠ E
wfψ: well_formed (ex , ψ)
wfp: well_formed p
wfq: well_formed q
Heqx: x = evar_fresh (elements EvS)
HEinψ: E ∈ free_evars ψ
i': ProofInfo
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
ψ_sub_EvS: free_evars ψ ⊆ EvS
Heqi': i' = (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (ex , ψ))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (ex , ψ))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (ex , ψ)) then false else true, FP := ∅)
pile: ProofInfoLe i' gpi
IH: Γ ⊢i ψ^[[evar:E↦p]]^{evar:0↦x} <---> ψ^[[evar:E↦q]]^{evar:0↦x} using gpi
IH1: Γ ⊢i ψ^[[evar:E↦p]]^{evar:0↦x} ---> ψ^[[evar:E↦q]]^{evar:0↦x} using gpi

Γ ⊢i (ex , ψ^[[evar:E↦p]]) <---> (ex , ψ^[[evar:E↦q]]) using gpi
Σ: Signature
Γ: Theory
E: evar
ψ: Pattern
x: evar
p, q: Pattern
gpi: ProofInfo
exdepth, mudepth: nat
EvS: EVarSet
SvS: SVarSet
HxneqE: x ≠ E
wfψ: well_formed (ex , ψ)
wfp: well_formed p
wfq: well_formed q
Heqx: x = evar_fresh (elements EvS)
HEinψ: E ∈ free_evars ψ
i': ProofInfo
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
ψ_sub_EvS: free_evars ψ ⊆ EvS
Heqi': i' = (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (ex , ψ))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (ex , ψ))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (ex , ψ)) then false else true, FP := ∅)
pile: ProofInfoLe i' gpi
IH: Γ ⊢i ψ^[[evar:E↦p]]^{evar:0↦x} <---> ψ^[[evar:E↦q]]^{evar:0↦x} using gpi
IH1: Γ ⊢i ψ^[[evar:E↦p]]^{evar:0↦x} ---> ψ^[[evar:E↦q]]^{evar:0↦x} using gpi

well_formed ψ^[[evar:E↦p]]^{evar:0↦x}
Σ: Signature
Γ: Theory
E: evar
ψ: Pattern
x: evar
p, q: Pattern
gpi: ProofInfo
exdepth, mudepth: nat
EvS: EVarSet
SvS: SVarSet
HxneqE: x ≠ E
wfψ: well_formed (ex , ψ)
wfp: well_formed p
wfq: well_formed q
Heqx: x = evar_fresh (elements EvS)
HEinψ: E ∈ free_evars ψ
i': ProofInfo
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
ψ_sub_EvS: free_evars ψ ⊆ EvS
Heqi': i' = (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (ex , ψ))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (ex , ψ))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (ex , ψ)) then false else true, FP := ∅)
pile: ProofInfoLe i' gpi
IH: Γ ⊢i ψ^[[evar:E↦p]]^{evar:0↦x} <---> ψ^[[evar:E↦q]]^{evar:0↦x} using gpi
IH1: Γ ⊢i ψ^[[evar:E↦p]]^{evar:0↦x} ---> ψ^[[evar:E↦q]]^{evar:0↦x} using gpi
well_formed ψ^[[evar:E↦q]]^{evar:0↦x}
Σ: Signature
Γ: Theory
E: evar
ψ: Pattern
x: evar
p, q: Pattern
gpi: ProofInfo
exdepth, mudepth: nat
EvS: EVarSet
SvS: SVarSet
HxneqE: x ≠ E
wfψ: well_formed (ex , ψ)
wfp: well_formed p
wfq: well_formed q
Heqx: x = evar_fresh (elements EvS)
HEinψ: E ∈ free_evars ψ
i': ProofInfo
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
ψ_sub_EvS: free_evars ψ ⊆ EvS
Heqi': i' = (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (ex , ψ))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (ex , ψ))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (ex , ψ)) then false else true, FP := ∅)
pile: ProofInfoLe i' gpi
IH: Γ ⊢i ψ^[[evar:E↦p]]^{evar:0↦x} <---> ψ^[[evar:E↦q]]^{evar:0↦x} using gpi
IH1: Γ ⊢i ψ^[[evar:E↦p]]^{evar:0↦x} ---> ψ^[[evar:E↦q]]^{evar:0↦x} using gpi
IH2: Γ ⊢i ψ^[[evar:E↦q]]^{evar:0↦x} ---> ψ^[[evar:E↦p]]^{evar:0↦x} using gpi
Γ ⊢i (ex , ψ^[[evar:E↦p]]) <---> (ex , ψ^[[evar:E↦q]]) using gpi
Σ: Signature
Γ: Theory
E: evar
ψ: Pattern
x: evar
p, q: Pattern
gpi: ProofInfo
exdepth, mudepth: nat
EvS: EVarSet
SvS: SVarSet
HxneqE: x ≠ E
wfψ: well_formed (ex , ψ)
wfp: well_formed p
wfq: well_formed q
Heqx: x = evar_fresh (elements EvS)
HEinψ: E ∈ free_evars ψ
i': ProofInfo
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
ψ_sub_EvS: free_evars ψ ⊆ EvS
Heqi': i' = (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (ex , ψ))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (ex , ψ))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (ex , ψ)) then false else true, FP := ∅)
pile: ProofInfoLe i' gpi
IH: Γ ⊢i ψ^[[evar:E↦p]]^{evar:0↦x} <---> ψ^[[evar:E↦q]]^{evar:0↦x} using gpi
IH1: Γ ⊢i ψ^[[evar:E↦p]]^{evar:0↦x} ---> ψ^[[evar:E↦q]]^{evar:0↦x} using gpi

well_formed ψ^[[evar:E↦p]]^{evar:0↦x}
abstract (wf_auto2).
Σ: Signature
Γ: Theory
E: evar
ψ: Pattern
x: evar
p, q: Pattern
gpi: ProofInfo
exdepth, mudepth: nat
EvS: EVarSet
SvS: SVarSet
HxneqE: x ≠ E
wfψ: well_formed (ex , ψ)
wfp: well_formed p
wfq: well_formed q
Heqx: x = evar_fresh (elements EvS)
HEinψ: E ∈ free_evars ψ
i': ProofInfo
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
ψ_sub_EvS: free_evars ψ ⊆ EvS
Heqi': i' = (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (ex , ψ))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (ex , ψ))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (ex , ψ)) then false else true, FP := ∅)
pile: ProofInfoLe i' gpi
IH: Γ ⊢i ψ^[[evar:E↦p]]^{evar:0↦x} <---> ψ^[[evar:E↦q]]^{evar:0↦x} using gpi
IH1: Γ ⊢i ψ^[[evar:E↦p]]^{evar:0↦x} ---> ψ^[[evar:E↦q]]^{evar:0↦x} using gpi

well_formed ψ^[[evar:E↦q]]^{evar:0↦x}
Σ: Signature
Γ: Theory
E: evar
ψ: Pattern
x: evar
p, q: Pattern
gpi: ProofInfo
exdepth, mudepth: nat
EvS: EVarSet
SvS: SVarSet
HxneqE: x ≠ E
wfψ: well_formed (ex , ψ)
wfp: well_formed p
wfq: well_formed q
Heqx: x = evar_fresh (elements EvS)
HEinψ: E ∈ free_evars ψ
i': ProofInfo
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
ψ_sub_EvS: free_evars ψ ⊆ EvS
Heqi': i' = (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (ex , ψ))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (ex , ψ))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (ex , ψ)) then false else true, FP := ∅)
pile: ProofInfoLe i' gpi
IH: Γ ⊢i ψ^[[evar:E↦p]]^{evar:0↦x} <---> ψ^[[evar:E↦q]]^{evar:0↦x} using gpi
IH1: Γ ⊢i ψ^[[evar:E↦p]]^{evar:0↦x} ---> ψ^[[evar:E↦q]]^{evar:0↦x} using gpi
IH2: Γ ⊢i ψ^[[evar:E↦q]]^{evar:0↦x} ---> ψ^[[evar:E↦p]]^{evar:0↦x} using gpi
Γ ⊢i (ex , ψ^[[evar:E↦p]]) <---> (ex , ψ^[[evar:E↦q]]) using gpi
Σ: Signature
Γ: Theory
E: evar
ψ: Pattern
x: evar
p, q: Pattern
gpi: ProofInfo
exdepth, mudepth: nat
EvS: EVarSet
SvS: SVarSet
HxneqE: x ≠ E
wfψ: well_formed (ex , ψ)
wfp: well_formed p
wfq: well_formed q
Heqx: x = evar_fresh (elements EvS)
HEinψ: E ∈ free_evars ψ
i': ProofInfo
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
ψ_sub_EvS: free_evars ψ ⊆ EvS
Heqi': i' = (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (ex , ψ))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (ex , ψ))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (ex , ψ)) then false else true, FP := ∅)
pile: ProofInfoLe i' gpi
IH: Γ ⊢i ψ^[[evar:E↦p]]^{evar:0↦x} <---> ψ^[[evar:E↦q]]^{evar:0↦x} using gpi
IH1: Γ ⊢i ψ^[[evar:E↦p]]^{evar:0↦x} ---> ψ^[[evar:E↦q]]^{evar:0↦x} using gpi

well_formed ψ^[[evar:E↦q]]^{evar:0↦x}
abstract (wf_auto2).
Σ: Signature
Γ: Theory
E: evar
ψ: Pattern
x: evar
p, q: Pattern
gpi: ProofInfo
exdepth, mudepth: nat
EvS: EVarSet
SvS: SVarSet
HxneqE: x ≠ E
wfψ: well_formed (ex , ψ)
wfp: well_formed p
wfq: well_formed q
Heqx: x = evar_fresh (elements EvS)
HEinψ: E ∈ free_evars ψ
i': ProofInfo
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
ψ_sub_EvS: free_evars ψ ⊆ EvS
Heqi': i' = (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (ex , ψ))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (ex , ψ))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (ex , ψ)) then false else true, FP := ∅)
pile: ProofInfoLe i' gpi
IH: Γ ⊢i ψ^[[evar:E↦p]]^{evar:0↦x} <---> ψ^[[evar:E↦q]]^{evar:0↦x} using gpi
IH1: Γ ⊢i ψ^[[evar:E↦p]]^{evar:0↦x} ---> ψ^[[evar:E↦q]]^{evar:0↦x} using gpi
IH2: Γ ⊢i ψ^[[evar:E↦q]]^{evar:0↦x} ---> ψ^[[evar:E↦p]]^{evar:0↦x} using gpi

Γ ⊢i (ex , ψ^[[evar:E↦p]]) <---> (ex , ψ^[[evar:E↦q]]) using gpi
(* TODO: remove the well-formedness constraints on this lemma*)
Σ: Signature
Γ: Theory
E: evar
ψ: Pattern
x: evar
p, q: Pattern
gpi: ProofInfo
exdepth, mudepth: nat
EvS: EVarSet
SvS: SVarSet
HxneqE: x ≠ E
wfψ: well_formed (ex , ψ)
wfp: well_formed p
wfq: well_formed q
Heqx: x = evar_fresh (elements EvS)
HEinψ: E ∈ free_evars ψ
i': ProofInfo
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
ψ_sub_EvS: free_evars ψ ⊆ EvS
Heqi': i' = (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (ex , ψ))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (ex , ψ))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (ex , ψ)) then false else true, FP := ∅)
pile: ProofInfoLe i' gpi
IH: Γ ⊢i ψ^[[evar:E↦p]]^{evar:0↦x} <---> ψ^[[evar:E↦q]]^{evar:0↦x} using gpi
IH1: Γ ⊢i ψ^[[evar:E↦p]]^{evar:0↦x} ---> ψ^[[evar:E↦q]]^{evar:0↦x} using gpi
IH2: Γ ⊢i ψ^[[evar:E↦q]]^{evar:0↦x} ---> ψ^[[evar:E↦p]]^{evar:0↦x} using gpi

well_formed (ex , ψ^[[evar:E↦p]])
Σ: Signature
Γ: Theory
E: evar
ψ: Pattern
x: evar
p, q: Pattern
gpi: ProofInfo
exdepth, mudepth: nat
EvS: EVarSet
SvS: SVarSet
HxneqE: x ≠ E
wfψ: well_formed (ex , ψ)
wfp: well_formed p
wfq: well_formed q
Heqx: x = evar_fresh (elements EvS)
HEinψ: E ∈ free_evars ψ
i': ProofInfo
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
ψ_sub_EvS: free_evars ψ ⊆ EvS
Heqi': i' = (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (ex , ψ))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (ex , ψ))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (ex , ψ)) then false else true, FP := ∅)
pile: ProofInfoLe i' gpi
IH: Γ ⊢i ψ^[[evar:E↦p]]^{evar:0↦x} <---> ψ^[[evar:E↦q]]^{evar:0↦x} using gpi
IH1: Γ ⊢i ψ^[[evar:E↦p]]^{evar:0↦x} ---> ψ^[[evar:E↦q]]^{evar:0↦x} using gpi
IH2: Γ ⊢i ψ^[[evar:E↦q]]^{evar:0↦x} ---> ψ^[[evar:E↦p]]^{evar:0↦x} using gpi
well_formed (ex , ψ^[[evar:E↦q]])
Σ: Signature
Γ: Theory
E: evar
ψ: Pattern
x: evar
p, q: Pattern
gpi: ProofInfo
exdepth, mudepth: nat
EvS: EVarSet
SvS: SVarSet
HxneqE: x ≠ E
wfψ: well_formed (ex , ψ)
wfp: well_formed p
wfq: well_formed q
Heqx: x = evar_fresh (elements EvS)
HEinψ: E ∈ free_evars ψ
i': ProofInfo
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
ψ_sub_EvS: free_evars ψ ⊆ EvS
Heqi': i' = (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (ex , ψ))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (ex , ψ))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (ex , ψ)) then false else true, FP := ∅)
pile: ProofInfoLe i' gpi
IH: Γ ⊢i ψ^[[evar:E↦p]]^{evar:0↦x} <---> ψ^[[evar:E↦q]]^{evar:0↦x} using gpi
IH1: Γ ⊢i ψ^[[evar:E↦p]]^{evar:0↦x} ---> ψ^[[evar:E↦q]]^{evar:0↦x} using gpi
IH2: Γ ⊢i ψ^[[evar:E↦q]]^{evar:0↦x} ---> ψ^[[evar:E↦p]]^{evar:0↦x} using gpi
Γ ⊢i (ex , ψ^[[evar:E↦p]]) ---> (ex , ψ^[[evar:E↦q]]) using gpi
Σ: Signature
Γ: Theory
E: evar
ψ: Pattern
x: evar
p, q: Pattern
gpi: ProofInfo
exdepth, mudepth: nat
EvS: EVarSet
SvS: SVarSet
HxneqE: x ≠ E
wfψ: well_formed (ex , ψ)
wfp: well_formed p
wfq: well_formed q
Heqx: x = evar_fresh (elements EvS)
HEinψ: E ∈ free_evars ψ
i': ProofInfo
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
ψ_sub_EvS: free_evars ψ ⊆ EvS
Heqi': i' = (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (ex , ψ))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (ex , ψ))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (ex , ψ)) then false else true, FP := ∅)
pile: ProofInfoLe i' gpi
IH: Γ ⊢i ψ^[[evar:E↦p]]^{evar:0↦x} <---> ψ^[[evar:E↦q]]^{evar:0↦x} using gpi
IH1: Γ ⊢i ψ^[[evar:E↦p]]^{evar:0↦x} ---> ψ^[[evar:E↦q]]^{evar:0↦x} using gpi
IH2: Γ ⊢i ψ^[[evar:E↦q]]^{evar:0↦x} ---> ψ^[[evar:E↦p]]^{evar:0↦x} using gpi
Γ ⊢i (ex , ψ^[[evar:E↦q]]) ---> (ex , ψ^[[evar:E↦p]]) using gpi
Σ: Signature
Γ: Theory
E: evar
ψ: Pattern
x: evar
p, q: Pattern
gpi: ProofInfo
exdepth, mudepth: nat
EvS: EVarSet
SvS: SVarSet
HxneqE: x ≠ E
wfψ: well_formed (ex , ψ)
wfp: well_formed p
wfq: well_formed q
Heqx: x = evar_fresh (elements EvS)
HEinψ: E ∈ free_evars ψ
i': ProofInfo
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
ψ_sub_EvS: free_evars ψ ⊆ EvS
Heqi': i' = (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (ex , ψ))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (ex , ψ))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (ex , ψ)) then false else true, FP := ∅)
pile: ProofInfoLe i' gpi
IH: Γ ⊢i ψ^[[evar:E↦p]]^{evar:0↦x} <---> ψ^[[evar:E↦q]]^{evar:0↦x} using gpi
IH1: Γ ⊢i ψ^[[evar:E↦p]]^{evar:0↦x} ---> ψ^[[evar:E↦q]]^{evar:0↦x} using gpi
IH2: Γ ⊢i ψ^[[evar:E↦q]]^{evar:0↦x} ---> ψ^[[evar:E↦p]]^{evar:0↦x} using gpi

well_formed (ex , ψ^[[evar:E↦p]])
abstract (wf_auto2).
Σ: Signature
Γ: Theory
E: evar
ψ: Pattern
x: evar
p, q: Pattern
gpi: ProofInfo
exdepth, mudepth: nat
EvS: EVarSet
SvS: SVarSet
HxneqE: x ≠ E
wfψ: well_formed (ex , ψ)
wfp: well_formed p
wfq: well_formed q
Heqx: x = evar_fresh (elements EvS)
HEinψ: E ∈ free_evars ψ
i': ProofInfo
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
ψ_sub_EvS: free_evars ψ ⊆ EvS
Heqi': i' = (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (ex , ψ))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (ex , ψ))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (ex , ψ)) then false else true, FP := ∅)
pile: ProofInfoLe i' gpi
IH: Γ ⊢i ψ^[[evar:E↦p]]^{evar:0↦x} <---> ψ^[[evar:E↦q]]^{evar:0↦x} using gpi
IH1: Γ ⊢i ψ^[[evar:E↦p]]^{evar:0↦x} ---> ψ^[[evar:E↦q]]^{evar:0↦x} using gpi
IH2: Γ ⊢i ψ^[[evar:E↦q]]^{evar:0↦x} ---> ψ^[[evar:E↦p]]^{evar:0↦x} using gpi

well_formed (ex , ψ^[[evar:E↦q]])
Σ: Signature
Γ: Theory
E: evar
ψ: Pattern
x: evar
p, q: Pattern
gpi: ProofInfo
exdepth, mudepth: nat
EvS: EVarSet
SvS: SVarSet
HxneqE: x ≠ E
wfψ: well_formed (ex , ψ)
wfp: well_formed p
wfq: well_formed q
Heqx: x = evar_fresh (elements EvS)
HEinψ: E ∈ free_evars ψ
i': ProofInfo
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
ψ_sub_EvS: free_evars ψ ⊆ EvS
Heqi': i' = (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (ex , ψ))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (ex , ψ))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (ex , ψ)) then false else true, FP := ∅)
pile: ProofInfoLe i' gpi
IH: Γ ⊢i ψ^[[evar:E↦p]]^{evar:0↦x} <---> ψ^[[evar:E↦q]]^{evar:0↦x} using gpi
IH1: Γ ⊢i ψ^[[evar:E↦p]]^{evar:0↦x} ---> ψ^[[evar:E↦q]]^{evar:0↦x} using gpi
IH2: Γ ⊢i ψ^[[evar:E↦q]]^{evar:0↦x} ---> ψ^[[evar:E↦p]]^{evar:0↦x} using gpi
Γ ⊢i (ex , ψ^[[evar:E↦p]]) ---> (ex , ψ^[[evar:E↦q]]) using gpi
Σ: Signature
Γ: Theory
E: evar
ψ: Pattern
x: evar
p, q: Pattern
gpi: ProofInfo
exdepth, mudepth: nat
EvS: EVarSet
SvS: SVarSet
HxneqE: x ≠ E
wfψ: well_formed (ex , ψ)
wfp: well_formed p
wfq: well_formed q
Heqx: x = evar_fresh (elements EvS)
HEinψ: E ∈ free_evars ψ
i': ProofInfo
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
ψ_sub_EvS: free_evars ψ ⊆ EvS
Heqi': i' = (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (ex , ψ))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (ex , ψ))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (ex , ψ)) then false else true, FP := ∅)
pile: ProofInfoLe i' gpi
IH: Γ ⊢i ψ^[[evar:E↦p]]^{evar:0↦x} <---> ψ^[[evar:E↦q]]^{evar:0↦x} using gpi
IH1: Γ ⊢i ψ^[[evar:E↦p]]^{evar:0↦x} ---> ψ^[[evar:E↦q]]^{evar:0↦x} using gpi
IH2: Γ ⊢i ψ^[[evar:E↦q]]^{evar:0↦x} ---> ψ^[[evar:E↦p]]^{evar:0↦x} using gpi
Γ ⊢i (ex , ψ^[[evar:E↦q]]) ---> (ex , ψ^[[evar:E↦p]]) using gpi
Σ: Signature
Γ: Theory
E: evar
ψ: Pattern
x: evar
p, q: Pattern
gpi: ProofInfo
exdepth, mudepth: nat
EvS: EVarSet
SvS: SVarSet
HxneqE: x ≠ E
wfψ: well_formed (ex , ψ)
wfp: well_formed p
wfq: well_formed q
Heqx: x = evar_fresh (elements EvS)
HEinψ: E ∈ free_evars ψ
i': ProofInfo
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
ψ_sub_EvS: free_evars ψ ⊆ EvS
Heqi': i' = (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (ex , ψ))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (ex , ψ))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (ex , ψ)) then false else true, FP := ∅)
pile: ProofInfoLe i' gpi
IH: Γ ⊢i ψ^[[evar:E↦p]]^{evar:0↦x} <---> ψ^[[evar:E↦q]]^{evar:0↦x} using gpi
IH1: Γ ⊢i ψ^[[evar:E↦p]]^{evar:0↦x} ---> ψ^[[evar:E↦q]]^{evar:0↦x} using gpi
IH2: Γ ⊢i ψ^[[evar:E↦q]]^{evar:0↦x} ---> ψ^[[evar:E↦p]]^{evar:0↦x} using gpi

well_formed (ex , ψ^[[evar:E↦q]])
abstract (wf_auto2).
Σ: Signature
Γ: Theory
E: evar
ψ: Pattern
x: evar
p, q: Pattern
gpi: ProofInfo
exdepth, mudepth: nat
EvS: EVarSet
SvS: SVarSet
HxneqE: x ≠ E
wfψ: well_formed (ex , ψ)
wfp: well_formed p
wfq: well_formed q
Heqx: x = evar_fresh (elements EvS)
HEinψ: E ∈ free_evars ψ
i': ProofInfo
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
ψ_sub_EvS: free_evars ψ ⊆ EvS
Heqi': i' = (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (ex , ψ))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (ex , ψ))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (ex , ψ)) then false else true, FP := ∅)
pile: ProofInfoLe i' gpi
IH: Γ ⊢i ψ^[[evar:E↦p]]^{evar:0↦x} <---> ψ^[[evar:E↦q]]^{evar:0↦x} using gpi
IH1: Γ ⊢i ψ^[[evar:E↦p]]^{evar:0↦x} ---> ψ^[[evar:E↦q]]^{evar:0↦x} using gpi
IH2: Γ ⊢i ψ^[[evar:E↦q]]^{evar:0↦x} ---> ψ^[[evar:E↦p]]^{evar:0↦x} using gpi

Γ ⊢i (ex , ψ^[[evar:E↦p]]) ---> (ex , ψ^[[evar:E↦q]]) using gpi
Σ: Signature
Γ: Theory
E: evar
ψ: Pattern
x: evar
p, q: Pattern
gpi: ProofInfo
exdepth, mudepth: nat
EvS: EVarSet
SvS: SVarSet
HxneqE: x ≠ E
wfψ: well_formed (ex , ψ)
wfp: well_formed p
wfq: well_formed q
Heqx: x = evar_fresh (elements EvS)
HEinψ: E ∈ free_evars ψ
i': ProofInfo
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
ψ_sub_EvS: free_evars ψ ⊆ EvS
Heqi': i' = (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (ex , ψ))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (ex , ψ))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (ex , ψ)) then false else true, FP := ∅)
pile: ProofInfoLe i' gpi
IH: Γ ⊢i ψ^[[evar:E↦p]]^{evar:0↦x} <---> ψ^[[evar:E↦q]]^{evar:0↦x} using gpi
IH1: Γ ⊢i ψ^[[evar:E↦p]]^{evar:0↦x} ---> ψ^[[evar:E↦q]]^{evar:0↦x} using gpi
IH2: Γ ⊢i ψ^[[evar:E↦q]]^{evar:0↦x} ---> ψ^[[evar:E↦p]]^{evar:0↦x} using gpi
Γ ⊢i (ex , ψ^[[evar:E↦q]]) ---> (ex , ψ^[[evar:E↦p]]) using gpi
Σ: Signature
Γ: Theory
E: evar
ψ: Pattern
x: evar
p, q: Pattern
gpi: ProofInfo
exdepth, mudepth: nat
EvS: EVarSet
SvS: SVarSet
HxneqE: x ≠ E
wfψ: well_formed (ex , ψ)
wfp: well_formed p
wfq: well_formed q
Heqx: x = evar_fresh (elements EvS)
HEinψ: E ∈ free_evars ψ
i': ProofInfo
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
ψ_sub_EvS: free_evars ψ ⊆ EvS
Heqi': i' = (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (ex , ψ))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (ex , ψ))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (ex , ψ)) then false else true, FP := ∅)
pile: ProofInfoLe i' gpi
IH: Γ ⊢i ψ^[[evar:E↦p]]^{evar:0↦x} <---> ψ^[[evar:E↦q]]^{evar:0↦x} using gpi
IH1: Γ ⊢i ψ^[[evar:E↦p]]^{evar:0↦x} ---> ψ^[[evar:E↦q]]^{evar:0↦x} using gpi
IH2: Γ ⊢i ψ^[[evar:E↦q]]^{evar:0↦x} ---> ψ^[[evar:E↦p]]^{evar:0↦x} using gpi

Γ ⊢i (ex , ψ^[[evar:E↦p]]) ---> (ex , ψ^[[evar:E↦q]]) using gpi
Σ: Signature
Γ: Theory
E: evar
ψ: Pattern
x: evar
p, q: Pattern
gpi: ProofInfo
exdepth, mudepth: nat
EvS: EVarSet
SvS: SVarSet
HxneqE: x ≠ E
wfψ: well_formed (ex , ψ)
wfp: well_formed p
wfq: well_formed q
Heqx: x = evar_fresh (elements EvS)
HEinψ: E ∈ free_evars ψ
i': ProofInfo
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
ψ_sub_EvS: free_evars ψ ⊆ EvS
Heqi': i' = (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (ex , ψ))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (ex , ψ))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (ex , ψ)) then false else true, FP := ∅)
pile: ProofInfoLe i' gpi
IH: Γ ⊢i ψ^[[evar:E↦p]]^{evar:0↦x} <---> ψ^[[evar:E↦q]]^{evar:0↦x} using gpi
IH1: Γ ⊢i ψ^[[evar:E↦p]]^{evar:0↦x} ---> ψ^[[evar:E↦q]]^{evar:0↦x} using gpi
IH2: Γ ⊢i ψ^[[evar:E↦q]]^{evar:0↦x} ---> ψ^[[evar:E↦p]]^{evar:0↦x} using gpi

?x ∉ free_evars ψ^[[evar:E↦p]]
Σ: Signature
Γ: Theory
E: evar
ψ: Pattern
x: evar
p, q: Pattern
gpi: ProofInfo
exdepth, mudepth: nat
EvS: EVarSet
SvS: SVarSet
HxneqE: x ≠ E
wfψ: well_formed (ex , ψ)
wfp: well_formed p
wfq: well_formed q
Heqx: x = evar_fresh (elements EvS)
HEinψ: E ∈ free_evars ψ
i': ProofInfo
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
ψ_sub_EvS: free_evars ψ ⊆ EvS
Heqi': i' = (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (ex , ψ))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (ex , ψ))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (ex , ψ)) then false else true, FP := ∅)
pile: ProofInfoLe i' gpi
IH: Γ ⊢i ψ^[[evar:E↦p]]^{evar:0↦x} <---> ψ^[[evar:E↦q]]^{evar:0↦x} using gpi
IH1: Γ ⊢i ψ^[[evar:E↦p]]^{evar:0↦x} ---> ψ^[[evar:E↦q]]^{evar:0↦x} using gpi
IH2: Γ ⊢i ψ^[[evar:E↦q]]^{evar:0↦x} ---> ψ^[[evar:E↦p]]^{evar:0↦x} using gpi
well_formed_closed_ex_aux ψ^[[evar:E↦p]] 1
Σ: Signature
Γ: Theory
E: evar
ψ: Pattern
x: evar
p, q: Pattern
gpi: ProofInfo
exdepth, mudepth: nat
EvS: EVarSet
SvS: SVarSet
HxneqE: x ≠ E
wfψ: well_formed (ex , ψ)
wfp: well_formed p
wfq: well_formed q
Heqx: x = evar_fresh (elements EvS)
HEinψ: E ∈ free_evars ψ
i': ProofInfo
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
ψ_sub_EvS: free_evars ψ ⊆ EvS
Heqi': i' = (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (ex , ψ))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (ex , ψ))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (ex , ψ)) then false else true, FP := ∅)
pile: ProofInfoLe i' gpi
IH: Γ ⊢i ψ^[[evar:E↦p]]^{evar:0↦x} <---> ψ^[[evar:E↦q]]^{evar:0↦x} using gpi
IH1: Γ ⊢i ψ^[[evar:E↦p]]^{evar:0↦x} ---> ψ^[[evar:E↦q]]^{evar:0↦x} using gpi
IH2: Γ ⊢i ψ^[[evar:E↦q]]^{evar:0↦x} ---> ψ^[[evar:E↦p]]^{evar:0↦x} using gpi
Γ ⊢i exists_quantify ?x ψ^[[evar:E↦p]]^{evar:0?x} ---> (ex , ψ^[[evar:E↦q]]) using gpi
Σ: Signature
Γ: Theory
E: evar
ψ: Pattern
x: evar
p, q: Pattern
gpi: ProofInfo
exdepth, mudepth: nat
EvS: EVarSet
SvS: SVarSet
HxneqE: x ≠ E
wfψ: well_formed (ex , ψ)
wfp: well_formed p
wfq: well_formed q
Heqx: x = evar_fresh (elements EvS)
HEinψ: E ∈ free_evars ψ
i': ProofInfo
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
ψ_sub_EvS: free_evars ψ ⊆ EvS
Heqi': i' = (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (ex , ψ))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (ex , ψ))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (ex , ψ)) then false else true, FP := ∅)
pile: ProofInfoLe i' gpi
IH: Γ ⊢i ψ^[[evar:E↦p]]^{evar:0↦x} <---> ψ^[[evar:E↦q]]^{evar:0↦x} using gpi
IH1: Γ ⊢i ψ^[[evar:E↦p]]^{evar:0↦x} ---> ψ^[[evar:E↦q]]^{evar:0↦x} using gpi
IH2: Γ ⊢i ψ^[[evar:E↦q]]^{evar:0↦x} ---> ψ^[[evar:E↦p]]^{evar:0↦x} using gpi

Γ ⊢i exists_quantify ?x ψ^[[evar:E↦p]]^{evar:0?x} ---> (ex , ψ^[[evar:E↦q]]) using gpi
Σ: Signature
Γ: Theory
E: evar
ψ: Pattern
x: evar
p, q: Pattern
gpi: ProofInfo
exdepth, mudepth: nat
EvS: EVarSet
SvS: SVarSet
HxneqE: x ≠ E
wfψ: well_formed (ex , ψ)
wfp: well_formed p
wfq: well_formed q
Heqx: x = evar_fresh (elements EvS)
HEinψ: E ∈ free_evars ψ
i': ProofInfo
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
ψ_sub_EvS: free_evars ψ ⊆ EvS
Heqi': i' = (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (ex , ψ))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (ex , ψ))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (ex , ψ)) then false else true, FP := ∅)
pile: ProofInfoLe i' gpi
IH: Γ ⊢i ψ^[[evar:E↦p]]^{evar:0↦x} <---> ψ^[[evar:E↦q]]^{evar:0↦x} using gpi
IH1: Γ ⊢i ψ^[[evar:E↦p]]^{evar:0↦x} ---> ψ^[[evar:E↦q]]^{evar:0↦x} using gpi
IH2: Γ ⊢i ψ^[[evar:E↦q]]^{evar:0↦x} ---> ψ^[[evar:E↦p]]^{evar:0↦x} using gpi

ProofInfoLe (ExGen := {[?x]}, SVSubst := ∅, KT := false, FP := ∅) gpi
Σ: Signature
Γ: Theory
E: evar
ψ: Pattern
x: evar
p, q: Pattern
gpi: ProofInfo
exdepth, mudepth: nat
EvS: EVarSet
SvS: SVarSet
HxneqE: x ≠ E
wfψ: well_formed (ex , ψ)
wfp: well_formed p
wfq: well_formed q
Heqx: x = evar_fresh (elements EvS)
HEinψ: E ∈ free_evars ψ
i': ProofInfo
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
ψ_sub_EvS: free_evars ψ ⊆ EvS
Heqi': i' = (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (ex , ψ))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (ex , ψ))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (ex , ψ)) then false else true, FP := ∅)
pile: ProofInfoLe i' gpi
IH: Γ ⊢i ψ^[[evar:E↦p]]^{evar:0↦x} <---> ψ^[[evar:E↦q]]^{evar:0↦x} using gpi
IH1: Γ ⊢i ψ^[[evar:E↦p]]^{evar:0↦x} ---> ψ^[[evar:E↦q]]^{evar:0↦x} using gpi
IH2: Γ ⊢i ψ^[[evar:E↦q]]^{evar:0↦x} ---> ψ^[[evar:E↦p]]^{evar:0↦x} using gpi
?x ∉ free_evars (ex , ψ^[[evar:E↦q]])
Σ: Signature
Γ: Theory
E: evar
ψ: Pattern
x: evar
p, q: Pattern
gpi: ProofInfo
exdepth, mudepth: nat
EvS: EVarSet
SvS: SVarSet
HxneqE: x ≠ E
wfψ: well_formed (ex , ψ)
wfp: well_formed p
wfq: well_formed q
Heqx: x = evar_fresh (elements EvS)
HEinψ: E ∈ free_evars ψ
i': ProofInfo
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
ψ_sub_EvS: free_evars ψ ⊆ EvS
Heqi': i' = (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (ex , ψ))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (ex , ψ))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (ex , ψ)) then false else true, FP := ∅)
pile: ProofInfoLe i' gpi
IH: Γ ⊢i ψ^[[evar:E↦p]]^{evar:0↦x} <---> ψ^[[evar:E↦q]]^{evar:0↦x} using gpi
IH1: Γ ⊢i ψ^[[evar:E↦p]]^{evar:0↦x} ---> ψ^[[evar:E↦q]]^{evar:0↦x} using gpi
IH2: Γ ⊢i ψ^[[evar:E↦q]]^{evar:0↦x} ---> ψ^[[evar:E↦p]]^{evar:0↦x} using gpi
Γ ⊢i ψ^[[evar:E↦p]]^{evar:0?x} ---> (ex , ψ^[[evar:E↦q]]) using gpi
Σ: Signature
Γ: Theory
E: evar
ψ: Pattern
x: evar
p, q: Pattern
gpi: ProofInfo
exdepth, mudepth: nat
EvS: EVarSet
SvS: SVarSet
HxneqE: x ≠ E
wfψ: well_formed (ex , ψ)
wfp: well_formed p
wfq: well_formed q
Heqx: x = evar_fresh (elements EvS)
HEinψ: E ∈ free_evars ψ
i': ProofInfo
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
ψ_sub_EvS: free_evars ψ ⊆ EvS
Heqi': i' = (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (ex , ψ))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (ex , ψ))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (ex , ψ)) then false else true, FP := ∅)
pile: ProofInfoLe i' gpi
IH: Γ ⊢i ψ^[[evar:E↦p]]^{evar:0↦x} <---> ψ^[[evar:E↦q]]^{evar:0↦x} using gpi
IH1: Γ ⊢i ψ^[[evar:E↦p]]^{evar:0↦x} ---> ψ^[[evar:E↦q]]^{evar:0↦x} using gpi
IH2: Γ ⊢i ψ^[[evar:E↦q]]^{evar:0↦x} ---> ψ^[[evar:E↦p]]^{evar:0↦x} using gpi

Γ ⊢i ψ^[[evar:E↦p]]^{evar:0?x} ---> (ex , ψ^[[evar:E↦q]]) using gpi
Σ: Signature
Γ: Theory
E: evar
ψ: Pattern
x: evar
p, q: Pattern
gpi: ProofInfo
exdepth, mudepth: nat
EvS: EVarSet
SvS: SVarSet
HxneqE: x ≠ E
wfψ: well_formed (ex , ψ)
wfp: well_formed p
wfq: well_formed q
Heqx: x = evar_fresh (elements EvS)
HEinψ: E ∈ free_evars ψ
i': ProofInfo
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
ψ_sub_EvS: free_evars ψ ⊆ EvS
Heqi': i' = (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (ex , ψ))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (ex , ψ))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (ex , ψ)) then false else true, FP := ∅)
pile: ProofInfoLe i' gpi
IH: Γ ⊢i ψ^[[evar:E↦p]]^{evar:0↦x} <---> ψ^[[evar:E↦q]]^{evar:0↦x} using gpi
IH1: Γ ⊢i ψ^[[evar:E↦p]]^{evar:0↦x} ---> ψ^[[evar:E↦q]]^{evar:0↦x} using gpi
IH2: Γ ⊢i ψ^[[evar:E↦q]]^{evar:0↦x} ---> ψ^[[evar:E↦p]]^{evar:0↦x} using gpi

well_formed ψ^[[evar:E↦p]]^{evar:0?x}
Σ: Signature
Γ: Theory
E: evar
ψ: Pattern
x: evar
p, q: Pattern
gpi: ProofInfo
exdepth, mudepth: nat
EvS: EVarSet
SvS: SVarSet
HxneqE: x ≠ E
wfψ: well_formed (ex , ψ)
wfp: well_formed p
wfq: well_formed q
Heqx: x = evar_fresh (elements EvS)
HEinψ: E ∈ free_evars ψ
i': ProofInfo
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
ψ_sub_EvS: free_evars ψ ⊆ EvS
Heqi': i' = (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (ex , ψ))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (ex , ψ))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (ex , ψ)) then false else true, FP := ∅)
pile: ProofInfoLe i' gpi
IH: Γ ⊢i ψ^[[evar:E↦p]]^{evar:0↦x} <---> ψ^[[evar:E↦q]]^{evar:0↦x} using gpi
IH1: Γ ⊢i ψ^[[evar:E↦p]]^{evar:0↦x} ---> ψ^[[evar:E↦q]]^{evar:0↦x} using gpi
IH2: Γ ⊢i ψ^[[evar:E↦q]]^{evar:0↦x} ---> ψ^[[evar:E↦p]]^{evar:0↦x} using gpi
well_formed ?B
Σ: Signature
Γ: Theory
E: evar
ψ: Pattern
x: evar
p, q: Pattern
gpi: ProofInfo
exdepth, mudepth: nat
EvS: EVarSet
SvS: SVarSet
HxneqE: x ≠ E
wfψ: well_formed (ex , ψ)
wfp: well_formed p
wfq: well_formed q
Heqx: x = evar_fresh (elements EvS)
HEinψ: E ∈ free_evars ψ
i': ProofInfo
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
ψ_sub_EvS: free_evars ψ ⊆ EvS
Heqi': i' = (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (ex , ψ))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (ex , ψ))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (ex , ψ)) then false else true, FP := ∅)
pile: ProofInfoLe i' gpi
IH: Γ ⊢i ψ^[[evar:E↦p]]^{evar:0↦x} <---> ψ^[[evar:E↦q]]^{evar:0↦x} using gpi
IH1: Γ ⊢i ψ^[[evar:E↦p]]^{evar:0↦x} ---> ψ^[[evar:E↦q]]^{evar:0↦x} using gpi
IH2: Γ ⊢i ψ^[[evar:E↦q]]^{evar:0↦x} ---> ψ^[[evar:E↦p]]^{evar:0↦x} using gpi
well_formed (ex , ψ^[[evar:E↦q]])
Σ: Signature
Γ: Theory
E: evar
ψ: Pattern
x: evar
p, q: Pattern
gpi: ProofInfo
exdepth, mudepth: nat
EvS: EVarSet
SvS: SVarSet
HxneqE: x ≠ E
wfψ: well_formed (ex , ψ)
wfp: well_formed p
wfq: well_formed q
Heqx: x = evar_fresh (elements EvS)
HEinψ: E ∈ free_evars ψ
i': ProofInfo
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
ψ_sub_EvS: free_evars ψ ⊆ EvS
Heqi': i' = (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (ex , ψ))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (ex , ψ))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (ex , ψ)) then false else true, FP := ∅)
pile: ProofInfoLe i' gpi
IH: Γ ⊢i ψ^[[evar:E↦p]]^{evar:0↦x} <---> ψ^[[evar:E↦q]]^{evar:0↦x} using gpi
IH1: Γ ⊢i ψ^[[evar:E↦p]]^{evar:0↦x} ---> ψ^[[evar:E↦q]]^{evar:0↦x} using gpi
IH2: Γ ⊢i ψ^[[evar:E↦q]]^{evar:0↦x} ---> ψ^[[evar:E↦p]]^{evar:0↦x} using gpi
Γ ⊢i ψ^[[evar:E↦p]]^{evar:0?x} ---> ?B using gpi
Σ: Signature
Γ: Theory
E: evar
ψ: Pattern
x: evar
p, q: Pattern
gpi: ProofInfo
exdepth, mudepth: nat
EvS: EVarSet
SvS: SVarSet
HxneqE: x ≠ E
wfψ: well_formed (ex , ψ)
wfp: well_formed p
wfq: well_formed q
Heqx: x = evar_fresh (elements EvS)
HEinψ: E ∈ free_evars ψ
i': ProofInfo
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
ψ_sub_EvS: free_evars ψ ⊆ EvS
Heqi': i' = (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (ex , ψ))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (ex , ψ))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (ex , ψ)) then false else true, FP := ∅)
pile: ProofInfoLe i' gpi
IH: Γ ⊢i ψ^[[evar:E↦p]]^{evar:0↦x} <---> ψ^[[evar:E↦q]]^{evar:0↦x} using gpi
IH1: Γ ⊢i ψ^[[evar:E↦p]]^{evar:0↦x} ---> ψ^[[evar:E↦q]]^{evar:0↦x} using gpi
IH2: Γ ⊢i ψ^[[evar:E↦q]]^{evar:0↦x} ---> ψ^[[evar:E↦p]]^{evar:0↦x} using gpi
Γ ⊢i ?B ---> (ex , ψ^[[evar:E↦q]]) using gpi
Σ: Signature
Γ: Theory
E: evar
ψ: Pattern
x: evar
p, q: Pattern
gpi: ProofInfo
exdepth, mudepth: nat
EvS: EVarSet
SvS: SVarSet
HxneqE: x ≠ E
wfψ: well_formed (ex , ψ)
wfp: well_formed p
wfq: well_formed q
Heqx: x = evar_fresh (elements EvS)
HEinψ: E ∈ free_evars ψ
i': ProofInfo
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
ψ_sub_EvS: free_evars ψ ⊆ EvS
Heqi': i' = (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (ex , ψ))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (ex , ψ))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (ex , ψ)) then false else true, FP := ∅)
pile: ProofInfoLe i' gpi
IH: Γ ⊢i ψ^[[evar:E↦p]]^{evar:0↦x} <---> ψ^[[evar:E↦q]]^{evar:0↦x} using gpi
IH1: Γ ⊢i ψ^[[evar:E↦p]]^{evar:0↦x} ---> ψ^[[evar:E↦q]]^{evar:0↦x} using gpi
IH2: Γ ⊢i ψ^[[evar:E↦q]]^{evar:0↦x} ---> ψ^[[evar:E↦p]]^{evar:0↦x} using gpi

Γ ⊢i ?B ---> (ex , ψ^[[evar:E↦q]]) using gpi
Σ: Signature
Γ: Theory
E: evar
ψ: Pattern
x: evar
p, q: Pattern
gpi: ProofInfo
exdepth, mudepth: nat
EvS: EVarSet
SvS: SVarSet
HxneqE: x ≠ E
wfψ: well_formed (ex , ψ)
wfp: well_formed p
wfq: well_formed q
Heqx: x = evar_fresh (elements EvS)
HEinψ: E ∈ free_evars ψ
i': ProofInfo
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
ψ_sub_EvS: free_evars ψ ⊆ EvS
Heqi': i' = (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (ex , ψ))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (ex , ψ))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (ex , ψ)) then false else true, FP := ∅)
pile: ProofInfoLe i' gpi
IH: Γ ⊢i ψ^[[evar:E↦p]]^{evar:0↦x} <---> ψ^[[evar:E↦q]]^{evar:0↦x} using gpi
IH1: Γ ⊢i ψ^[[evar:E↦p]]^{evar:0↦x} ---> ψ^[[evar:E↦q]]^{evar:0↦x} using gpi
IH2: Γ ⊢i ψ^[[evar:E↦q]]^{evar:0↦x} ---> ψ^[[evar:E↦p]]^{evar:0↦x} using gpi

Γ ⊢i ?B ---> (ex , ψ^[[evar:E↦q]]) using BasicReasoning
Σ: Signature
Γ: Theory
E: evar
ψ: Pattern
x: evar
p, q: Pattern
gpi: ProofInfo
exdepth, mudepth: nat
EvS: EVarSet
SvS: SVarSet
HxneqE: x ≠ E
wfψ: well_formed (ex , ψ)
wfp: well_formed p
wfq: well_formed q
Heqx: x = evar_fresh (elements EvS)
HEinψ: E ∈ free_evars ψ
i': ProofInfo
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
ψ_sub_EvS: free_evars ψ ⊆ EvS
Heqi': i' = (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (ex , ψ))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (ex , ψ))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (ex , ψ)) then false else true, FP := ∅)
pile: ProofInfoLe i' gpi
IH: Γ ⊢i ψ^[[evar:E↦p]]^{evar:0↦x} <---> ψ^[[evar:E↦q]]^{evar:0↦x} using gpi
IH1: Γ ⊢i ψ^[[evar:E↦p]]^{evar:0↦x} ---> ψ^[[evar:E↦q]]^{evar:0↦x} using gpi
IH2: Γ ⊢i ψ^[[evar:E↦q]]^{evar:0↦x} ---> ψ^[[evar:E↦p]]^{evar:0↦x} using gpi

well_formed (ex , ψ^[[evar:E↦q]])
abstract (wf_auto2).
Σ: Signature
Γ: Theory
E: evar
ψ: Pattern
x: evar
p, q: Pattern
gpi: ProofInfo
exdepth, mudepth: nat
EvS: EVarSet
SvS: SVarSet
HxneqE: x ≠ E
wfψ: well_formed (ex , ψ)
wfp: well_formed p
wfq: well_formed q
Heqx: x = evar_fresh (elements EvS)
HEinψ: E ∈ free_evars ψ
i': ProofInfo
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
ψ_sub_EvS: free_evars ψ ⊆ EvS
Heqi': i' = (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (ex , ψ))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (ex , ψ))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (ex , ψ)) then false else true, FP := ∅)
pile: ProofInfoLe i' gpi
IH: Γ ⊢i ψ^[[evar:E↦p]]^{evar:0↦x} <---> ψ^[[evar:E↦q]]^{evar:0↦x} using gpi
IH1: Γ ⊢i ψ^[[evar:E↦p]]^{evar:0↦x} ---> ψ^[[evar:E↦q]]^{evar:0↦x} using gpi
IH2: Γ ⊢i ψ^[[evar:E↦q]]^{evar:0↦x} ---> ψ^[[evar:E↦p]]^{evar:0↦x} using gpi

well_formed ψ^[[evar:E↦p]]^{evar:0?x}
Σ: Signature
Γ: Theory
E: evar
ψ: Pattern
x: evar
p, q: Pattern
gpi: ProofInfo
exdepth, mudepth: nat
EvS: EVarSet
SvS: SVarSet
HxneqE: x ≠ E
wfψ: well_formed (ex , ψ)
wfp: well_formed p
wfq: well_formed q
Heqx: x = evar_fresh (elements EvS)
HEinψ: E ∈ free_evars ψ
i': ProofInfo
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
ψ_sub_EvS: free_evars ψ ⊆ EvS
Heqi': i' = (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (ex , ψ))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (ex , ψ))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (ex , ψ)) then false else true, FP := ∅)
pile: ProofInfoLe i' gpi
IH: Γ ⊢i ψ^[[evar:E↦p]]^{evar:0↦x} <---> ψ^[[evar:E↦q]]^{evar:0↦x} using gpi
IH1: Γ ⊢i ψ^[[evar:E↦p]]^{evar:0↦x} ---> ψ^[[evar:E↦q]]^{evar:0↦x} using gpi
IH2: Γ ⊢i ψ^[[evar:E↦q]]^{evar:0↦x} ---> ψ^[[evar:E↦p]]^{evar:0↦x} using gpi
well_formed (ex , ψ^[[evar:E↦q]]) ^ [patt_free_evar ?y]
Σ: Signature
Γ: Theory
E: evar
ψ: Pattern
x: evar
p, q: Pattern
gpi: ProofInfo
exdepth, mudepth: nat
EvS: EVarSet
SvS: SVarSet
HxneqE: x ≠ E
wfψ: well_formed (ex , ψ)
wfp: well_formed p
wfq: well_formed q
Heqx: x = evar_fresh (elements EvS)
HEinψ: E ∈ free_evars ψ
i': ProofInfo
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
ψ_sub_EvS: free_evars ψ ⊆ EvS
Heqi': i' = (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (ex , ψ))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (ex , ψ))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (ex , ψ)) then false else true, FP := ∅)
pile: ProofInfoLe i' gpi
IH: Γ ⊢i ψ^[[evar:E↦p]]^{evar:0↦x} <---> ψ^[[evar:E↦q]]^{evar:0↦x} using gpi
IH1: Γ ⊢i ψ^[[evar:E↦p]]^{evar:0↦x} ---> ψ^[[evar:E↦q]]^{evar:0↦x} using gpi
IH2: Γ ⊢i ψ^[[evar:E↦q]]^{evar:0↦x} ---> ψ^[[evar:E↦p]]^{evar:0↦x} using gpi
well_formed (ex , ψ^[[evar:E↦q]])
Σ: Signature
Γ: Theory
E: evar
ψ: Pattern
x: evar
p, q: Pattern
gpi: ProofInfo
exdepth, mudepth: nat
EvS: EVarSet
SvS: SVarSet
HxneqE: x ≠ E
wfψ: well_formed (ex , ψ)
wfp: well_formed p
wfq: well_formed q
Heqx: x = evar_fresh (elements EvS)
HEinψ: E ∈ free_evars ψ
i': ProofInfo
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
ψ_sub_EvS: free_evars ψ ⊆ EvS
Heqi': i' = (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (ex , ψ))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (ex , ψ))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (ex , ψ)) then false else true, FP := ∅)
pile: ProofInfoLe i' gpi
IH: Γ ⊢i ψ^[[evar:E↦p]]^{evar:0↦x} <---> ψ^[[evar:E↦q]]^{evar:0↦x} using gpi
IH1: Γ ⊢i ψ^[[evar:E↦p]]^{evar:0↦x} ---> ψ^[[evar:E↦q]]^{evar:0↦x} using gpi
IH2: Γ ⊢i ψ^[[evar:E↦q]]^{evar:0↦x} ---> ψ^[[evar:E↦p]]^{evar:0↦x} using gpi
Γ ⊢i ψ^[[evar:E↦p]]^{evar:0?x} ---> (ex , ψ^[[evar:E↦q]]) ^ [patt_free_evar ?y] using gpi
Σ: Signature
Γ: Theory
E: evar
ψ: Pattern
x: evar
p, q: Pattern
gpi: ProofInfo
exdepth, mudepth: nat
EvS: EVarSet
SvS: SVarSet
HxneqE: x ≠ E
wfψ: well_formed (ex , ψ)
wfp: well_formed p
wfq: well_formed q
Heqx: x = evar_fresh (elements EvS)
HEinψ: E ∈ free_evars ψ
i': ProofInfo
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
ψ_sub_EvS: free_evars ψ ⊆ EvS
Heqi': i' = (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (ex , ψ))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (ex , ψ))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (ex , ψ)) then false else true, FP := ∅)
pile: ProofInfoLe i' gpi
IH: Γ ⊢i ψ^[[evar:E↦p]]^{evar:0↦x} <---> ψ^[[evar:E↦q]]^{evar:0↦x} using gpi
IH1: Γ ⊢i ψ^[[evar:E↦p]]^{evar:0↦x} ---> ψ^[[evar:E↦q]]^{evar:0↦x} using gpi
IH2: Γ ⊢i ψ^[[evar:E↦q]]^{evar:0↦x} ---> ψ^[[evar:E↦p]]^{evar:0↦x} using gpi

Γ ⊢i ψ^[[evar:E↦p]]^{evar:0?x} ---> (ex , ψ^[[evar:E↦q]]) ^ [patt_free_evar ?y] using gpi
apply IH1.
Σ: Signature
Γ: Theory
E: evar
ψ: Pattern
x: evar
p, q: Pattern
gpi: ProofInfo
exdepth, mudepth: nat
EvS: EVarSet
SvS: SVarSet
HxneqE: x ≠ E
wfψ: well_formed (ex , ψ)
wfp: well_formed p
wfq: well_formed q
Heqx: x = evar_fresh (elements EvS)
HEinψ: E ∈ free_evars ψ
i': ProofInfo
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
ψ_sub_EvS: free_evars ψ ⊆ EvS
Heqi': i' = (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (ex , ψ))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (ex , ψ))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (ex , ψ)) then false else true, FP := ∅)
pile: ProofInfoLe i' gpi
IH: Γ ⊢i ψ^[[evar:E↦p]]^{evar:0↦x} <---> ψ^[[evar:E↦q]]^{evar:0↦x} using gpi
IH1: Γ ⊢i ψ^[[evar:E↦p]]^{evar:0↦x} ---> ψ^[[evar:E↦q]]^{evar:0↦x} using gpi
IH2: Γ ⊢i ψ^[[evar:E↦q]]^{evar:0↦x} ---> ψ^[[evar:E↦p]]^{evar:0↦x} using gpi

well_formed ψ^[[evar:E↦p]]^{evar:0↦x}
Σ: Signature
Γ: Theory
E: evar
ψ: Pattern
x: evar
p, q: Pattern
gpi: ProofInfo
exdepth, mudepth: nat
EvS: EVarSet
SvS: SVarSet
HxneqE: x ≠ E
wfψ: well_formed (ex , ψ)
wfp: well_formed p
wfq: well_formed q
Heqx: x = evar_fresh (elements EvS)
HEinψ: E ∈ free_evars ψ
i': ProofInfo
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
ψ_sub_EvS: free_evars ψ ⊆ EvS
Heqi': i' = (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (ex , ψ))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (ex , ψ))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (ex , ψ)) then false else true, FP := ∅)
pile: ProofInfoLe i' gpi
IH: Γ ⊢i ψ^[[evar:E↦p]]^{evar:0↦x} <---> ψ^[[evar:E↦q]]^{evar:0↦x} using gpi
IH1: Γ ⊢i ψ^[[evar:E↦p]]^{evar:0↦x} ---> ψ^[[evar:E↦q]]^{evar:0↦x} using gpi
IH2: Γ ⊢i ψ^[[evar:E↦q]]^{evar:0↦x} ---> ψ^[[evar:E↦p]]^{evar:0↦x} using gpi
well_formed (ex , ψ^[[evar:E↦q]]) ^ [patt_free_evar x]
Σ: Signature
Γ: Theory
E: evar
ψ: Pattern
x: evar
p, q: Pattern
gpi: ProofInfo
exdepth, mudepth: nat
EvS: EVarSet
SvS: SVarSet
HxneqE: x ≠ E
wfψ: well_formed (ex , ψ)
wfp: well_formed p
wfq: well_formed q
Heqx: x = evar_fresh (elements EvS)
HEinψ: E ∈ free_evars ψ
i': ProofInfo
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
ψ_sub_EvS: free_evars ψ ⊆ EvS
Heqi': i' = (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (ex , ψ))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (ex , ψ))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (ex , ψ)) then false else true, FP := ∅)
pile: ProofInfoLe i' gpi
IH: Γ ⊢i ψ^[[evar:E↦p]]^{evar:0↦x} <---> ψ^[[evar:E↦q]]^{evar:0↦x} using gpi
IH1: Γ ⊢i ψ^[[evar:E↦p]]^{evar:0↦x} ---> ψ^[[evar:E↦q]]^{evar:0↦x} using gpi
IH2: Γ ⊢i ψ^[[evar:E↦q]]^{evar:0↦x} ---> ψ^[[evar:E↦p]]^{evar:0↦x} using gpi
well_formed (ex , ψ^[[evar:E↦q]])
Σ: Signature
Γ: Theory
E: evar
ψ: Pattern
x: evar
p, q: Pattern
gpi: ProofInfo
exdepth, mudepth: nat
EvS: EVarSet
SvS: SVarSet
HxneqE: x ≠ E
wfψ: well_formed (ex , ψ)
wfp: well_formed p
wfq: well_formed q
Heqx: x = evar_fresh (elements EvS)
HEinψ: E ∈ free_evars ψ
i': ProofInfo
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
ψ_sub_EvS: free_evars ψ ⊆ EvS
Heqi': i' = (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (ex , ψ))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (ex , ψ))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (ex , ψ)) then false else true, FP := ∅)
pile: ProofInfoLe i' gpi
IH: Γ ⊢i ψ^[[evar:E↦p]]^{evar:0↦x} <---> ψ^[[evar:E↦q]]^{evar:0↦x} using gpi
IH1: Γ ⊢i ψ^[[evar:E↦p]]^{evar:0↦x} ---> ψ^[[evar:E↦q]]^{evar:0↦x} using gpi
IH2: Γ ⊢i ψ^[[evar:E↦q]]^{evar:0↦x} ---> ψ^[[evar:E↦p]]^{evar:0↦x} using gpi

well_formed ψ^[[evar:E↦p]]^{evar:0↦x}
abstract (wf_auto2).
Σ: Signature
Γ: Theory
E: evar
ψ: Pattern
x: evar
p, q: Pattern
gpi: ProofInfo
exdepth, mudepth: nat
EvS: EVarSet
SvS: SVarSet
HxneqE: x ≠ E
wfψ: well_formed (ex , ψ)
wfp: well_formed p
wfq: well_formed q
Heqx: x = evar_fresh (elements EvS)
HEinψ: E ∈ free_evars ψ
i': ProofInfo
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
ψ_sub_EvS: free_evars ψ ⊆ EvS
Heqi': i' = (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (ex , ψ))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (ex , ψ))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (ex , ψ)) then false else true, FP := ∅)
pile: ProofInfoLe i' gpi
IH: Γ ⊢i ψ^[[evar:E↦p]]^{evar:0↦x} <---> ψ^[[evar:E↦q]]^{evar:0↦x} using gpi
IH1: Γ ⊢i ψ^[[evar:E↦p]]^{evar:0↦x} ---> ψ^[[evar:E↦q]]^{evar:0↦x} using gpi
IH2: Γ ⊢i ψ^[[evar:E↦q]]^{evar:0↦x} ---> ψ^[[evar:E↦p]]^{evar:0↦x} using gpi

well_formed (ex , ψ^[[evar:E↦q]]) ^ [patt_free_evar x]
Σ: Signature
Γ: Theory
E: evar
ψ: Pattern
x: evar
p, q: Pattern
gpi: ProofInfo
exdepth, mudepth: nat
EvS: EVarSet
SvS: SVarSet
HxneqE: x ≠ E
wfψ: well_formed (ex , ψ)
wfp: well_formed p
wfq: well_formed q
Heqx: x = evar_fresh (elements EvS)
HEinψ: E ∈ free_evars ψ
i': ProofInfo
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
ψ_sub_EvS: free_evars ψ ⊆ EvS
Heqi': i' = (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (ex , ψ))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (ex , ψ))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (ex , ψ)) then false else true, FP := ∅)
pile: ProofInfoLe i' gpi
IH: Γ ⊢i ψ^[[evar:E↦p]]^{evar:0↦x} <---> ψ^[[evar:E↦q]]^{evar:0↦x} using gpi
IH1: Γ ⊢i ψ^[[evar:E↦p]]^{evar:0↦x} ---> ψ^[[evar:E↦q]]^{evar:0↦x} using gpi
IH2: Γ ⊢i ψ^[[evar:E↦q]]^{evar:0↦x} ---> ψ^[[evar:E↦p]]^{evar:0↦x} using gpi
well_formed (ex , ψ^[[evar:E↦q]])
Σ: Signature
Γ: Theory
E: evar
ψ: Pattern
x: evar
p, q: Pattern
gpi: ProofInfo
exdepth, mudepth: nat
EvS: EVarSet
SvS: SVarSet
HxneqE: x ≠ E
wfψ: well_formed (ex , ψ)
wfp: well_formed p
wfq: well_formed q
Heqx: x = evar_fresh (elements EvS)
HEinψ: E ∈ free_evars ψ
i': ProofInfo
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
ψ_sub_EvS: free_evars ψ ⊆ EvS
Heqi': i' = (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (ex , ψ))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (ex , ψ))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (ex , ψ)) then false else true, FP := ∅)
pile: ProofInfoLe i' gpi
IH: Γ ⊢i ψ^[[evar:E↦p]]^{evar:0↦x} <---> ψ^[[evar:E↦q]]^{evar:0↦x} using gpi
IH1: Γ ⊢i ψ^[[evar:E↦p]]^{evar:0↦x} ---> ψ^[[evar:E↦q]]^{evar:0↦x} using gpi
IH2: Γ ⊢i ψ^[[evar:E↦q]]^{evar:0↦x} ---> ψ^[[evar:E↦p]]^{evar:0↦x} using gpi

well_formed (ex , ψ^[[evar:E↦q]]) ^ [patt_free_evar x]
abstract (simpl; wf_auto2; apply wfc_ex_aux_bevar_subst; wf_auto2).
Σ: Signature
Γ: Theory
E: evar
ψ: Pattern
x: evar
p, q: Pattern
gpi: ProofInfo
exdepth, mudepth: nat
EvS: EVarSet
SvS: SVarSet
HxneqE: x ≠ E
wfψ: well_formed (ex , ψ)
wfp: well_formed p
wfq: well_formed q
Heqx: x = evar_fresh (elements EvS)
HEinψ: E ∈ free_evars ψ
i': ProofInfo
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
ψ_sub_EvS: free_evars ψ ⊆ EvS
Heqi': i' = (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (ex , ψ))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (ex , ψ))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (ex , ψ)) then false else true, FP := ∅)
pile: ProofInfoLe i' gpi
IH: Γ ⊢i ψ^[[evar:E↦p]]^{evar:0↦x} <---> ψ^[[evar:E↦q]]^{evar:0↦x} using gpi
IH1: Γ ⊢i ψ^[[evar:E↦p]]^{evar:0↦x} ---> ψ^[[evar:E↦q]]^{evar:0↦x} using gpi
IH2: Γ ⊢i ψ^[[evar:E↦q]]^{evar:0↦x} ---> ψ^[[evar:E↦p]]^{evar:0↦x} using gpi

well_formed (ex , ψ^[[evar:E↦q]])
Σ: Signature
Γ: Theory
E: evar
ψ: Pattern
x: evar
p, q: Pattern
gpi: ProofInfo
exdepth, mudepth: nat
EvS: EVarSet
SvS: SVarSet
HxneqE: x ≠ E
wfψ: well_formed (ex , ψ)
wfp: well_formed p
wfq: well_formed q
Heqx: x = evar_fresh (elements EvS)
HEinψ: E ∈ free_evars ψ
i': ProofInfo
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
ψ_sub_EvS: free_evars ψ ⊆ EvS
Heqi': i' = (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (ex , ψ))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (ex , ψ))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (ex , ψ)) then false else true, FP := ∅)
pile: ProofInfoLe i' gpi
IH: Γ ⊢i ψ^[[evar:E↦p]]^{evar:0↦x} <---> ψ^[[evar:E↦q]]^{evar:0↦x} using gpi
IH1: Γ ⊢i ψ^[[evar:E↦p]]^{evar:0↦x} ---> ψ^[[evar:E↦q]]^{evar:0↦x} using gpi
IH2: Γ ⊢i ψ^[[evar:E↦q]]^{evar:0↦x} ---> ψ^[[evar:E↦p]]^{evar:0↦x} using gpi

well_formed (ex , ψ^[[evar:E↦q]])
abstract (wf_auto2). }
Σ: Signature
Γ: Theory
E: evar
ψ: Pattern
x: evar
p, q: Pattern
gpi: ProofInfo
exdepth, mudepth: nat
EvS: EVarSet
SvS: SVarSet
HxneqE: x ≠ E
wfψ: well_formed (ex , ψ)
wfp: well_formed p
wfq: well_formed q
Heqx: x = evar_fresh (elements EvS)
HEinψ: E ∈ free_evars ψ
i': ProofInfo
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
ψ_sub_EvS: free_evars ψ ⊆ EvS
Heqi': i' = (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (ex , ψ))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (ex , ψ))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (ex , ψ)) then false else true, FP := ∅)
pile: ProofInfoLe i' gpi
IH: Γ ⊢i ψ^[[evar:E↦p]]^{evar:0↦x} <---> ψ^[[evar:E↦q]]^{evar:0↦x} using gpi
IH1: Γ ⊢i ψ^[[evar:E↦p]]^{evar:0↦x} ---> ψ^[[evar:E↦q]]^{evar:0↦x} using gpi
IH2: Γ ⊢i ψ^[[evar:E↦q]]^{evar:0↦x} ---> ψ^[[evar:E↦p]]^{evar:0↦x} using gpi

ProofInfoLe (ExGen := {[x]}, SVSubst := ∅, KT := false, FP := ∅) gpi
Σ: Signature
Γ: Theory
E: evar
ψ: Pattern
x: evar
p, q: Pattern
gpi: ProofInfo
exdepth, mudepth: nat
EvS: EVarSet
SvS: SVarSet
HxneqE: x ≠ E
wfψ: well_formed (ex , ψ)
wfp: well_formed p
wfq: well_formed q
Heqx: x = evar_fresh (elements EvS)
HEinψ: E ∈ free_evars ψ
i': ProofInfo
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
ψ_sub_EvS: free_evars ψ ⊆ EvS
Heqi': i' = (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (ex , ψ))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (ex , ψ))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (ex , ψ)) then false else true, FP := ∅)
pile: ProofInfoLe i' gpi
IH: Γ ⊢i ψ^[[evar:E↦p]]^{evar:0↦x} <---> ψ^[[evar:E↦q]]^{evar:0↦x} using gpi
IH1: Γ ⊢i ψ^[[evar:E↦p]]^{evar:0↦x} ---> ψ^[[evar:E↦q]]^{evar:0↦x} using gpi
IH2: Γ ⊢i ψ^[[evar:E↦q]]^{evar:0↦x} ---> ψ^[[evar:E↦p]]^{evar:0↦x} using gpi
x ∉ free_evars (ex , ψ^[[evar:E↦q]])
Σ: Signature
Γ: Theory
E: evar
ψ: Pattern
x: evar
p, q: Pattern
gpi: ProofInfo
exdepth, mudepth: nat
EvS: EVarSet
SvS: SVarSet
HxneqE: x ≠ E
wfψ: well_formed (ex , ψ)
wfp: well_formed p
wfq: well_formed q
Heqx: x = evar_fresh (elements EvS)
HEinψ: E ∈ free_evars ψ
i': ProofInfo
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
ψ_sub_EvS: free_evars ψ ⊆ EvS
Heqi': i' = (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (ex , ψ))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (ex , ψ))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (ex , ψ)) then false else true, FP := ∅)
pile: ProofInfoLe i' gpi
IH: Γ ⊢i ψ^[[evar:E↦p]]^{evar:0↦x} <---> ψ^[[evar:E↦q]]^{evar:0↦x} using gpi
IH1: Γ ⊢i ψ^[[evar:E↦p]]^{evar:0↦x} ---> ψ^[[evar:E↦q]]^{evar:0↦x} using gpi
IH2: Γ ⊢i ψ^[[evar:E↦q]]^{evar:0↦x} ---> ψ^[[evar:E↦p]]^{evar:0↦x} using gpi

ProofInfoLe (ExGen := {[x]}, SVSubst := ∅, KT := false, FP := ∅) gpi
abstract ( subst i'; eapply pile_trans; [|apply pile]; apply pile_evs_svs_kt; [( simpl; rewrite medoeip_S_in; [assumption|]; simpl; unfold evar_fresh_s; rewrite -Heqx; clear; set_solver )|(clear; set_solver) |reflexivity|(clear; set_solver)] ).
Σ: Signature
Γ: Theory
E: evar
ψ: Pattern
x: evar
p, q: Pattern
gpi: ProofInfo
exdepth, mudepth: nat
EvS: EVarSet
SvS: SVarSet
HxneqE: x ≠ E
wfψ: well_formed (ex , ψ)
wfp: well_formed p
wfq: well_formed q
Heqx: x = evar_fresh (elements EvS)
HEinψ: E ∈ free_evars ψ
i': ProofInfo
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
ψ_sub_EvS: free_evars ψ ⊆ EvS
Heqi': i' = (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (ex , ψ))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (ex , ψ))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (ex , ψ)) then false else true, FP := ∅)
pile: ProofInfoLe i' gpi
IH: Γ ⊢i ψ^[[evar:E↦p]]^{evar:0↦x} <---> ψ^[[evar:E↦q]]^{evar:0↦x} using gpi
IH1: Γ ⊢i ψ^[[evar:E↦p]]^{evar:0↦x} ---> ψ^[[evar:E↦q]]^{evar:0↦x} using gpi
IH2: Γ ⊢i ψ^[[evar:E↦q]]^{evar:0↦x} ---> ψ^[[evar:E↦p]]^{evar:0↦x} using gpi

x ∉ free_evars (ex , ψ^[[evar:E↦q]])
Σ: Signature
Γ: Theory
E: evar
ψ: Pattern
x: evar
p, q: Pattern
gpi: ProofInfo
exdepth, mudepth: nat
EvS: EVarSet
SvS: SVarSet
HxneqE: x ≠ E
wfψ: well_formed (ex , ψ)
wfp: well_formed p
wfq: well_formed q
Heqx: x = evar_fresh (elements EvS)
HEinψ: E ∈ free_evars ψ
i': ProofInfo
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
ψ_sub_EvS: free_evars ψ ⊆ EvS
Heqi': i' = (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (ex , ψ))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (ex , ψ))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (ex , ψ)) then false else true, FP := ∅)
pile: ProofInfoLe i' gpi
IH: Γ ⊢i ψ^[[evar:E↦p]]^{evar:0↦x} <---> ψ^[[evar:E↦q]]^{evar:0↦x} using gpi
IH1: Γ ⊢i ψ^[[evar:E↦p]]^{evar:0↦x} ---> ψ^[[evar:E↦q]]^{evar:0↦x} using gpi
IH2: Γ ⊢i ψ^[[evar:E↦q]]^{evar:0↦x} ---> ψ^[[evar:E↦p]]^{evar:0↦x} using gpi

x ∉ free_evars (ex , ψ^[[evar:E↦q]])
abstract ( simpl; pose proof (Htmp1 := set_evar_fresh_is_fresh' EvS); pose proof (Htmp2 := free_evars_free_evar_subst ψ q E); set_solver ). }
Σ: Signature
Γ: Theory
E: evar
ψ: Pattern
x: evar
p, q: Pattern
gpi: ProofInfo
exdepth, mudepth: nat
EvS: EVarSet
SvS: SVarSet
HxneqE: x ≠ E
wfψ: well_formed (ex , ψ)
wfp: well_formed p
wfq: well_formed q
Heqx: x = evar_fresh (elements EvS)
HEinψ: E ∈ free_evars ψ
i': ProofInfo
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
ψ_sub_EvS: free_evars ψ ⊆ EvS
Heqi': i' = (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (ex , ψ))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (ex , ψ))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (ex , ψ)) then false else true, FP := ∅)
pile: ProofInfoLe i' gpi
IH: Γ ⊢i ψ^[[evar:E↦p]]^{evar:0↦x} <---> ψ^[[evar:E↦q]]^{evar:0↦x} using gpi
IH1: Γ ⊢i ψ^[[evar:E↦p]]^{evar:0↦x} ---> ψ^[[evar:E↦q]]^{evar:0↦x} using gpi
IH2: Γ ⊢i ψ^[[evar:E↦q]]^{evar:0↦x} ---> ψ^[[evar:E↦p]]^{evar:0↦x} using gpi

x ∉ free_evars ψ^[[evar:E↦p]]
Σ: Signature
Γ: Theory
E: evar
ψ: Pattern
x: evar
p, q: Pattern
gpi: ProofInfo
exdepth, mudepth: nat
EvS: EVarSet
SvS: SVarSet
HxneqE: x ≠ E
wfψ: well_formed (ex , ψ)
wfp: well_formed p
wfq: well_formed q
Heqx: x = evar_fresh (elements EvS)
HEinψ: E ∈ free_evars ψ
i': ProofInfo
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
ψ_sub_EvS: free_evars ψ ⊆ EvS
Heqi': i' = (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (ex , ψ))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (ex , ψ))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (ex , ψ)) then false else true, FP := ∅)
pile: ProofInfoLe i' gpi
IH: Γ ⊢i ψ^[[evar:E↦p]]^{evar:0↦x} <---> ψ^[[evar:E↦q]]^{evar:0↦x} using gpi
IH1: Γ ⊢i ψ^[[evar:E↦p]]^{evar:0↦x} ---> ψ^[[evar:E↦q]]^{evar:0↦x} using gpi
IH2: Γ ⊢i ψ^[[evar:E↦q]]^{evar:0↦x} ---> ψ^[[evar:E↦p]]^{evar:0↦x} using gpi
well_formed_closed_ex_aux ψ^[[evar:E↦p]] 1
Σ: Signature
Γ: Theory
E: evar
ψ: Pattern
x: evar
p, q: Pattern
gpi: ProofInfo
exdepth, mudepth: nat
EvS: EVarSet
SvS: SVarSet
HxneqE: x ≠ E
wfψ: well_formed (ex , ψ)
wfp: well_formed p
wfq: well_formed q
Heqx: x = evar_fresh (elements EvS)
HEinψ: E ∈ free_evars ψ
i': ProofInfo
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
ψ_sub_EvS: free_evars ψ ⊆ EvS
Heqi': i' = (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (ex , ψ))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (ex , ψ))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (ex , ψ)) then false else true, FP := ∅)
pile: ProofInfoLe i' gpi
IH: Γ ⊢i ψ^[[evar:E↦p]]^{evar:0↦x} <---> ψ^[[evar:E↦q]]^{evar:0↦x} using gpi
IH1: Γ ⊢i ψ^[[evar:E↦p]]^{evar:0↦x} ---> ψ^[[evar:E↦q]]^{evar:0↦x} using gpi
IH2: Γ ⊢i ψ^[[evar:E↦q]]^{evar:0↦x} ---> ψ^[[evar:E↦p]]^{evar:0↦x} using gpi

x ∉ free_evars ψ^[[evar:E↦p]]
abstract ( simpl; pose proof (Htmp1 := @set_evar_fresh_is_fresh' _ EvS); pose proof (Htmp := @free_evars_free_evar_subst Σ ψ p E); set_solver ).
Σ: Signature
Γ: Theory
E: evar
ψ: Pattern
x: evar
p, q: Pattern
gpi: ProofInfo
exdepth, mudepth: nat
EvS: EVarSet
SvS: SVarSet
HxneqE: x ≠ E
wfψ: well_formed (ex , ψ)
wfp: well_formed p
wfq: well_formed q
Heqx: x = evar_fresh (elements EvS)
HEinψ: E ∈ free_evars ψ
i': ProofInfo
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
ψ_sub_EvS: free_evars ψ ⊆ EvS
Heqi': i' = (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (ex , ψ))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (ex , ψ))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (ex , ψ)) then false else true, FP := ∅)
pile: ProofInfoLe i' gpi
IH: Γ ⊢i ψ^[[evar:E↦p]]^{evar:0↦x} <---> ψ^[[evar:E↦q]]^{evar:0↦x} using gpi
IH1: Γ ⊢i ψ^[[evar:E↦p]]^{evar:0↦x} ---> ψ^[[evar:E↦q]]^{evar:0↦x} using gpi
IH2: Γ ⊢i ψ^[[evar:E↦q]]^{evar:0↦x} ---> ψ^[[evar:E↦p]]^{evar:0↦x} using gpi

well_formed_closed_ex_aux ψ^[[evar:E↦p]] 1
Σ: Signature
Γ: Theory
E: evar
ψ: Pattern
x: evar
p, q: Pattern
gpi: ProofInfo
exdepth, mudepth: nat
EvS: EVarSet
SvS: SVarSet
HxneqE: x ≠ E
wfψ: well_formed (ex , ψ)
wfp: well_formed p
wfq: well_formed q
Heqx: x = evar_fresh (elements EvS)
HEinψ: E ∈ free_evars ψ
i': ProofInfo
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
ψ_sub_EvS: free_evars ψ ⊆ EvS
Heqi': i' = (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (ex , ψ))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (ex , ψ))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (ex , ψ)) then false else true, FP := ∅)
pile: ProofInfoLe i' gpi
IH: Γ ⊢i ψ^[[evar:E↦p]]^{evar:0↦x} <---> ψ^[[evar:E↦q]]^{evar:0↦x} using gpi
IH1: Γ ⊢i ψ^[[evar:E↦p]]^{evar:0↦x} ---> ψ^[[evar:E↦q]]^{evar:0↦x} using gpi
IH2: Γ ⊢i ψ^[[evar:E↦q]]^{evar:0↦x} ---> ψ^[[evar:E↦p]]^{evar:0↦x} using gpi

well_formed_closed_ex_aux ψ^[[evar:E↦p]] 1
Falling back on (is_true (well_formed_closed_ex_aux ψ^[[evar:E↦p]] 1))
}
Σ: Signature
Γ: Theory
E: evar
ψ: Pattern
x: evar
p, q: Pattern
gpi: ProofInfo
exdepth, mudepth: nat
EvS: EVarSet
SvS: SVarSet
HxneqE: x ≠ E
wfψ: well_formed (ex , ψ)
wfp: well_formed p
wfq: well_formed q
Heqx: x = evar_fresh (elements EvS)
HEinψ: E ∈ free_evars ψ
i': ProofInfo
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
ψ_sub_EvS: free_evars ψ ⊆ EvS
Heqi': i' = (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (ex , ψ))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (ex , ψ))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (ex , ψ)) then false else true, FP := ∅)
pile: ProofInfoLe i' gpi
IH: Γ ⊢i ψ^[[evar:E↦p]]^{evar:0↦x} <---> ψ^[[evar:E↦q]]^{evar:0↦x} using gpi
IH1: Γ ⊢i ψ^[[evar:E↦p]]^{evar:0↦x} ---> ψ^[[evar:E↦q]]^{evar:0↦x} using gpi
IH2: Γ ⊢i ψ^[[evar:E↦q]]^{evar:0↦x} ---> ψ^[[evar:E↦p]]^{evar:0↦x} using gpi

Γ ⊢i (ex , ψ^[[evar:E↦q]]) ---> (ex , ψ^[[evar:E↦p]]) using gpi
(* this block is a symmetric version of the previous block*)
Σ: Signature
Γ: Theory
E: evar
ψ: Pattern
x: evar
p, q: Pattern
gpi: ProofInfo
exdepth, mudepth: nat
EvS: EVarSet
SvS: SVarSet
HxneqE: x ≠ E
wfψ: well_formed (ex , ψ)
wfp: well_formed p
wfq: well_formed q
Heqx: x = evar_fresh (elements EvS)
HEinψ: E ∈ free_evars ψ
i': ProofInfo
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
ψ_sub_EvS: free_evars ψ ⊆ EvS
Heqi': i' = (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (ex , ψ))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (ex , ψ))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (ex , ψ)) then false else true, FP := ∅)
pile: ProofInfoLe i' gpi
IH: Γ ⊢i ψ^[[evar:E↦p]]^{evar:0↦x} <---> ψ^[[evar:E↦q]]^{evar:0↦x} using gpi
IH1: Γ ⊢i ψ^[[evar:E↦p]]^{evar:0↦x} ---> ψ^[[evar:E↦q]]^{evar:0↦x} using gpi
IH2: Γ ⊢i ψ^[[evar:E↦q]]^{evar:0↦x} ---> ψ^[[evar:E↦p]]^{evar:0↦x} using gpi

Γ ⊢i (ex , ψ^[[evar:E↦q]]) ---> (ex , ψ^[[evar:E↦p]]) using gpi
Σ: Signature
Γ: Theory
E: evar
ψ: Pattern
x: evar
p, q: Pattern
gpi: ProofInfo
exdepth, mudepth: nat
EvS: EVarSet
SvS: SVarSet
HxneqE: x ≠ E
wfψ: well_formed (ex , ψ)
wfp: well_formed p
wfq: well_formed q
Heqx: x = evar_fresh (elements EvS)
HEinψ: E ∈ free_evars ψ
i': ProofInfo
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
ψ_sub_EvS: free_evars ψ ⊆ EvS
Heqi': i' = (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (ex , ψ))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (ex , ψ))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (ex , ψ)) then false else true, FP := ∅)
pile: ProofInfoLe i' gpi
IH: Γ ⊢i ψ^[[evar:E↦p]]^{evar:0↦x} <---> ψ^[[evar:E↦q]]^{evar:0↦x} using gpi
IH1: Γ ⊢i ψ^[[evar:E↦p]]^{evar:0↦x} ---> ψ^[[evar:E↦q]]^{evar:0↦x} using gpi
IH2: Γ ⊢i ψ^[[evar:E↦q]]^{evar:0↦x} ---> ψ^[[evar:E↦p]]^{evar:0↦x} using gpi

?x ∉ free_evars ψ^[[evar:E↦q]]
Σ: Signature
Γ: Theory
E: evar
ψ: Pattern
x: evar
p, q: Pattern
gpi: ProofInfo
exdepth, mudepth: nat
EvS: EVarSet
SvS: SVarSet
HxneqE: x ≠ E
wfψ: well_formed (ex , ψ)
wfp: well_formed p
wfq: well_formed q
Heqx: x = evar_fresh (elements EvS)
HEinψ: E ∈ free_evars ψ
i': ProofInfo
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
ψ_sub_EvS: free_evars ψ ⊆ EvS
Heqi': i' = (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (ex , ψ))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (ex , ψ))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (ex , ψ)) then false else true, FP := ∅)
pile: ProofInfoLe i' gpi
IH: Γ ⊢i ψ^[[evar:E↦p]]^{evar:0↦x} <---> ψ^[[evar:E↦q]]^{evar:0↦x} using gpi
IH1: Γ ⊢i ψ^[[evar:E↦p]]^{evar:0↦x} ---> ψ^[[evar:E↦q]]^{evar:0↦x} using gpi
IH2: Γ ⊢i ψ^[[evar:E↦q]]^{evar:0↦x} ---> ψ^[[evar:E↦p]]^{evar:0↦x} using gpi
well_formed_closed_ex_aux ψ^[[evar:E↦q]] 1
Σ: Signature
Γ: Theory
E: evar
ψ: Pattern
x: evar
p, q: Pattern
gpi: ProofInfo
exdepth, mudepth: nat
EvS: EVarSet
SvS: SVarSet
HxneqE: x ≠ E
wfψ: well_formed (ex , ψ)
wfp: well_formed p
wfq: well_formed q
Heqx: x = evar_fresh (elements EvS)
HEinψ: E ∈ free_evars ψ
i': ProofInfo
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
ψ_sub_EvS: free_evars ψ ⊆ EvS
Heqi': i' = (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (ex , ψ))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (ex , ψ))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (ex , ψ)) then false else true, FP := ∅)
pile: ProofInfoLe i' gpi
IH: Γ ⊢i ψ^[[evar:E↦p]]^{evar:0↦x} <---> ψ^[[evar:E↦q]]^{evar:0↦x} using gpi
IH1: Γ ⊢i ψ^[[evar:E↦p]]^{evar:0↦x} ---> ψ^[[evar:E↦q]]^{evar:0↦x} using gpi
IH2: Γ ⊢i ψ^[[evar:E↦q]]^{evar:0↦x} ---> ψ^[[evar:E↦p]]^{evar:0↦x} using gpi
Γ ⊢i exists_quantify ?x ψ^[[evar:E↦q]]^{evar:0?x} ---> (ex , ψ^[[evar:E↦p]]) using gpi
Σ: Signature
Γ: Theory
E: evar
ψ: Pattern
x: evar
p, q: Pattern
gpi: ProofInfo
exdepth, mudepth: nat
EvS: EVarSet
SvS: SVarSet
HxneqE: x ≠ E
wfψ: well_formed (ex , ψ)
wfp: well_formed p
wfq: well_formed q
Heqx: x = evar_fresh (elements EvS)
HEinψ: E ∈ free_evars ψ
i': ProofInfo
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
ψ_sub_EvS: free_evars ψ ⊆ EvS
Heqi': i' = (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (ex , ψ))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (ex , ψ))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (ex , ψ)) then false else true, FP := ∅)
pile: ProofInfoLe i' gpi
IH: Γ ⊢i ψ^[[evar:E↦p]]^{evar:0↦x} <---> ψ^[[evar:E↦q]]^{evar:0↦x} using gpi
IH1: Γ ⊢i ψ^[[evar:E↦p]]^{evar:0↦x} ---> ψ^[[evar:E↦q]]^{evar:0↦x} using gpi
IH2: Γ ⊢i ψ^[[evar:E↦q]]^{evar:0↦x} ---> ψ^[[evar:E↦p]]^{evar:0↦x} using gpi

Γ ⊢i exists_quantify ?x ψ^[[evar:E↦q]]^{evar:0?x} ---> (ex , ψ^[[evar:E↦p]]) using gpi
Σ: Signature
Γ: Theory
E: evar
ψ: Pattern
x: evar
p, q: Pattern
gpi: ProofInfo
exdepth, mudepth: nat
EvS: EVarSet
SvS: SVarSet
HxneqE: x ≠ E
wfψ: well_formed (ex , ψ)
wfp: well_formed p
wfq: well_formed q
Heqx: x = evar_fresh (elements EvS)
HEinψ: E ∈ free_evars ψ
i': ProofInfo
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
ψ_sub_EvS: free_evars ψ ⊆ EvS
Heqi': i' = (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (ex , ψ))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (ex , ψ))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (ex , ψ)) then false else true, FP := ∅)
pile: ProofInfoLe i' gpi
IH: Γ ⊢i ψ^[[evar:E↦p]]^{evar:0↦x} <---> ψ^[[evar:E↦q]]^{evar:0↦x} using gpi
IH1: Γ ⊢i ψ^[[evar:E↦p]]^{evar:0↦x} ---> ψ^[[evar:E↦q]]^{evar:0↦x} using gpi
IH2: Γ ⊢i ψ^[[evar:E↦q]]^{evar:0↦x} ---> ψ^[[evar:E↦p]]^{evar:0↦x} using gpi

ProofInfoLe (ExGen := {[?x]}, SVSubst := ∅, KT := false, FP := ∅) gpi
Σ: Signature
Γ: Theory
E: evar
ψ: Pattern
x: evar
p, q: Pattern
gpi: ProofInfo
exdepth, mudepth: nat
EvS: EVarSet
SvS: SVarSet
HxneqE: x ≠ E
wfψ: well_formed (ex , ψ)
wfp: well_formed p
wfq: well_formed q
Heqx: x = evar_fresh (elements EvS)
HEinψ: E ∈ free_evars ψ
i': ProofInfo
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
ψ_sub_EvS: free_evars ψ ⊆ EvS
Heqi': i' = (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (ex , ψ))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (ex , ψ))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (ex , ψ)) then false else true, FP := ∅)
pile: ProofInfoLe i' gpi
IH: Γ ⊢i ψ^[[evar:E↦p]]^{evar:0↦x} <---> ψ^[[evar:E↦q]]^{evar:0↦x} using gpi
IH1: Γ ⊢i ψ^[[evar:E↦p]]^{evar:0↦x} ---> ψ^[[evar:E↦q]]^{evar:0↦x} using gpi
IH2: Γ ⊢i ψ^[[evar:E↦q]]^{evar:0↦x} ---> ψ^[[evar:E↦p]]^{evar:0↦x} using gpi
?x ∉ free_evars (ex , ψ^[[evar:E↦p]])
Σ: Signature
Γ: Theory
E: evar
ψ: Pattern
x: evar
p, q: Pattern
gpi: ProofInfo
exdepth, mudepth: nat
EvS: EVarSet
SvS: SVarSet
HxneqE: x ≠ E
wfψ: well_formed (ex , ψ)
wfp: well_formed p
wfq: well_formed q
Heqx: x = evar_fresh (elements EvS)
HEinψ: E ∈ free_evars ψ
i': ProofInfo
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
ψ_sub_EvS: free_evars ψ ⊆ EvS
Heqi': i' = (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (ex , ψ))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (ex , ψ))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (ex , ψ)) then false else true, FP := ∅)
pile: ProofInfoLe i' gpi
IH: Γ ⊢i ψ^[[evar:E↦p]]^{evar:0↦x} <---> ψ^[[evar:E↦q]]^{evar:0↦x} using gpi
IH1: Γ ⊢i ψ^[[evar:E↦p]]^{evar:0↦x} ---> ψ^[[evar:E↦q]]^{evar:0↦x} using gpi
IH2: Γ ⊢i ψ^[[evar:E↦q]]^{evar:0↦x} ---> ψ^[[evar:E↦p]]^{evar:0↦x} using gpi
Γ ⊢i ψ^[[evar:E↦q]]^{evar:0?x} ---> (ex , ψ^[[evar:E↦p]]) using gpi
Σ: Signature
Γ: Theory
E: evar
ψ: Pattern
x: evar
p, q: Pattern
gpi: ProofInfo
exdepth, mudepth: nat
EvS: EVarSet
SvS: SVarSet
HxneqE: x ≠ E
wfψ: well_formed (ex , ψ)
wfp: well_formed p
wfq: well_formed q
Heqx: x = evar_fresh (elements EvS)
HEinψ: E ∈ free_evars ψ
i': ProofInfo
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
ψ_sub_EvS: free_evars ψ ⊆ EvS
Heqi': i' = (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (ex , ψ))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (ex , ψ))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (ex , ψ)) then false else true, FP := ∅)
pile: ProofInfoLe i' gpi
IH: Γ ⊢i ψ^[[evar:E↦p]]^{evar:0↦x} <---> ψ^[[evar:E↦q]]^{evar:0↦x} using gpi
IH1: Γ ⊢i ψ^[[evar:E↦p]]^{evar:0↦x} ---> ψ^[[evar:E↦q]]^{evar:0↦x} using gpi
IH2: Γ ⊢i ψ^[[evar:E↦q]]^{evar:0↦x} ---> ψ^[[evar:E↦p]]^{evar:0↦x} using gpi

Γ ⊢i ψ^[[evar:E↦q]]^{evar:0?x} ---> (ex , ψ^[[evar:E↦p]]) using gpi
Σ: Signature
Γ: Theory
E: evar
ψ: Pattern
x: evar
p, q: Pattern
gpi: ProofInfo
exdepth, mudepth: nat
EvS: EVarSet
SvS: SVarSet
HxneqE: x ≠ E
wfψ: well_formed (ex , ψ)
wfp: well_formed p
wfq: well_formed q
Heqx: x = evar_fresh (elements EvS)
HEinψ: E ∈ free_evars ψ
i': ProofInfo
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
ψ_sub_EvS: free_evars ψ ⊆ EvS
Heqi': i' = (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (ex , ψ))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (ex , ψ))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (ex , ψ)) then false else true, FP := ∅)
pile: ProofInfoLe i' gpi
IH: Γ ⊢i ψ^[[evar:E↦p]]^{evar:0↦x} <---> ψ^[[evar:E↦q]]^{evar:0↦x} using gpi
IH1: Γ ⊢i ψ^[[evar:E↦p]]^{evar:0↦x} ---> ψ^[[evar:E↦q]]^{evar:0↦x} using gpi
IH2: Γ ⊢i ψ^[[evar:E↦q]]^{evar:0↦x} ---> ψ^[[evar:E↦p]]^{evar:0↦x} using gpi

well_formed ψ^[[evar:E↦q]]^{evar:0?x}
Σ: Signature
Γ: Theory
E: evar
ψ: Pattern
x: evar
p, q: Pattern
gpi: ProofInfo
exdepth, mudepth: nat
EvS: EVarSet
SvS: SVarSet
HxneqE: x ≠ E
wfψ: well_formed (ex , ψ)
wfp: well_formed p
wfq: well_formed q
Heqx: x = evar_fresh (elements EvS)
HEinψ: E ∈ free_evars ψ
i': ProofInfo
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
ψ_sub_EvS: free_evars ψ ⊆ EvS
Heqi': i' = (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (ex , ψ))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (ex , ψ))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (ex , ψ)) then false else true, FP := ∅)
pile: ProofInfoLe i' gpi
IH: Γ ⊢i ψ^[[evar:E↦p]]^{evar:0↦x} <---> ψ^[[evar:E↦q]]^{evar:0↦x} using gpi
IH1: Γ ⊢i ψ^[[evar:E↦p]]^{evar:0↦x} ---> ψ^[[evar:E↦q]]^{evar:0↦x} using gpi
IH2: Γ ⊢i ψ^[[evar:E↦q]]^{evar:0↦x} ---> ψ^[[evar:E↦p]]^{evar:0↦x} using gpi
well_formed ?B
Σ: Signature
Γ: Theory
E: evar
ψ: Pattern
x: evar
p, q: Pattern
gpi: ProofInfo
exdepth, mudepth: nat
EvS: EVarSet
SvS: SVarSet
HxneqE: x ≠ E
wfψ: well_formed (ex , ψ)
wfp: well_formed p
wfq: well_formed q
Heqx: x = evar_fresh (elements EvS)
HEinψ: E ∈ free_evars ψ
i': ProofInfo
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
ψ_sub_EvS: free_evars ψ ⊆ EvS
Heqi': i' = (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (ex , ψ))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (ex , ψ))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (ex , ψ)) then false else true, FP := ∅)
pile: ProofInfoLe i' gpi
IH: Γ ⊢i ψ^[[evar:E↦p]]^{evar:0↦x} <---> ψ^[[evar:E↦q]]^{evar:0↦x} using gpi
IH1: Γ ⊢i ψ^[[evar:E↦p]]^{evar:0↦x} ---> ψ^[[evar:E↦q]]^{evar:0↦x} using gpi
IH2: Γ ⊢i ψ^[[evar:E↦q]]^{evar:0↦x} ---> ψ^[[evar:E↦p]]^{evar:0↦x} using gpi
well_formed (ex , ψ^[[evar:E↦p]])
Σ: Signature
Γ: Theory
E: evar
ψ: Pattern
x: evar
p, q: Pattern
gpi: ProofInfo
exdepth, mudepth: nat
EvS: EVarSet
SvS: SVarSet
HxneqE: x ≠ E
wfψ: well_formed (ex , ψ)
wfp: well_formed p
wfq: well_formed q
Heqx: x = evar_fresh (elements EvS)
HEinψ: E ∈ free_evars ψ
i': ProofInfo
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
ψ_sub_EvS: free_evars ψ ⊆ EvS
Heqi': i' = (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (ex , ψ))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (ex , ψ))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (ex , ψ)) then false else true, FP := ∅)
pile: ProofInfoLe i' gpi
IH: Γ ⊢i ψ^[[evar:E↦p]]^{evar:0↦x} <---> ψ^[[evar:E↦q]]^{evar:0↦x} using gpi
IH1: Γ ⊢i ψ^[[evar:E↦p]]^{evar:0↦x} ---> ψ^[[evar:E↦q]]^{evar:0↦x} using gpi
IH2: Γ ⊢i ψ^[[evar:E↦q]]^{evar:0↦x} ---> ψ^[[evar:E↦p]]^{evar:0↦x} using gpi
Γ ⊢i ψ^[[evar:E↦q]]^{evar:0?x} ---> ?B using gpi
Σ: Signature
Γ: Theory
E: evar
ψ: Pattern
x: evar
p, q: Pattern
gpi: ProofInfo
exdepth, mudepth: nat
EvS: EVarSet
SvS: SVarSet
HxneqE: x ≠ E
wfψ: well_formed (ex , ψ)
wfp: well_formed p
wfq: well_formed q
Heqx: x = evar_fresh (elements EvS)
HEinψ: E ∈ free_evars ψ
i': ProofInfo
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
ψ_sub_EvS: free_evars ψ ⊆ EvS
Heqi': i' = (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (ex , ψ))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (ex , ψ))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (ex , ψ)) then false else true, FP := ∅)
pile: ProofInfoLe i' gpi
IH: Γ ⊢i ψ^[[evar:E↦p]]^{evar:0↦x} <---> ψ^[[evar:E↦q]]^{evar:0↦x} using gpi
IH1: Γ ⊢i ψ^[[evar:E↦p]]^{evar:0↦x} ---> ψ^[[evar:E↦q]]^{evar:0↦x} using gpi
IH2: Γ ⊢i ψ^[[evar:E↦q]]^{evar:0↦x} ---> ψ^[[evar:E↦p]]^{evar:0↦x} using gpi
Γ ⊢i ?B ---> (ex , ψ^[[evar:E↦p]]) using gpi
Σ: Signature
Γ: Theory
E: evar
ψ: Pattern
x: evar
p, q: Pattern
gpi: ProofInfo
exdepth, mudepth: nat
EvS: EVarSet
SvS: SVarSet
HxneqE: x ≠ E
wfψ: well_formed (ex , ψ)
wfp: well_formed p
wfq: well_formed q
Heqx: x = evar_fresh (elements EvS)
HEinψ: E ∈ free_evars ψ
i': ProofInfo
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
ψ_sub_EvS: free_evars ψ ⊆ EvS
Heqi': i' = (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (ex , ψ))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (ex , ψ))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (ex , ψ)) then false else true, FP := ∅)
pile: ProofInfoLe i' gpi
IH: Γ ⊢i ψ^[[evar:E↦p]]^{evar:0↦x} <---> ψ^[[evar:E↦q]]^{evar:0↦x} using gpi
IH1: Γ ⊢i ψ^[[evar:E↦p]]^{evar:0↦x} ---> ψ^[[evar:E↦q]]^{evar:0↦x} using gpi
IH2: Γ ⊢i ψ^[[evar:E↦q]]^{evar:0↦x} ---> ψ^[[evar:E↦p]]^{evar:0↦x} using gpi

Γ ⊢i ?B ---> (ex , ψ^[[evar:E↦p]]) using gpi
Σ: Signature
Γ: Theory
E: evar
ψ: Pattern
x: evar
p, q: Pattern
gpi: ProofInfo
exdepth, mudepth: nat
EvS: EVarSet
SvS: SVarSet
HxneqE: x ≠ E
wfψ: well_formed (ex , ψ)
wfp: well_formed p
wfq: well_formed q
Heqx: x = evar_fresh (elements EvS)
HEinψ: E ∈ free_evars ψ
i': ProofInfo
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
ψ_sub_EvS: free_evars ψ ⊆ EvS
Heqi': i' = (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (ex , ψ))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (ex , ψ))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (ex , ψ)) then false else true, FP := ∅)
pile: ProofInfoLe i' gpi
IH: Γ ⊢i ψ^[[evar:E↦p]]^{evar:0↦x} <---> ψ^[[evar:E↦q]]^{evar:0↦x} using gpi
IH1: Γ ⊢i ψ^[[evar:E↦p]]^{evar:0↦x} ---> ψ^[[evar:E↦q]]^{evar:0↦x} using gpi
IH2: Γ ⊢i ψ^[[evar:E↦q]]^{evar:0↦x} ---> ψ^[[evar:E↦p]]^{evar:0↦x} using gpi

Γ ⊢i ?B ---> (ex , ψ^[[evar:E↦p]]) using BasicReasoning
Σ: Signature
Γ: Theory
E: evar
ψ: Pattern
x: evar
p, q: Pattern
gpi: ProofInfo
exdepth, mudepth: nat
EvS: EVarSet
SvS: SVarSet
HxneqE: x ≠ E
wfψ: well_formed (ex , ψ)
wfp: well_formed p
wfq: well_formed q
Heqx: x = evar_fresh (elements EvS)
HEinψ: E ∈ free_evars ψ
i': ProofInfo
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
ψ_sub_EvS: free_evars ψ ⊆ EvS
Heqi': i' = (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (ex , ψ))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (ex , ψ))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (ex , ψ)) then false else true, FP := ∅)
pile: ProofInfoLe i' gpi
IH: Γ ⊢i ψ^[[evar:E↦p]]^{evar:0↦x} <---> ψ^[[evar:E↦q]]^{evar:0↦x} using gpi
IH1: Γ ⊢i ψ^[[evar:E↦p]]^{evar:0↦x} ---> ψ^[[evar:E↦q]]^{evar:0↦x} using gpi
IH2: Γ ⊢i ψ^[[evar:E↦q]]^{evar:0↦x} ---> ψ^[[evar:E↦p]]^{evar:0↦x} using gpi

well_formed (ex , ψ^[[evar:E↦p]])
abstract (wf_auto2).
Σ: Signature
Γ: Theory
E: evar
ψ: Pattern
x: evar
p, q: Pattern
gpi: ProofInfo
exdepth, mudepth: nat
EvS: EVarSet
SvS: SVarSet
HxneqE: x ≠ E
wfψ: well_formed (ex , ψ)
wfp: well_formed p
wfq: well_formed q
Heqx: x = evar_fresh (elements EvS)
HEinψ: E ∈ free_evars ψ
i': ProofInfo
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
ψ_sub_EvS: free_evars ψ ⊆ EvS
Heqi': i' = (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (ex , ψ))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (ex , ψ))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (ex , ψ)) then false else true, FP := ∅)
pile: ProofInfoLe i' gpi
IH: Γ ⊢i ψ^[[evar:E↦p]]^{evar:0↦x} <---> ψ^[[evar:E↦q]]^{evar:0↦x} using gpi
IH1: Γ ⊢i ψ^[[evar:E↦p]]^{evar:0↦x} ---> ψ^[[evar:E↦q]]^{evar:0↦x} using gpi
IH2: Γ ⊢i ψ^[[evar:E↦q]]^{evar:0↦x} ---> ψ^[[evar:E↦p]]^{evar:0↦x} using gpi

well_formed ψ^[[evar:E↦q]]^{evar:0?x}
Σ: Signature
Γ: Theory
E: evar
ψ: Pattern
x: evar
p, q: Pattern
gpi: ProofInfo
exdepth, mudepth: nat
EvS: EVarSet
SvS: SVarSet
HxneqE: x ≠ E
wfψ: well_formed (ex , ψ)
wfp: well_formed p
wfq: well_formed q
Heqx: x = evar_fresh (elements EvS)
HEinψ: E ∈ free_evars ψ
i': ProofInfo
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
ψ_sub_EvS: free_evars ψ ⊆ EvS
Heqi': i' = (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (ex , ψ))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (ex , ψ))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (ex , ψ)) then false else true, FP := ∅)
pile: ProofInfoLe i' gpi
IH: Γ ⊢i ψ^[[evar:E↦p]]^{evar:0↦x} <---> ψ^[[evar:E↦q]]^{evar:0↦x} using gpi
IH1: Γ ⊢i ψ^[[evar:E↦p]]^{evar:0↦x} ---> ψ^[[evar:E↦q]]^{evar:0↦x} using gpi
IH2: Γ ⊢i ψ^[[evar:E↦q]]^{evar:0↦x} ---> ψ^[[evar:E↦p]]^{evar:0↦x} using gpi
well_formed (ex , ψ^[[evar:E↦p]]) ^ [patt_free_evar ?y]
Σ: Signature
Γ: Theory
E: evar
ψ: Pattern
x: evar
p, q: Pattern
gpi: ProofInfo
exdepth, mudepth: nat
EvS: EVarSet
SvS: SVarSet
HxneqE: x ≠ E
wfψ: well_formed (ex , ψ)
wfp: well_formed p
wfq: well_formed q
Heqx: x = evar_fresh (elements EvS)
HEinψ: E ∈ free_evars ψ
i': ProofInfo
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
ψ_sub_EvS: free_evars ψ ⊆ EvS
Heqi': i' = (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (ex , ψ))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (ex , ψ))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (ex , ψ)) then false else true, FP := ∅)
pile: ProofInfoLe i' gpi
IH: Γ ⊢i ψ^[[evar:E↦p]]^{evar:0↦x} <---> ψ^[[evar:E↦q]]^{evar:0↦x} using gpi
IH1: Γ ⊢i ψ^[[evar:E↦p]]^{evar:0↦x} ---> ψ^[[evar:E↦q]]^{evar:0↦x} using gpi
IH2: Γ ⊢i ψ^[[evar:E↦q]]^{evar:0↦x} ---> ψ^[[evar:E↦p]]^{evar:0↦x} using gpi
well_formed (ex , ψ^[[evar:E↦p]])
Σ: Signature
Γ: Theory
E: evar
ψ: Pattern
x: evar
p, q: Pattern
gpi: ProofInfo
exdepth, mudepth: nat
EvS: EVarSet
SvS: SVarSet
HxneqE: x ≠ E
wfψ: well_formed (ex , ψ)
wfp: well_formed p
wfq: well_formed q
Heqx: x = evar_fresh (elements EvS)
HEinψ: E ∈ free_evars ψ
i': ProofInfo
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
ψ_sub_EvS: free_evars ψ ⊆ EvS
Heqi': i' = (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (ex , ψ))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (ex , ψ))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (ex , ψ)) then false else true, FP := ∅)
pile: ProofInfoLe i' gpi
IH: Γ ⊢i ψ^[[evar:E↦p]]^{evar:0↦x} <---> ψ^[[evar:E↦q]]^{evar:0↦x} using gpi
IH1: Γ ⊢i ψ^[[evar:E↦p]]^{evar:0↦x} ---> ψ^[[evar:E↦q]]^{evar:0↦x} using gpi
IH2: Γ ⊢i ψ^[[evar:E↦q]]^{evar:0↦x} ---> ψ^[[evar:E↦p]]^{evar:0↦x} using gpi
Γ ⊢i ψ^[[evar:E↦q]]^{evar:0?x} ---> (ex , ψ^[[evar:E↦p]]) ^ [patt_free_evar ?y] using gpi
Σ: Signature
Γ: Theory
E: evar
ψ: Pattern
x: evar
p, q: Pattern
gpi: ProofInfo
exdepth, mudepth: nat
EvS: EVarSet
SvS: SVarSet
HxneqE: x ≠ E
wfψ: well_formed (ex , ψ)
wfp: well_formed p
wfq: well_formed q
Heqx: x = evar_fresh (elements EvS)
HEinψ: E ∈ free_evars ψ
i': ProofInfo
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
ψ_sub_EvS: free_evars ψ ⊆ EvS
Heqi': i' = (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (ex , ψ))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (ex , ψ))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (ex , ψ)) then false else true, FP := ∅)
pile: ProofInfoLe i' gpi
IH: Γ ⊢i ψ^[[evar:E↦p]]^{evar:0↦x} <---> ψ^[[evar:E↦q]]^{evar:0↦x} using gpi
IH1: Γ ⊢i ψ^[[evar:E↦p]]^{evar:0↦x} ---> ψ^[[evar:E↦q]]^{evar:0↦x} using gpi
IH2: Γ ⊢i ψ^[[evar:E↦q]]^{evar:0↦x} ---> ψ^[[evar:E↦p]]^{evar:0↦x} using gpi

Γ ⊢i ψ^[[evar:E↦q]]^{evar:0?x} ---> (ex , ψ^[[evar:E↦p]]) ^ [patt_free_evar ?y] using gpi
apply IH2.
Σ: Signature
Γ: Theory
E: evar
ψ: Pattern
x: evar
p, q: Pattern
gpi: ProofInfo
exdepth, mudepth: nat
EvS: EVarSet
SvS: SVarSet
HxneqE: x ≠ E
wfψ: well_formed (ex , ψ)
wfp: well_formed p
wfq: well_formed q
Heqx: x = evar_fresh (elements EvS)
HEinψ: E ∈ free_evars ψ
i': ProofInfo
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
ψ_sub_EvS: free_evars ψ ⊆ EvS
Heqi': i' = (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (ex , ψ))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (ex , ψ))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (ex , ψ)) then false else true, FP := ∅)
pile: ProofInfoLe i' gpi
IH: Γ ⊢i ψ^[[evar:E↦p]]^{evar:0↦x} <---> ψ^[[evar:E↦q]]^{evar:0↦x} using gpi
IH1: Γ ⊢i ψ^[[evar:E↦p]]^{evar:0↦x} ---> ψ^[[evar:E↦q]]^{evar:0↦x} using gpi
IH2: Γ ⊢i ψ^[[evar:E↦q]]^{evar:0↦x} ---> ψ^[[evar:E↦p]]^{evar:0↦x} using gpi

well_formed ψ^[[evar:E↦q]]^{evar:0↦x}
Σ: Signature
Γ: Theory
E: evar
ψ: Pattern
x: evar
p, q: Pattern
gpi: ProofInfo
exdepth, mudepth: nat
EvS: EVarSet
SvS: SVarSet
HxneqE: x ≠ E
wfψ: well_formed (ex , ψ)
wfp: well_formed p
wfq: well_formed q
Heqx: x = evar_fresh (elements EvS)
HEinψ: E ∈ free_evars ψ
i': ProofInfo
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
ψ_sub_EvS: free_evars ψ ⊆ EvS
Heqi': i' = (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (ex , ψ))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (ex , ψ))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (ex , ψ)) then false else true, FP := ∅)
pile: ProofInfoLe i' gpi
IH: Γ ⊢i ψ^[[evar:E↦p]]^{evar:0↦x} <---> ψ^[[evar:E↦q]]^{evar:0↦x} using gpi
IH1: Γ ⊢i ψ^[[evar:E↦p]]^{evar:0↦x} ---> ψ^[[evar:E↦q]]^{evar:0↦x} using gpi
IH2: Γ ⊢i ψ^[[evar:E↦q]]^{evar:0↦x} ---> ψ^[[evar:E↦p]]^{evar:0↦x} using gpi
well_formed (ex , ψ^[[evar:E↦p]]) ^ [patt_free_evar x]
Σ: Signature
Γ: Theory
E: evar
ψ: Pattern
x: evar
p, q: Pattern
gpi: ProofInfo
exdepth, mudepth: nat
EvS: EVarSet
SvS: SVarSet
HxneqE: x ≠ E
wfψ: well_formed (ex , ψ)
wfp: well_formed p
wfq: well_formed q
Heqx: x = evar_fresh (elements EvS)
HEinψ: E ∈ free_evars ψ
i': ProofInfo
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
ψ_sub_EvS: free_evars ψ ⊆ EvS
Heqi': i' = (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (ex , ψ))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (ex , ψ))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (ex , ψ)) then false else true, FP := ∅)
pile: ProofInfoLe i' gpi
IH: Γ ⊢i ψ^[[evar:E↦p]]^{evar:0↦x} <---> ψ^[[evar:E↦q]]^{evar:0↦x} using gpi
IH1: Γ ⊢i ψ^[[evar:E↦p]]^{evar:0↦x} ---> ψ^[[evar:E↦q]]^{evar:0↦x} using gpi
IH2: Γ ⊢i ψ^[[evar:E↦q]]^{evar:0↦x} ---> ψ^[[evar:E↦p]]^{evar:0↦x} using gpi
well_formed (ex , ψ^[[evar:E↦p]])
Σ: Signature
Γ: Theory
E: evar
ψ: Pattern
x: evar
p, q: Pattern
gpi: ProofInfo
exdepth, mudepth: nat
EvS: EVarSet
SvS: SVarSet
HxneqE: x ≠ E
wfψ: well_formed (ex , ψ)
wfp: well_formed p
wfq: well_formed q
Heqx: x = evar_fresh (elements EvS)
HEinψ: E ∈ free_evars ψ
i': ProofInfo
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
ψ_sub_EvS: free_evars ψ ⊆ EvS
Heqi': i' = (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (ex , ψ))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (ex , ψ))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (ex , ψ)) then false else true, FP := ∅)
pile: ProofInfoLe i' gpi
IH: Γ ⊢i ψ^[[evar:E↦p]]^{evar:0↦x} <---> ψ^[[evar:E↦q]]^{evar:0↦x} using gpi
IH1: Γ ⊢i ψ^[[evar:E↦p]]^{evar:0↦x} ---> ψ^[[evar:E↦q]]^{evar:0↦x} using gpi
IH2: Γ ⊢i ψ^[[evar:E↦q]]^{evar:0↦x} ---> ψ^[[evar:E↦p]]^{evar:0↦x} using gpi

well_formed ψ^[[evar:E↦q]]^{evar:0↦x}
abstract (wf_auto2).
Σ: Signature
Γ: Theory
E: evar
ψ: Pattern
x: evar
p, q: Pattern
gpi: ProofInfo
exdepth, mudepth: nat
EvS: EVarSet
SvS: SVarSet
HxneqE: x ≠ E
wfψ: well_formed (ex , ψ)
wfp: well_formed p
wfq: well_formed q
Heqx: x = evar_fresh (elements EvS)
HEinψ: E ∈ free_evars ψ
i': ProofInfo
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
ψ_sub_EvS: free_evars ψ ⊆ EvS
Heqi': i' = (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (ex , ψ))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (ex , ψ))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (ex , ψ)) then false else true, FP := ∅)
pile: ProofInfoLe i' gpi
IH: Γ ⊢i ψ^[[evar:E↦p]]^{evar:0↦x} <---> ψ^[[evar:E↦q]]^{evar:0↦x} using gpi
IH1: Γ ⊢i ψ^[[evar:E↦p]]^{evar:0↦x} ---> ψ^[[evar:E↦q]]^{evar:0↦x} using gpi
IH2: Γ ⊢i ψ^[[evar:E↦q]]^{evar:0↦x} ---> ψ^[[evar:E↦p]]^{evar:0↦x} using gpi

well_formed (ex , ψ^[[evar:E↦p]]) ^ [patt_free_evar x]
Σ: Signature
Γ: Theory
E: evar
ψ: Pattern
x: evar
p, q: Pattern
gpi: ProofInfo
exdepth, mudepth: nat
EvS: EVarSet
SvS: SVarSet
HxneqE: x ≠ E
wfψ: well_formed (ex , ψ)
wfp: well_formed p
wfq: well_formed q
Heqx: x = evar_fresh (elements EvS)
HEinψ: E ∈ free_evars ψ
i': ProofInfo
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
ψ_sub_EvS: free_evars ψ ⊆ EvS
Heqi': i' = (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (ex , ψ))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (ex , ψ))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (ex , ψ)) then false else true, FP := ∅)
pile: ProofInfoLe i' gpi
IH: Γ ⊢i ψ^[[evar:E↦p]]^{evar:0↦x} <---> ψ^[[evar:E↦q]]^{evar:0↦x} using gpi
IH1: Γ ⊢i ψ^[[evar:E↦p]]^{evar:0↦x} ---> ψ^[[evar:E↦q]]^{evar:0↦x} using gpi
IH2: Γ ⊢i ψ^[[evar:E↦q]]^{evar:0↦x} ---> ψ^[[evar:E↦p]]^{evar:0↦x} using gpi
well_formed (ex , ψ^[[evar:E↦p]])
Σ: Signature
Γ: Theory
E: evar
ψ: Pattern
x: evar
p, q: Pattern
gpi: ProofInfo
exdepth, mudepth: nat
EvS: EVarSet
SvS: SVarSet
HxneqE: x ≠ E
wfψ: well_formed (ex , ψ)
wfp: well_formed p
wfq: well_formed q
Heqx: x = evar_fresh (elements EvS)
HEinψ: E ∈ free_evars ψ
i': ProofInfo
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
ψ_sub_EvS: free_evars ψ ⊆ EvS
Heqi': i' = (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (ex , ψ))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (ex , ψ))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (ex , ψ)) then false else true, FP := ∅)
pile: ProofInfoLe i' gpi
IH: Γ ⊢i ψ^[[evar:E↦p]]^{evar:0↦x} <---> ψ^[[evar:E↦q]]^{evar:0↦x} using gpi
IH1: Γ ⊢i ψ^[[evar:E↦p]]^{evar:0↦x} ---> ψ^[[evar:E↦q]]^{evar:0↦x} using gpi
IH2: Γ ⊢i ψ^[[evar:E↦q]]^{evar:0↦x} ---> ψ^[[evar:E↦p]]^{evar:0↦x} using gpi

well_formed (ex , ψ^[[evar:E↦p]]) ^ [patt_free_evar x]
abstract (simpl; wf_auto2; apply wfc_ex_aux_bevar_subst; wf_auto2).
Σ: Signature
Γ: Theory
E: evar
ψ: Pattern
x: evar
p, q: Pattern
gpi: ProofInfo
exdepth, mudepth: nat
EvS: EVarSet
SvS: SVarSet
HxneqE: x ≠ E
wfψ: well_formed (ex , ψ)
wfp: well_formed p
wfq: well_formed q
Heqx: x = evar_fresh (elements EvS)
HEinψ: E ∈ free_evars ψ
i': ProofInfo
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
ψ_sub_EvS: free_evars ψ ⊆ EvS
Heqi': i' = (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (ex , ψ))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (ex , ψ))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (ex , ψ)) then false else true, FP := ∅)
pile: ProofInfoLe i' gpi
IH: Γ ⊢i ψ^[[evar:E↦p]]^{evar:0↦x} <---> ψ^[[evar:E↦q]]^{evar:0↦x} using gpi
IH1: Γ ⊢i ψ^[[evar:E↦p]]^{evar:0↦x} ---> ψ^[[evar:E↦q]]^{evar:0↦x} using gpi
IH2: Γ ⊢i ψ^[[evar:E↦q]]^{evar:0↦x} ---> ψ^[[evar:E↦p]]^{evar:0↦x} using gpi

well_formed (ex , ψ^[[evar:E↦p]])
Σ: Signature
Γ: Theory
E: evar
ψ: Pattern
x: evar
p, q: Pattern
gpi: ProofInfo
exdepth, mudepth: nat
EvS: EVarSet
SvS: SVarSet
HxneqE: x ≠ E
wfψ: well_formed (ex , ψ)
wfp: well_formed p
wfq: well_formed q
Heqx: x = evar_fresh (elements EvS)
HEinψ: E ∈ free_evars ψ
i': ProofInfo
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
ψ_sub_EvS: free_evars ψ ⊆ EvS
Heqi': i' = (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (ex , ψ))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (ex , ψ))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (ex , ψ)) then false else true, FP := ∅)
pile: ProofInfoLe i' gpi
IH: Γ ⊢i ψ^[[evar:E↦p]]^{evar:0↦x} <---> ψ^[[evar:E↦q]]^{evar:0↦x} using gpi
IH1: Γ ⊢i ψ^[[evar:E↦p]]^{evar:0↦x} ---> ψ^[[evar:E↦q]]^{evar:0↦x} using gpi
IH2: Γ ⊢i ψ^[[evar:E↦q]]^{evar:0↦x} ---> ψ^[[evar:E↦p]]^{evar:0↦x} using gpi

well_formed (ex , ψ^[[evar:E↦p]])
abstract (wf_auto2). }
Σ: Signature
Γ: Theory
E: evar
ψ: Pattern
x: evar
p, q: Pattern
gpi: ProofInfo
exdepth, mudepth: nat
EvS: EVarSet
SvS: SVarSet
HxneqE: x ≠ E
wfψ: well_formed (ex , ψ)
wfp: well_formed p
wfq: well_formed q
Heqx: x = evar_fresh (elements EvS)
HEinψ: E ∈ free_evars ψ
i': ProofInfo
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
ψ_sub_EvS: free_evars ψ ⊆ EvS
Heqi': i' = (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (ex , ψ))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (ex , ψ))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (ex , ψ)) then false else true, FP := ∅)
pile: ProofInfoLe i' gpi
IH: Γ ⊢i ψ^[[evar:E↦p]]^{evar:0↦x} <---> ψ^[[evar:E↦q]]^{evar:0↦x} using gpi
IH1: Γ ⊢i ψ^[[evar:E↦p]]^{evar:0↦x} ---> ψ^[[evar:E↦q]]^{evar:0↦x} using gpi
IH2: Γ ⊢i ψ^[[evar:E↦q]]^{evar:0↦x} ---> ψ^[[evar:E↦p]]^{evar:0↦x} using gpi

ProofInfoLe (ExGen := {[x]}, SVSubst := ∅, KT := false, FP := ∅) gpi
Σ: Signature
Γ: Theory
E: evar
ψ: Pattern
x: evar
p, q: Pattern
gpi: ProofInfo
exdepth, mudepth: nat
EvS: EVarSet
SvS: SVarSet
HxneqE: x ≠ E
wfψ: well_formed (ex , ψ)
wfp: well_formed p
wfq: well_formed q
Heqx: x = evar_fresh (elements EvS)
HEinψ: E ∈ free_evars ψ
i': ProofInfo
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
ψ_sub_EvS: free_evars ψ ⊆ EvS
Heqi': i' = (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (ex , ψ))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (ex , ψ))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (ex , ψ)) then false else true, FP := ∅)
pile: ProofInfoLe i' gpi
IH: Γ ⊢i ψ^[[evar:E↦p]]^{evar:0↦x} <---> ψ^[[evar:E↦q]]^{evar:0↦x} using gpi
IH1: Γ ⊢i ψ^[[evar:E↦p]]^{evar:0↦x} ---> ψ^[[evar:E↦q]]^{evar:0↦x} using gpi
IH2: Γ ⊢i ψ^[[evar:E↦q]]^{evar:0↦x} ---> ψ^[[evar:E↦p]]^{evar:0↦x} using gpi
x ∉ free_evars (ex , ψ^[[evar:E↦p]])
Σ: Signature
Γ: Theory
E: evar
ψ: Pattern
x: evar
p, q: Pattern
gpi: ProofInfo
exdepth, mudepth: nat
EvS: EVarSet
SvS: SVarSet
HxneqE: x ≠ E
wfψ: well_formed (ex , ψ)
wfp: well_formed p
wfq: well_formed q
Heqx: x = evar_fresh (elements EvS)
HEinψ: E ∈ free_evars ψ
i': ProofInfo
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
ψ_sub_EvS: free_evars ψ ⊆ EvS
Heqi': i' = (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (ex , ψ))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (ex , ψ))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (ex , ψ)) then false else true, FP := ∅)
pile: ProofInfoLe i' gpi
IH: Γ ⊢i ψ^[[evar:E↦p]]^{evar:0↦x} <---> ψ^[[evar:E↦q]]^{evar:0↦x} using gpi
IH1: Γ ⊢i ψ^[[evar:E↦p]]^{evar:0↦x} ---> ψ^[[evar:E↦q]]^{evar:0↦x} using gpi
IH2: Γ ⊢i ψ^[[evar:E↦q]]^{evar:0↦x} ---> ψ^[[evar:E↦p]]^{evar:0↦x} using gpi

ProofInfoLe (ExGen := {[x]}, SVSubst := ∅, KT := false, FP := ∅) gpi
abstract ( subst i'; eapply pile_trans; [|apply pile]; apply pile_evs_svs_kt; [( simpl; rewrite medoeip_S_in; [assumption|]; simpl; unfold evar_fresh_s; rewrite -Heqx; clear; set_solver ) |(clear; set_solver) |(reflexivity)|(clear; set_solver) ]).
Σ: Signature
Γ: Theory
E: evar
ψ: Pattern
x: evar
p, q: Pattern
gpi: ProofInfo
exdepth, mudepth: nat
EvS: EVarSet
SvS: SVarSet
HxneqE: x ≠ E
wfψ: well_formed (ex , ψ)
wfp: well_formed p
wfq: well_formed q
Heqx: x = evar_fresh (elements EvS)
HEinψ: E ∈ free_evars ψ
i': ProofInfo
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
ψ_sub_EvS: free_evars ψ ⊆ EvS
Heqi': i' = (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (ex , ψ))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (ex , ψ))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (ex , ψ)) then false else true, FP := ∅)
pile: ProofInfoLe i' gpi
IH: Γ ⊢i ψ^[[evar:E↦p]]^{evar:0↦x} <---> ψ^[[evar:E↦q]]^{evar:0↦x} using gpi
IH1: Γ ⊢i ψ^[[evar:E↦p]]^{evar:0↦x} ---> ψ^[[evar:E↦q]]^{evar:0↦x} using gpi
IH2: Γ ⊢i ψ^[[evar:E↦q]]^{evar:0↦x} ---> ψ^[[evar:E↦p]]^{evar:0↦x} using gpi

x ∉ free_evars (ex , ψ^[[evar:E↦p]])
Σ: Signature
Γ: Theory
E: evar
ψ: Pattern
x: evar
p, q: Pattern
gpi: ProofInfo
exdepth, mudepth: nat
EvS: EVarSet
SvS: SVarSet
HxneqE: x ≠ E
wfψ: well_formed (ex , ψ)
wfp: well_formed p
wfq: well_formed q
Heqx: x = evar_fresh (elements EvS)
HEinψ: E ∈ free_evars ψ
i': ProofInfo
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
ψ_sub_EvS: free_evars ψ ⊆ EvS
Heqi': i' = (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (ex , ψ))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (ex , ψ))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (ex , ψ)) then false else true, FP := ∅)
pile: ProofInfoLe i' gpi
IH: Γ ⊢i ψ^[[evar:E↦p]]^{evar:0↦x} <---> ψ^[[evar:E↦q]]^{evar:0↦x} using gpi
IH1: Γ ⊢i ψ^[[evar:E↦p]]^{evar:0↦x} ---> ψ^[[evar:E↦q]]^{evar:0↦x} using gpi
IH2: Γ ⊢i ψ^[[evar:E↦q]]^{evar:0↦x} ---> ψ^[[evar:E↦p]]^{evar:0↦x} using gpi

x ∉ free_evars (ex , ψ^[[evar:E↦p]])
abstract ( simpl; pose proof (Htmp1 := set_evar_fresh_is_fresh' EvS); pose proof (Htmp := free_evars_free_evar_subst ψ p E); set_solver ). }
Σ: Signature
Γ: Theory
E: evar
ψ: Pattern
x: evar
p, q: Pattern
gpi: ProofInfo
exdepth, mudepth: nat
EvS: EVarSet
SvS: SVarSet
HxneqE: x ≠ E
wfψ: well_formed (ex , ψ)
wfp: well_formed p
wfq: well_formed q
Heqx: x = evar_fresh (elements EvS)
HEinψ: E ∈ free_evars ψ
i': ProofInfo
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
ψ_sub_EvS: free_evars ψ ⊆ EvS
Heqi': i' = (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (ex , ψ))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (ex , ψ))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (ex , ψ)) then false else true, FP := ∅)
pile: ProofInfoLe i' gpi
IH: Γ ⊢i ψ^[[evar:E↦p]]^{evar:0↦x} <---> ψ^[[evar:E↦q]]^{evar:0↦x} using gpi
IH1: Γ ⊢i ψ^[[evar:E↦p]]^{evar:0↦x} ---> ψ^[[evar:E↦q]]^{evar:0↦x} using gpi
IH2: Γ ⊢i ψ^[[evar:E↦q]]^{evar:0↦x} ---> ψ^[[evar:E↦p]]^{evar:0↦x} using gpi

x ∉ free_evars ψ^[[evar:E↦q]]
Σ: Signature
Γ: Theory
E: evar
ψ: Pattern
x: evar
p, q: Pattern
gpi: ProofInfo
exdepth, mudepth: nat
EvS: EVarSet
SvS: SVarSet
HxneqE: x ≠ E
wfψ: well_formed (ex , ψ)
wfp: well_formed p
wfq: well_formed q
Heqx: x = evar_fresh (elements EvS)
HEinψ: E ∈ free_evars ψ
i': ProofInfo
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
ψ_sub_EvS: free_evars ψ ⊆ EvS
Heqi': i' = (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (ex , ψ))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (ex , ψ))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (ex , ψ)) then false else true, FP := ∅)
pile: ProofInfoLe i' gpi
IH: Γ ⊢i ψ^[[evar:E↦p]]^{evar:0↦x} <---> ψ^[[evar:E↦q]]^{evar:0↦x} using gpi
IH1: Γ ⊢i ψ^[[evar:E↦p]]^{evar:0↦x} ---> ψ^[[evar:E↦q]]^{evar:0↦x} using gpi
IH2: Γ ⊢i ψ^[[evar:E↦q]]^{evar:0↦x} ---> ψ^[[evar:E↦p]]^{evar:0↦x} using gpi
well_formed_closed_ex_aux ψ^[[evar:E↦q]] 1
Σ: Signature
Γ: Theory
E: evar
ψ: Pattern
x: evar
p, q: Pattern
gpi: ProofInfo
exdepth, mudepth: nat
EvS: EVarSet
SvS: SVarSet
HxneqE: x ≠ E
wfψ: well_formed (ex , ψ)
wfp: well_formed p
wfq: well_formed q
Heqx: x = evar_fresh (elements EvS)
HEinψ: E ∈ free_evars ψ
i': ProofInfo
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
ψ_sub_EvS: free_evars ψ ⊆ EvS
Heqi': i' = (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (ex , ψ))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (ex , ψ))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (ex , ψ)) then false else true, FP := ∅)
pile: ProofInfoLe i' gpi
IH: Γ ⊢i ψ^[[evar:E↦p]]^{evar:0↦x} <---> ψ^[[evar:E↦q]]^{evar:0↦x} using gpi
IH1: Γ ⊢i ψ^[[evar:E↦p]]^{evar:0↦x} ---> ψ^[[evar:E↦q]]^{evar:0↦x} using gpi
IH2: Γ ⊢i ψ^[[evar:E↦q]]^{evar:0↦x} ---> ψ^[[evar:E↦p]]^{evar:0↦x} using gpi

x ∉ free_evars ψ^[[evar:E↦q]]
abstract ( simpl; pose proof (Htmp1 := set_evar_fresh_is_fresh' EvS); pose proof (Htmp := free_evars_free_evar_subst ψ q E); set_solver ).
Σ: Signature
Γ: Theory
E: evar
ψ: Pattern
x: evar
p, q: Pattern
gpi: ProofInfo
exdepth, mudepth: nat
EvS: EVarSet
SvS: SVarSet
HxneqE: x ≠ E
wfψ: well_formed (ex , ψ)
wfp: well_formed p
wfq: well_formed q
Heqx: x = evar_fresh (elements EvS)
HEinψ: E ∈ free_evars ψ
i': ProofInfo
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
ψ_sub_EvS: free_evars ψ ⊆ EvS
Heqi': i' = (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (ex , ψ))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (ex , ψ))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (ex , ψ)) then false else true, FP := ∅)
pile: ProofInfoLe i' gpi
IH: Γ ⊢i ψ^[[evar:E↦p]]^{evar:0↦x} <---> ψ^[[evar:E↦q]]^{evar:0↦x} using gpi
IH1: Γ ⊢i ψ^[[evar:E↦p]]^{evar:0↦x} ---> ψ^[[evar:E↦q]]^{evar:0↦x} using gpi
IH2: Γ ⊢i ψ^[[evar:E↦q]]^{evar:0↦x} ---> ψ^[[evar:E↦p]]^{evar:0↦x} using gpi

well_formed_closed_ex_aux ψ^[[evar:E↦q]] 1
Σ: Signature
Γ: Theory
E: evar
ψ: Pattern
x: evar
p, q: Pattern
gpi: ProofInfo
exdepth, mudepth: nat
EvS: EVarSet
SvS: SVarSet
HxneqE: x ≠ E
wfψ: well_formed (ex , ψ)
wfp: well_formed p
wfq: well_formed q
Heqx: x = evar_fresh (elements EvS)
HEinψ: E ∈ free_evars ψ
i': ProofInfo
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
ψ_sub_EvS: free_evars ψ ⊆ EvS
Heqi': i' = (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (ex , ψ))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (ex , ψ))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (ex , ψ)) then false else true, FP := ∅)
pile: ProofInfoLe i' gpi
IH: Γ ⊢i ψ^[[evar:E↦p]]^{evar:0↦x} <---> ψ^[[evar:E↦q]]^{evar:0↦x} using gpi
IH1: Γ ⊢i ψ^[[evar:E↦p]]^{evar:0↦x} ---> ψ^[[evar:E↦q]]^{evar:0↦x} using gpi
IH2: Γ ⊢i ψ^[[evar:E↦q]]^{evar:0↦x} ---> ψ^[[evar:E↦p]]^{evar:0↦x} using gpi

well_formed_closed_ex_aux ψ^[[evar:E↦q]] 1
Falling back on (is_true (well_formed_closed_ex_aux ψ^[[evar:E↦q]] 1))
} } Defined.
Σ: Signature
EvS: EVarSet
SvS: SVarSet
E: evar
ψ1, ψ2, p, q: Pattern
wfψ: well_formed (ψ1 $ ψ2) = true
wfp: well_formed p = true
wfq: well_formed q = true
frames_on_the_way_to_hole': EVarSet → SVarSet → evar x2 x3 x4 : Pattern, well_formed x2 = true → well_formed x3 = true → well_formed x4 = true → size' x2 < size' (ψ1 $ ψ2) → mapset.mapset' (gmap wfPattern ())

well_formed ψ1^[[evar:E↦p]] = true
Σ: Signature
EvS: EVarSet
SvS: SVarSet
E: evar
ψ1, ψ2, p, q: Pattern
wfψ: well_formed (ψ1 $ ψ2) = true
wfp: well_formed p = true
wfq: well_formed q = true
frames_on_the_way_to_hole': EVarSet → SVarSet → evar x2 x3 x4 : Pattern, well_formed x2 = true → well_formed x3 = true → well_formed x4 = true → size' x2 < size' (ψ1 $ ψ2) → mapset.mapset' (gmap wfPattern ())
well_formed ψ2^[[evar:E↦p]] = true
Σ: Signature
EvS: EVarSet
SvS: SVarSet
E: evar
ψ1, ψ2, p, q: Pattern
wfψ: well_formed (ψ1 $ ψ2) = true
wfp: well_formed p = true
wfq: well_formed q = true
frames_on_the_way_to_hole': EVarSet → SVarSet → evar x2 x3 x4 : Pattern, well_formed x2 = true → well_formed x3 = true → well_formed x4 = true → size' x2 < size' (ψ1 $ ψ2) → mapset.mapset' (gmap wfPattern ())
well_formed ψ1^[[evar:E↦q]] = true
Σ: Signature
EvS: EVarSet
SvS: SVarSet
E: evar
ψ1, ψ2, p, q: Pattern
wfψ: well_formed (ψ1 $ ψ2) = true
wfp: well_formed p = true
wfq: well_formed q = true
frames_on_the_way_to_hole': EVarSet → SVarSet → evar x2 x3 x4 : Pattern, well_formed x2 = true → well_formed x3 = true → well_formed x4 = true → size' x2 < size' (ψ1 $ ψ2) → mapset.mapset' (gmap wfPattern ())
well_formed ψ2^[[evar:E↦q]] = true
Σ: Signature
EvS: EVarSet
SvS: SVarSet
E: evar
ψ1, ψ2, p, q: Pattern
wfψ: well_formed (ψ1 $ ψ2) = true
wfp: well_formed p = true
wfq: well_formed q = true
frames_on_the_way_to_hole': EVarSet → SVarSet → evar x2 x3 x4 : Pattern, well_formed x2 = true → well_formed x3 = true → well_formed x4 = true → size' x2 < size' (ψ1 $ ψ2) → mapset.mapset' (gmap wfPattern ())
well_formed ψ1 = true
Σ: Signature
EvS: EVarSet
SvS: SVarSet
E: evar
ψ1, ψ2, p, q: Pattern
wfψ: well_formed (ψ1 $ ψ2) = true
wfp: well_formed p = true
wfq: well_formed q = true
frames_on_the_way_to_hole': EVarSet → SVarSet → evar x2 x3 x4 : Pattern, well_formed x2 = true → well_formed x3 = true → well_formed x4 = true → size' x2 < size' (ψ1 $ ψ2) → mapset.mapset' (gmap wfPattern ())
well_formed p = true
Σ: Signature
EvS: EVarSet
SvS: SVarSet
E: evar
ψ1, ψ2, p, q: Pattern
wfψ: well_formed (ψ1 $ ψ2) = true
wfp: well_formed p = true
wfq: well_formed q = true
frames_on_the_way_to_hole': EVarSet → SVarSet → evar x2 x3 x4 : Pattern, well_formed x2 = true → well_formed x3 = true → well_formed x4 = true → size' x2 < size' (ψ1 $ ψ2) → mapset.mapset' (gmap wfPattern ())
well_formed q = true
Σ: Signature
EvS: EVarSet
SvS: SVarSet
E: evar
ψ1, ψ2, p, q: Pattern
wfψ: well_formed (ψ1 $ ψ2) = true
wfp: well_formed p = true
wfq: well_formed q = true
frames_on_the_way_to_hole': EVarSet → SVarSet → evar x2 x3 x4 : Pattern, well_formed x2 = true → well_formed x3 = true → well_formed x4 = true → size' x2 < size' (ψ1 $ ψ2) → mapset.mapset' (gmap wfPattern ())
size' ψ1 < size' (ψ1 $ ψ2)
Σ: Signature
EvS: EVarSet
SvS: SVarSet
E: evar
ψ1, ψ2, p, q: Pattern
wfψ: well_formed (ψ1 $ ψ2) = true
wfp: well_formed p = true
wfq: well_formed q = true
frames_on_the_way_to_hole': EVarSet → SVarSet → evar x2 x3 x4 : Pattern, well_formed x2 = true → well_formed x3 = true → well_formed x4 = true → size' x2 < size' (ψ1 $ ψ2) → mapset.mapset' (gmap wfPattern ())
well_formed ψ2 = true
Σ: Signature
EvS: EVarSet
SvS: SVarSet
E: evar
ψ1, ψ2, p, q: Pattern
wfψ: well_formed (ψ1 $ ψ2) = true
wfp: well_formed p = true
wfq: well_formed q = true
frames_on_the_way_to_hole': EVarSet → SVarSet → evar x2 x3 x4 : Pattern, well_formed x2 = true → well_formed x3 = true → well_formed x4 = true → size' x2 < size' (ψ1 $ ψ2) → mapset.mapset' (gmap wfPattern ())
well_formed p = true
Σ: Signature
EvS: EVarSet
SvS: SVarSet
E: evar
ψ1, ψ2, p, q: Pattern
wfψ: well_formed (ψ1 $ ψ2) = true
wfp: well_formed p = true
wfq: well_formed q = true
frames_on_the_way_to_hole': EVarSet → SVarSet → evar x2 x3 x4 : Pattern, well_formed x2 = true → well_formed x3 = true → well_formed x4 = true → size' x2 < size' (ψ1 $ ψ2) → mapset.mapset' (gmap wfPattern ())
well_formed q = true
Σ: Signature
EvS: EVarSet
SvS: SVarSet
E: evar
ψ1, ψ2, p, q: Pattern
wfψ: well_formed (ψ1 $ ψ2) = true
wfp: well_formed p = true
wfq: well_formed q = true
frames_on_the_way_to_hole': EVarSet → SVarSet → evar x2 x3 x4 : Pattern, well_formed x2 = true → well_formed x3 = true → well_formed x4 = true → size' x2 < size' (ψ1 $ ψ2) → mapset.mapset' (gmap wfPattern ())
size' ψ2 < size' (ψ1 $ ψ2)
Σ: Signature
EvS: EVarSet
SvS: SVarSet
E: evar
ψ1, ψ2, p, q: Pattern
wfψ: well_formed (ψ1 ---> ψ2) = true
wfp: well_formed p = true
wfq: well_formed q = true
frames_on_the_way_to_hole': EVarSet → SVarSet → evar x2 x3 x4 : Pattern, well_formed x2 = true → well_formed x3 = true → well_formed x4 = true → size' x2 < size' (ψ1 ---> ψ2) → mapset.mapset' (gmap wfPattern ())
well_formed ψ1 = true
Σ: Signature
EvS: EVarSet
SvS: SVarSet
E: evar
ψ1, ψ2, p, q: Pattern
wfψ: well_formed (ψ1 ---> ψ2) = true
wfp: well_formed p = true
wfq: well_formed q = true
frames_on_the_way_to_hole': EVarSet → SVarSet → evar x2 x3 x4 : Pattern, well_formed x2 = true → well_formed x3 = true → well_formed x4 = true → size' x2 < size' (ψ1 ---> ψ2) → mapset.mapset' (gmap wfPattern ())
well_formed p = true
Σ: Signature
EvS: EVarSet
SvS: SVarSet
E: evar
ψ1, ψ2, p, q: Pattern
wfψ: well_formed (ψ1 ---> ψ2) = true
wfp: well_formed p = true
wfq: well_formed q = true
frames_on_the_way_to_hole': EVarSet → SVarSet → evar x2 x3 x4 : Pattern, well_formed x2 = true → well_formed x3 = true → well_formed x4 = true → size' x2 < size' (ψ1 ---> ψ2) → mapset.mapset' (gmap wfPattern ())
well_formed q = true
Σ: Signature
EvS: EVarSet
SvS: SVarSet
E: evar
ψ1, ψ2, p, q: Pattern
wfψ: well_formed (ψ1 ---> ψ2) = true
wfp: well_formed p = true
wfq: well_formed q = true
frames_on_the_way_to_hole': EVarSet → SVarSet → evar x2 x3 x4 : Pattern, well_formed x2 = true → well_formed x3 = true → well_formed x4 = true → size' x2 < size' (ψ1 ---> ψ2) → mapset.mapset' (gmap wfPattern ())
size' ψ1 < size' (ψ1 ---> ψ2)
Σ: Signature
EvS: EVarSet
SvS: SVarSet
E: evar
ψ1, ψ2, p, q: Pattern
wfψ: well_formed (ψ1 ---> ψ2) = true
wfp: well_formed p = true
wfq: well_formed q = true
frames_on_the_way_to_hole': EVarSet → SVarSet → evar x2 x3 x4 : Pattern, well_formed x2 = true → well_formed x3 = true → well_formed x4 = true → size' x2 < size' (ψ1 ---> ψ2) → mapset.mapset' (gmap wfPattern ())
well_formed ψ2 = true
Σ: Signature
EvS: EVarSet
SvS: SVarSet
E: evar
ψ1, ψ2, p, q: Pattern
wfψ: well_formed (ψ1 ---> ψ2) = true
wfp: well_formed p = true
wfq: well_formed q = true
frames_on_the_way_to_hole': EVarSet → SVarSet → evar x2 x3 x4 : Pattern, well_formed x2 = true → well_formed x3 = true → well_formed x4 = true → size' x2 < size' (ψ1 ---> ψ2) → mapset.mapset' (gmap wfPattern ())
well_formed p = true
Σ: Signature
EvS: EVarSet
SvS: SVarSet
E: evar
ψ1, ψ2, p, q: Pattern
wfψ: well_formed (ψ1 ---> ψ2) = true
wfp: well_formed p = true
wfq: well_formed q = true
frames_on_the_way_to_hole': EVarSet → SVarSet → evar x2 x3 x4 : Pattern, well_formed x2 = true → well_formed x3 = true → well_formed x4 = true → size' x2 < size' (ψ1 ---> ψ2) → mapset.mapset' (gmap wfPattern ())
well_formed q = true
Σ: Signature
EvS: EVarSet
SvS: SVarSet
E: evar
ψ1, ψ2, p, q: Pattern
wfψ: well_formed (ψ1 ---> ψ2) = true
wfp: well_formed p = true
wfq: well_formed q = true
frames_on_the_way_to_hole': EVarSet → SVarSet → evar x2 x3 x4 : Pattern, well_formed x2 = true → well_formed x3 = true → well_formed x4 = true → size' x2 < size' (ψ1 ---> ψ2) → mapset.mapset' (gmap wfPattern ())
size' ψ2 < size' (ψ1 ---> ψ2)
Σ: Signature
EvS: EVarSet
SvS: SVarSet
E: evar
ψ', p, q: Pattern
wfψ: well_formed (ex , ψ') = true
wfp: well_formed p = true
wfq: well_formed q = true
frames_on_the_way_to_hole': EVarSet → SVarSet → evar x2 x3 x4 : Pattern, well_formed x2 = true → well_formed x3 = true → well_formed x4 = true → size' x2 < size' (ex , ψ') → mapset.mapset' (gmap wfPattern ())
well_formed ψ'^{evar:0↦evar_fresh (elements EvS)} = true
Σ: Signature
EvS: EVarSet
SvS: SVarSet
E: evar
ψ', p, q: Pattern
wfψ: well_formed (ex , ψ') = true
wfp: well_formed p = true
wfq: well_formed q = true
frames_on_the_way_to_hole': EVarSet → SVarSet → evar x2 x3 x4 : Pattern, well_formed x2 = true → well_formed x3 = true → well_formed x4 = true → size' x2 < size' (ex , ψ') → mapset.mapset' (gmap wfPattern ())
well_formed p = true
Σ: Signature
EvS: EVarSet
SvS: SVarSet
E: evar
ψ', p, q: Pattern
wfψ: well_formed (ex , ψ') = true
wfp: well_formed p = true
wfq: well_formed q = true
frames_on_the_way_to_hole': EVarSet → SVarSet → evar x2 x3 x4 : Pattern, well_formed x2 = true → well_formed x3 = true → well_formed x4 = true → size' x2 < size' (ex , ψ') → mapset.mapset' (gmap wfPattern ())
well_formed q = true
Σ: Signature
EvS: EVarSet
SvS: SVarSet
E: evar
ψ', p, q: Pattern
wfψ: well_formed (ex , ψ') = true
wfp: well_formed p = true
wfq: well_formed q = true
frames_on_the_way_to_hole': EVarSet → SVarSet → evar x2 x3 x4 : Pattern, well_formed x2 = true → well_formed x3 = true → well_formed x4 = true → size' x2 < size' (ex , ψ') → mapset.mapset' (gmap wfPattern ())
size' ψ'^{evar:0↦evar_fresh (elements EvS)} < size' (ex , ψ')
Σ: Signature
EvS: EVarSet
SvS: SVarSet
E: evar
ψ', p, q: Pattern
wfψ: well_formed (mu , ψ') = true
wfp: well_formed p = true
wfq: well_formed q = true
frames_on_the_way_to_hole': EVarSet → SVarSet → evar x2 x3 x4 : Pattern, well_formed x2 = true → well_formed x3 = true → well_formed x4 = true → size' x2 < size' (mu , ψ') → mapset.mapset' (gmap wfPattern ())
well_formed ψ'^{svar:0↦svar_fresh (elements SvS)} = true
Σ: Signature
EvS: EVarSet
SvS: SVarSet
E: evar
ψ', p, q: Pattern
wfψ: well_formed (mu , ψ') = true
wfp: well_formed p = true
wfq: well_formed q = true
frames_on_the_way_to_hole': EVarSet → SVarSet → evar x2 x3 x4 : Pattern, well_formed x2 = true → well_formed x3 = true → well_formed x4 = true → size' x2 < size' (mu , ψ') → mapset.mapset' (gmap wfPattern ())
well_formed p = true
Σ: Signature
EvS: EVarSet
SvS: SVarSet
E: evar
ψ', p, q: Pattern
wfψ: well_formed (mu , ψ') = true
wfp: well_formed p = true
wfq: well_formed q = true
frames_on_the_way_to_hole': EVarSet → SVarSet → evar x2 x3 x4 : Pattern, well_formed x2 = true → well_formed x3 = true → well_formed x4 = true → size' x2 < size' (mu , ψ') → mapset.mapset' (gmap wfPattern ())
well_formed q = true
Σ: Signature
EvS: EVarSet
SvS: SVarSet
E: evar
ψ', p, q: Pattern
wfψ: well_formed (mu , ψ') = true
wfp: well_formed p = true
wfq: well_formed q = true
frames_on_the_way_to_hole': EVarSet → SVarSet → evar x2 x3 x4 : Pattern, well_formed x2 = true → well_formed x3 = true → well_formed x4 = true → size' x2 < size' (mu , ψ') → mapset.mapset' (gmap wfPattern ())
size' ψ'^{svar:0↦svar_fresh (elements SvS)} < size' (mu , ψ')
Σ: Signature
EvS: EVarSet
SvS: SVarSet
E: evar
ψ1, ψ2, p, q: Pattern
wfψ: well_formed (ψ1 $ ψ2) = true
wfp: well_formed p = true
wfq: well_formed q = true
frames_on_the_way_to_hole': EVarSet → SVarSet → evar x2 x3 x4 : Pattern, well_formed x2 = true → well_formed x3 = true → well_formed x4 = true → size' x2 < size' (ψ1 $ ψ2) → mapset.mapset' (gmap wfPattern ())

well_formed ψ1^[[evar:E↦p]] = true
Σ: Signature
EvS: EVarSet
SvS: SVarSet
E: evar
ψ1, ψ2, p, q: Pattern
wfψ: well_formed (ψ1 $ ψ2) = true
wfp: well_formed p = true
wfq: well_formed q = true
frames_on_the_way_to_hole': EVarSet → SVarSet → evar x2 x3 x4 : Pattern, well_formed x2 = true → well_formed x3 = true → well_formed x4 = true → size' x2 < size' (ψ1 $ ψ2) → mapset.mapset' (gmap wfPattern ())
well_formed ψ2^[[evar:E↦p]] = true
Σ: Signature
EvS: EVarSet
SvS: SVarSet
E: evar
ψ1, ψ2, p, q: Pattern
wfψ: well_formed (ψ1 $ ψ2) = true
wfp: well_formed p = true
wfq: well_formed q = true
frames_on_the_way_to_hole': EVarSet → SVarSet → evar x2 x3 x4 : Pattern, well_formed x2 = true → well_formed x3 = true → well_formed x4 = true → size' x2 < size' (ψ1 $ ψ2) → mapset.mapset' (gmap wfPattern ())
well_formed ψ1^[[evar:E↦q]] = true
Σ: Signature
EvS: EVarSet
SvS: SVarSet
E: evar
ψ1, ψ2, p, q: Pattern
wfψ: well_formed (ψ1 $ ψ2) = true
wfp: well_formed p = true
wfq: well_formed q = true
frames_on_the_way_to_hole': EVarSet → SVarSet → evar x2 x3 x4 : Pattern, well_formed x2 = true → well_formed x3 = true → well_formed x4 = true → size' x2 < size' (ψ1 $ ψ2) → mapset.mapset' (gmap wfPattern ())
well_formed ψ2^[[evar:E↦q]] = true
Σ: Signature
EvS: EVarSet
SvS: SVarSet
E: evar
ψ1, ψ2, p, q: Pattern
wfψ: well_formed (ψ1 $ ψ2) = true
wfp: well_formed p = true
wfq: well_formed q = true
frames_on_the_way_to_hole': EVarSet → SVarSet → evar x2 x3 x4 : Pattern, well_formed x2 = true → well_formed x3 = true → well_formed x4 = true → size' x2 < size' (ψ1 $ ψ2) → mapset.mapset' (gmap wfPattern ())
well_formed ψ1 = true
Σ: Signature
EvS: EVarSet
SvS: SVarSet
E: evar
ψ1, ψ2, p, q: Pattern
wfψ: well_formed (ψ1 $ ψ2) = true
wfp: well_formed p = true
wfq: well_formed q = true
frames_on_the_way_to_hole': EVarSet → SVarSet → evar x2 x3 x4 : Pattern, well_formed x2 = true → well_formed x3 = true → well_formed x4 = true → size' x2 < size' (ψ1 $ ψ2) → mapset.mapset' (gmap wfPattern ())
well_formed p = true
Σ: Signature
EvS: EVarSet
SvS: SVarSet
E: evar
ψ1, ψ2, p, q: Pattern
wfψ: well_formed (ψ1 $ ψ2) = true
wfp: well_formed p = true
wfq: well_formed q = true
frames_on_the_way_to_hole': EVarSet → SVarSet → evar x2 x3 x4 : Pattern, well_formed x2 = true → well_formed x3 = true → well_formed x4 = true → size' x2 < size' (ψ1 $ ψ2) → mapset.mapset' (gmap wfPattern ())
well_formed q = true
Σ: Signature
EvS: EVarSet
SvS: SVarSet
E: evar
ψ1, ψ2, p, q: Pattern
wfψ: well_formed (ψ1 $ ψ2) = true
wfp: well_formed p = true
wfq: well_formed q = true
frames_on_the_way_to_hole': EVarSet → SVarSet → evar x2 x3 x4 : Pattern, well_formed x2 = true → well_formed x3 = true → well_formed x4 = true → size' x2 < size' (ψ1 $ ψ2) → mapset.mapset' (gmap wfPattern ())
size' ψ1 < size' (ψ1 $ ψ2)
Σ: Signature
EvS: EVarSet
SvS: SVarSet
E: evar
ψ1, ψ2, p, q: Pattern
wfψ: well_formed (ψ1 $ ψ2) = true
wfp: well_formed p = true
wfq: well_formed q = true
frames_on_the_way_to_hole': EVarSet → SVarSet → evar x2 x3 x4 : Pattern, well_formed x2 = true → well_formed x3 = true → well_formed x4 = true → size' x2 < size' (ψ1 $ ψ2) → mapset.mapset' (gmap wfPattern ())
well_formed ψ2 = true
Σ: Signature
EvS: EVarSet
SvS: SVarSet
E: evar
ψ1, ψ2, p, q: Pattern
wfψ: well_formed (ψ1 $ ψ2) = true
wfp: well_formed p = true
wfq: well_formed q = true
frames_on_the_way_to_hole': EVarSet → SVarSet → evar x2 x3 x4 : Pattern, well_formed x2 = true → well_formed x3 = true → well_formed x4 = true → size' x2 < size' (ψ1 $ ψ2) → mapset.mapset' (gmap wfPattern ())
well_formed p = true
Σ: Signature
EvS: EVarSet
SvS: SVarSet
E: evar
ψ1, ψ2, p, q: Pattern
wfψ: well_formed (ψ1 $ ψ2) = true
wfp: well_formed p = true
wfq: well_formed q = true
frames_on_the_way_to_hole': EVarSet → SVarSet → evar x2 x3 x4 : Pattern, well_formed x2 = true → well_formed x3 = true → well_formed x4 = true → size' x2 < size' (ψ1 $ ψ2) → mapset.mapset' (gmap wfPattern ())
well_formed q = true
Σ: Signature
EvS: EVarSet
SvS: SVarSet
E: evar
ψ1, ψ2, p, q: Pattern
wfψ: well_formed (ψ1 $ ψ2) = true
wfp: well_formed p = true
wfq: well_formed q = true
frames_on_the_way_to_hole': EVarSet → SVarSet → evar x2 x3 x4 : Pattern, well_formed x2 = true → well_formed x3 = true → well_formed x4 = true → size' x2 < size' (ψ1 $ ψ2) → mapset.mapset' (gmap wfPattern ())
size' ψ2 < size' (ψ1 $ ψ2)
Σ: Signature
EvS: EVarSet
SvS: SVarSet
E: evar
ψ1, ψ2, p, q: Pattern
wfψ: well_formed (ψ1 ---> ψ2) = true
wfp: well_formed p = true
wfq: well_formed q = true
frames_on_the_way_to_hole': EVarSet → SVarSet → evar x2 x3 x4 : Pattern, well_formed x2 = true → well_formed x3 = true → well_formed x4 = true → size' x2 < size' (ψ1 ---> ψ2) → mapset.mapset' (gmap wfPattern ())
well_formed ψ1 = true
Σ: Signature
EvS: EVarSet
SvS: SVarSet
E: evar
ψ1, ψ2, p, q: Pattern
wfψ: well_formed (ψ1 ---> ψ2) = true
wfp: well_formed p = true
wfq: well_formed q = true
frames_on_the_way_to_hole': EVarSet → SVarSet → evar x2 x3 x4 : Pattern, well_formed x2 = true → well_formed x3 = true → well_formed x4 = true → size' x2 < size' (ψ1 ---> ψ2) → mapset.mapset' (gmap wfPattern ())
well_formed p = true
Σ: Signature
EvS: EVarSet
SvS: SVarSet
E: evar
ψ1, ψ2, p, q: Pattern
wfψ: well_formed (ψ1 ---> ψ2) = true
wfp: well_formed p = true
wfq: well_formed q = true
frames_on_the_way_to_hole': EVarSet → SVarSet → evar x2 x3 x4 : Pattern, well_formed x2 = true → well_formed x3 = true → well_formed x4 = true → size' x2 < size' (ψ1 ---> ψ2) → mapset.mapset' (gmap wfPattern ())
well_formed q = true
Σ: Signature
EvS: EVarSet
SvS: SVarSet
E: evar
ψ1, ψ2, p, q: Pattern
wfψ: well_formed (ψ1 ---> ψ2) = true
wfp: well_formed p = true
wfq: well_formed q = true
frames_on_the_way_to_hole': EVarSet → SVarSet → evar x2 x3 x4 : Pattern, well_formed x2 = true → well_formed x3 = true → well_formed x4 = true → size' x2 < size' (ψ1 ---> ψ2) → mapset.mapset' (gmap wfPattern ())
size' ψ1 < size' (ψ1 ---> ψ2)
Σ: Signature
EvS: EVarSet
SvS: SVarSet
E: evar
ψ1, ψ2, p, q: Pattern
wfψ: well_formed (ψ1 ---> ψ2) = true
wfp: well_formed p = true
wfq: well_formed q = true
frames_on_the_way_to_hole': EVarSet → SVarSet → evar x2 x3 x4 : Pattern, well_formed x2 = true → well_formed x3 = true → well_formed x4 = true → size' x2 < size' (ψ1 ---> ψ2) → mapset.mapset' (gmap wfPattern ())
well_formed ψ2 = true
Σ: Signature
EvS: EVarSet
SvS: SVarSet
E: evar
ψ1, ψ2, p, q: Pattern
wfψ: well_formed (ψ1 ---> ψ2) = true
wfp: well_formed p = true
wfq: well_formed q = true
frames_on_the_way_to_hole': EVarSet → SVarSet → evar x2 x3 x4 : Pattern, well_formed x2 = true → well_formed x3 = true → well_formed x4 = true → size' x2 < size' (ψ1 ---> ψ2) → mapset.mapset' (gmap wfPattern ())
well_formed p = true
Σ: Signature
EvS: EVarSet
SvS: SVarSet
E: evar
ψ1, ψ2, p, q: Pattern
wfψ: well_formed (ψ1 ---> ψ2) = true
wfp: well_formed p = true
wfq: well_formed q = true
frames_on_the_way_to_hole': EVarSet → SVarSet → evar x2 x3 x4 : Pattern, well_formed x2 = true → well_formed x3 = true → well_formed x4 = true → size' x2 < size' (ψ1 ---> ψ2) → mapset.mapset' (gmap wfPattern ())
well_formed q = true
Σ: Signature
EvS: EVarSet
SvS: SVarSet
E: evar
ψ1, ψ2, p, q: Pattern
wfψ: well_formed (ψ1 ---> ψ2) = true
wfp: well_formed p = true
wfq: well_formed q = true
frames_on_the_way_to_hole': EVarSet → SVarSet → evar x2 x3 x4 : Pattern, well_formed x2 = true → well_formed x3 = true → well_formed x4 = true → size' x2 < size' (ψ1 ---> ψ2) → mapset.mapset' (gmap wfPattern ())
size' ψ2 < size' (ψ1 ---> ψ2)
Σ: Signature
EvS: EVarSet
SvS: SVarSet
E: evar
ψ', p, q: Pattern
wfψ: well_formed (ex , ψ') = true
wfp: well_formed p = true
wfq: well_formed q = true
frames_on_the_way_to_hole': EVarSet → SVarSet → evar x2 x3 x4 : Pattern, well_formed x2 = true → well_formed x3 = true → well_formed x4 = true → size' x2 < size' (ex , ψ') → mapset.mapset' (gmap wfPattern ())
well_formed ψ'^{evar:0↦evar_fresh (elements EvS)} = true
Σ: Signature
EvS: EVarSet
SvS: SVarSet
E: evar
ψ', p, q: Pattern
wfψ: well_formed (ex , ψ') = true
wfp: well_formed p = true
wfq: well_formed q = true
frames_on_the_way_to_hole': EVarSet → SVarSet → evar x2 x3 x4 : Pattern, well_formed x2 = true → well_formed x3 = true → well_formed x4 = true → size' x2 < size' (ex , ψ') → mapset.mapset' (gmap wfPattern ())
well_formed p = true
Σ: Signature
EvS: EVarSet
SvS: SVarSet
E: evar
ψ', p, q: Pattern
wfψ: well_formed (ex , ψ') = true
wfp: well_formed p = true
wfq: well_formed q = true
frames_on_the_way_to_hole': EVarSet → SVarSet → evar x2 x3 x4 : Pattern, well_formed x2 = true → well_formed x3 = true → well_formed x4 = true → size' x2 < size' (ex , ψ') → mapset.mapset' (gmap wfPattern ())
well_formed q = true
Σ: Signature
EvS: EVarSet
SvS: SVarSet
E: evar
ψ', p, q: Pattern
wfψ: well_formed (ex , ψ') = true
wfp: well_formed p = true
wfq: well_formed q = true
frames_on_the_way_to_hole': EVarSet → SVarSet → evar x2 x3 x4 : Pattern, well_formed x2 = true → well_formed x3 = true → well_formed x4 = true → size' x2 < size' (ex , ψ') → mapset.mapset' (gmap wfPattern ())
size' ψ'^{evar:0↦evar_fresh (elements EvS)} < size' (ex , ψ')
Σ: Signature
EvS: EVarSet
SvS: SVarSet
E: evar
ψ', p, q: Pattern
wfψ: well_formed (mu , ψ') = true
wfp: well_formed p = true
wfq: well_formed q = true
frames_on_the_way_to_hole': EVarSet → SVarSet → evar x2 x3 x4 : Pattern, well_formed x2 = true → well_formed x3 = true → well_formed x4 = true → size' x2 < size' (mu , ψ') → mapset.mapset' (gmap wfPattern ())
well_formed ψ'^{svar:0↦svar_fresh (elements SvS)} = true
Σ: Signature
EvS: EVarSet
SvS: SVarSet
E: evar
ψ', p, q: Pattern
wfψ: well_formed (mu , ψ') = true
wfp: well_formed p = true
wfq: well_formed q = true
frames_on_the_way_to_hole': EVarSet → SVarSet → evar x2 x3 x4 : Pattern, well_formed x2 = true → well_formed x3 = true → well_formed x4 = true → size' x2 < size' (mu , ψ') → mapset.mapset' (gmap wfPattern ())
well_formed p = true
Σ: Signature
EvS: EVarSet
SvS: SVarSet
E: evar
ψ', p, q: Pattern
wfψ: well_formed (mu , ψ') = true
wfp: well_formed p = true
wfq: well_formed q = true
frames_on_the_way_to_hole': EVarSet → SVarSet → evar x2 x3 x4 : Pattern, well_formed x2 = true → well_formed x3 = true → well_formed x4 = true → size' x2 < size' (mu , ψ') → mapset.mapset' (gmap wfPattern ())
well_formed q = true
Σ: Signature
EvS: EVarSet
SvS: SVarSet
E: evar
ψ', p, q: Pattern
wfψ: well_formed (mu , ψ') = true
wfp: well_formed p = true
wfq: well_formed q = true
frames_on_the_way_to_hole': EVarSet → SVarSet → evar x2 x3 x4 : Pattern, well_formed x2 = true → well_formed x3 = true → well_formed x4 = true → size' x2 < size' (mu , ψ') → mapset.mapset' (gmap wfPattern ())
size' ψ'^{svar:0↦svar_fresh (elements SvS)} < size' (mu , ψ')
Falling back on (well_formed_xy 0 0 ψ'^{evar:0↦evar_fresh (elements EvS)} = true)
Falling back on (well_formed_xy 0 0 ψ'^{svar:0↦svar_fresh (elements SvS)} = true)
Σ: Signature
EvS: EVarSet
SvS: SVarSet
E: evar
ψ1, ψ2, p, q: Pattern
wfψ: well_formed (ψ1 $ ψ2) = true
wfp: well_formed p = true
wfq: well_formed q = true
frames_on_the_way_to_hole': EVarSet → SVarSet → evar x2 x3 x4 : Pattern, well_formed x2 = true → well_formed x3 = true → well_formed x4 = true → size' x2 < size' (ψ1 $ ψ2) → mapset.mapset' (gmap wfPattern ())

size' ψ1 < size' (ψ1 $ ψ2)
Σ: Signature
EvS: EVarSet
SvS: SVarSet
E: evar
ψ1, ψ2, p, q: Pattern
wfψ: well_formed (ψ1 $ ψ2) = true
wfp: well_formed p = true
wfq: well_formed q = true
frames_on_the_way_to_hole': EVarSet → SVarSet → evar x2 x3 x4 : Pattern, well_formed x2 = true → well_formed x3 = true → well_formed x4 = true → size' x2 < size' (ψ1 $ ψ2) → mapset.mapset' (gmap wfPattern ())
size' ψ2 < size' (ψ1 $ ψ2)
Σ: Signature
EvS: EVarSet
SvS: SVarSet
E: evar
ψ1, ψ2, p, q: Pattern
wfψ: well_formed (ψ1 ---> ψ2) = true
wfp: well_formed p = true
wfq: well_formed q = true
frames_on_the_way_to_hole': EVarSet → SVarSet → evar x2 x3 x4 : Pattern, well_formed x2 = true → well_formed x3 = true → well_formed x4 = true → size' x2 < size' (ψ1 ---> ψ2) → mapset.mapset' (gmap wfPattern ())
size' ψ1 < size' (ψ1 ---> ψ2)
Σ: Signature
EvS: EVarSet
SvS: SVarSet
E: evar
ψ1, ψ2, p, q: Pattern
wfψ: well_formed (ψ1 ---> ψ2) = true
wfp: well_formed p = true
wfq: well_formed q = true
frames_on_the_way_to_hole': EVarSet → SVarSet → evar x2 x3 x4 : Pattern, well_formed x2 = true → well_formed x3 = true → well_formed x4 = true → size' x2 < size' (ψ1 ---> ψ2) → mapset.mapset' (gmap wfPattern ())
size' ψ2 < size' (ψ1 ---> ψ2)
Σ: Signature
EvS: EVarSet
SvS: SVarSet
E: evar
ψ', p, q: Pattern
wfψ: well_formed (ex , ψ') = true
wfp: well_formed p = true
wfq: well_formed q = true
frames_on_the_way_to_hole': EVarSet → SVarSet → evar x2 x3 x4 : Pattern, well_formed x2 = true → well_formed x3 = true → well_formed x4 = true → size' x2 < size' (ex , ψ') → mapset.mapset' (gmap wfPattern ())
size' ψ'^{evar:0↦evar_fresh (elements EvS)} < size' (ex , ψ')
Σ: Signature
EvS: EVarSet
SvS: SVarSet
E: evar
ψ', p, q: Pattern
wfψ: well_formed (mu , ψ') = true
wfp: well_formed p = true
wfq: well_formed q = true
frames_on_the_way_to_hole': EVarSet → SVarSet → evar x2 x3 x4 : Pattern, well_formed x2 = true → well_formed x3 = true → well_formed x4 = true → size' x2 < size' (mu , ψ') → mapset.mapset' (gmap wfPattern ())
size' ψ'^{svar:0↦svar_fresh (elements SvS)} < size' (mu , ψ')
Σ: Signature
EvS: EVarSet
SvS: SVarSet
E: evar
ψ1, ψ2, p, q: Pattern
wfψ: well_formed (ψ1 $ ψ2) = true
wfp: well_formed p = true
wfq: well_formed q = true
frames_on_the_way_to_hole': EVarSet → SVarSet → evar x2 x3 x4 : Pattern, well_formed x2 = true → well_formed x3 = true → well_formed x4 = true → size' x2 < S (size' ψ1 + size' ψ2) → mapset.mapset' (gmap wfPattern ())

size' ψ1 < S (size' ψ1 + size' ψ2)
Σ: Signature
EvS: EVarSet
SvS: SVarSet
E: evar
ψ1, ψ2, p, q: Pattern
wfψ: well_formed (ψ1 $ ψ2) = true
wfp: well_formed p = true
wfq: well_formed q = true
frames_on_the_way_to_hole': EVarSet → SVarSet → evar x2 x3 x4 : Pattern, well_formed x2 = true → well_formed x3 = true → well_formed x4 = true → size' x2 < S (size' ψ1 + size' ψ2) → mapset.mapset' (gmap wfPattern ())
size' ψ2 < S (size' ψ1 + size' ψ2)
Σ: Signature
EvS: EVarSet
SvS: SVarSet
E: evar
ψ1, ψ2, p, q: Pattern
wfψ: well_formed (ψ1 ---> ψ2) = true
wfp: well_formed p = true
wfq: well_formed q = true
frames_on_the_way_to_hole': EVarSet → SVarSet → evar x2 x3 x4 : Pattern, well_formed x2 = true → well_formed x3 = true → well_formed x4 = true → size' x2 < S (size' ψ1 + size' ψ2) → mapset.mapset' (gmap wfPattern ())
size' ψ1 < S (size' ψ1 + size' ψ2)
Σ: Signature
EvS: EVarSet
SvS: SVarSet
E: evar
ψ1, ψ2, p, q: Pattern
wfψ: well_formed (ψ1 ---> ψ2) = true
wfp: well_formed p = true
wfq: well_formed q = true
frames_on_the_way_to_hole': EVarSet → SVarSet → evar x2 x3 x4 : Pattern, well_formed x2 = true → well_formed x3 = true → well_formed x4 = true → size' x2 < S (size' ψ1 + size' ψ2) → mapset.mapset' (gmap wfPattern ())
size' ψ2 < S (size' ψ1 + size' ψ2)
Σ: Signature
EvS: EVarSet
SvS: SVarSet
E: evar
ψ', p, q: Pattern
wfψ: well_formed (ex , ψ') = true
wfp: well_formed p = true
wfq: well_formed q = true
frames_on_the_way_to_hole': EVarSet → SVarSet → evar x2 x3 x4 : Pattern, well_formed x2 = true → well_formed x3 = true → well_formed x4 = true → size' x2 < S (size' ψ') → mapset.mapset' (gmap wfPattern ())
size' ψ'^{evar:0↦evar_fresh (elements EvS)} < S (size' ψ')
Σ: Signature
EvS: EVarSet
SvS: SVarSet
E: evar
ψ', p, q: Pattern
wfψ: well_formed (mu , ψ') = true
wfp: well_formed p = true
wfq: well_formed q = true
frames_on_the_way_to_hole': EVarSet → SVarSet → evar x2 x3 x4 : Pattern, well_formed x2 = true → well_formed x3 = true → well_formed x4 = true → size' x2 < S (size' ψ') → mapset.mapset' (gmap wfPattern ())
size' ψ'^{svar:0↦svar_fresh (elements SvS)} < S (size' ψ')
Σ: Signature
EvS: EVarSet
SvS: SVarSet
E: evar
ψ', p, q: Pattern
wfψ: well_formed (ex , ψ') = true
wfp: well_formed p = true
wfq: well_formed q = true
frames_on_the_way_to_hole': EVarSet → SVarSet → evar x2 x3 x4 : Pattern, well_formed x2 = true → well_formed x3 = true → well_formed x4 = true → size' x2 < S (size' ψ') → mapset.mapset' (gmap wfPattern ())

size' ψ'^{evar:0↦evar_fresh (elements EvS)} < S (size' ψ')
Σ: Signature
EvS: EVarSet
SvS: SVarSet
E: evar
ψ', p, q: Pattern
wfψ: well_formed (mu , ψ') = true
wfp: well_formed p = true
wfq: well_formed q = true
frames_on_the_way_to_hole': EVarSet → SVarSet → evar x2 x3 x4 : Pattern, well_formed x2 = true → well_formed x3 = true → well_formed x4 = true → size' x2 < S (size' ψ') → mapset.mapset' (gmap wfPattern ())
size' ψ'^{svar:0↦svar_fresh (elements SvS)} < S (size' ψ')
Σ: Signature
EvS: EVarSet
SvS: SVarSet
E: evar
ψ', p, q: Pattern
wfψ: well_formed (ex , ψ') = true
wfp: well_formed p = true
wfq: well_formed q = true
frames_on_the_way_to_hole': EVarSet → SVarSet → evar x2 x3 x4 : Pattern, well_formed x2 = true → well_formed x3 = true → well_formed x4 = true → size' x2 < S (size' ψ') → mapset.mapset' (gmap wfPattern ())

size' ψ'^{evar:0↦evar_fresh (elements EvS)} < S (size' ψ')
Σ: Signature
EvS: EVarSet
SvS: SVarSet
E: evar
ψ', p, q: Pattern
wfψ: well_formed (ex , ψ') = true
wfp: well_formed p = true
wfq: well_formed q = true
frames_on_the_way_to_hole': EVarSet → SVarSet → evar x2 x3 x4 : Pattern, well_formed x2 = true → well_formed x3 = true → well_formed x4 = true → size' x2 < S (size' ψ') → mapset.mapset' (gmap wfPattern ())

size' ψ' < S (size' ψ')
abstract(lia).
Σ: Signature
EvS: EVarSet
SvS: SVarSet
E: evar
ψ', p, q: Pattern
wfψ: well_formed (mu , ψ') = true
wfp: well_formed p = true
wfq: well_formed q = true
frames_on_the_way_to_hole': EVarSet → SVarSet → evar x2 x3 x4 : Pattern, well_formed x2 = true → well_formed x3 = true → well_formed x4 = true → size' x2 < S (size' ψ') → mapset.mapset' (gmap wfPattern ())

size' ψ'^{svar:0↦svar_fresh (elements SvS)} < S (size' ψ')
Σ: Signature
EvS: EVarSet
SvS: SVarSet
E: evar
ψ', p, q: Pattern
wfψ: well_formed (mu , ψ') = true
wfp: well_formed p = true
wfq: well_formed q = true
frames_on_the_way_to_hole': EVarSet → SVarSet → evar x2 x3 x4 : Pattern, well_formed x2 = true → well_formed x3 = true → well_formed x4 = true → size' x2 < S (size' ψ') → mapset.mapset' (gmap wfPattern ())

size' ψ'^{svar:0↦svar_fresh (elements SvS)} < S (size' ψ')
Σ: Signature
EvS: EVarSet
SvS: SVarSet
E: evar
ψ', p, q: Pattern
wfψ: well_formed (mu , ψ') = true
wfp: well_formed p = true
wfq: well_formed q = true
frames_on_the_way_to_hole': EVarSet → SVarSet → evar x2 x3 x4 : Pattern, well_formed x2 = true → well_formed x3 = true → well_formed x4 = true → size' x2 < S (size' ψ') → mapset.mapset' (gmap wfPattern ())

size' ψ' < S (size' ψ')
abstract(lia). } Defined. End FOL_helpers. Ltac pi_exact H := lazymatch type of H with | ?H' => lazymatch goal with | [|- ?g] => (cut (H' = g); [(let H0 := fresh "H0" in intros H0; rewrite -H0; exact H)| (repeat f_equal; try reflexivity; try apply proof_irrel)]) end end. Ltac pi_assumption := match goal with | [H : _ |- _] => pi_exact H end. Ltac pi_set_solver := set_solver by (try pi_assumption). Section FOL_helpers. Context {Σ : Signature}.
Σ: Signature
EvS: EVarSet
SvS: SVarSet
E: evar
ψ1, ψ2, p, q: Pattern
wfψ1: well_formed ψ1 = true
wfψ: well_formed (ψ1 $ ψ2) = true
wfp: well_formed p = true
wfq: well_formed q = true

frames_on_the_way_to_hole' EvS SvS E ψ1 p q wfψ1 wfp wfq ⊆ frames_on_the_way_to_hole' EvS SvS E (ψ1 $ ψ2) p q wfψ wfp wfq
Σ: Signature
EvS: EVarSet
SvS: SVarSet
E: evar
ψ1, ψ2, p, q: Pattern
wfψ1: well_formed ψ1 = true
wfψ: well_formed (ψ1 $ ψ2) = true
wfp: well_formed p = true
wfq: well_formed q = true

frames_on_the_way_to_hole' EvS SvS E ψ1 p q wfψ1 wfp wfq ⊆ frames_on_the_way_to_hole' EvS SvS E (ψ1 $ ψ2) p q wfψ wfp wfq
Σ: Signature
EvS: EVarSet
SvS: SVarSet
E: evar
ψ1, ψ2, p, q: Pattern
wfψ1: well_formed ψ1 = true
wfψ: well_formed (ψ1 $ ψ2) = true
wfp: well_formed p = true
wfq: well_formed q = true

frames_on_the_way_to_hole' EvS SvS E ψ1 p q wfψ1 wfp wfq ⊆ {[ψ1^[[evar:E↦p]] ↾ frames_on_the_way_to_hole'_obligation_1 E ψ1 ψ2 p q wfψ wfp wfq; ψ2^[[evar:E↦p]] ↾ frames_on_the_way_to_hole'_obligation_2 E ψ1 ψ2 p q wfψ wfp wfq; ψ1^[[evar:E↦q]] ↾ frames_on_the_way_to_hole'_obligation_3 E ψ1 ψ2 p q wfψ wfp wfq; ψ2^[[evar:E↦q]] ↾ frames_on_the_way_to_hole'_obligation_4 E ψ1 ψ2 p q wfψ wfp wfq]} ∪ frames_on_the_way_to_hole' EvS SvS E ψ1 p q (frames_on_the_way_to_hole'_obligation_5 ψ1 ψ2 p q wfψ wfp wfq) (frames_on_the_way_to_hole'_obligation_6 p wfp) (frames_on_the_way_to_hole'_obligation_7 q wfq) ∪ frames_on_the_way_to_hole' EvS SvS E ψ2 p q (frames_on_the_way_to_hole'_obligation_9 ψ1 ψ2 p q wfψ wfp wfq) (frames_on_the_way_to_hole'_obligation_10 p wfp) (frames_on_the_way_to_hole'_obligation_11 q wfq)
pi_set_solver. Qed.
Σ: Signature
EvS: EVarSet
SvS: SVarSet
E: evar
ψ1, ψ2, p, q: Pattern
wfψ2: well_formed ψ2 = true
wfψ: well_formed (ψ1 $ ψ2) = true
wfp: well_formed p = true
wfq: well_formed q = true

frames_on_the_way_to_hole' EvS SvS E ψ2 p q wfψ2 wfp wfq ⊆ frames_on_the_way_to_hole' EvS SvS E (ψ1 $ ψ2) p q wfψ wfp wfq
Σ: Signature
EvS: EVarSet
SvS: SVarSet
E: evar
ψ1, ψ2, p, q: Pattern
wfψ2: well_formed ψ2 = true
wfψ: well_formed (ψ1 $ ψ2) = true
wfp: well_formed p = true
wfq: well_formed q = true

frames_on_the_way_to_hole' EvS SvS E ψ2 p q wfψ2 wfp wfq ⊆ frames_on_the_way_to_hole' EvS SvS E (ψ1 $ ψ2) p q wfψ wfp wfq
Σ: Signature
EvS: EVarSet
SvS: SVarSet
E: evar
ψ1, ψ2, p, q: Pattern
wfψ2: well_formed ψ2 = true
wfψ: well_formed (ψ1 $ ψ2) = true
wfp: well_formed p = true
wfq: well_formed q = true

frames_on_the_way_to_hole' EvS SvS E ψ2 p q wfψ2 wfp wfq ⊆ {[ψ1^[[evar:E↦p]] ↾ frames_on_the_way_to_hole'_obligation_1 E ψ1 ψ2 p q wfψ wfp wfq; ψ2^[[evar:E↦p]] ↾ frames_on_the_way_to_hole'_obligation_2 E ψ1 ψ2 p q wfψ wfp wfq; ψ1^[[evar:E↦q]] ↾ frames_on_the_way_to_hole'_obligation_3 E ψ1 ψ2 p q wfψ wfp wfq; ψ2^[[evar:E↦q]] ↾ frames_on_the_way_to_hole'_obligation_4 E ψ1 ψ2 p q wfψ wfp wfq]} ∪ frames_on_the_way_to_hole' EvS SvS E ψ1 p q (frames_on_the_way_to_hole'_obligation_5 ψ1 ψ2 p q wfψ wfp wfq) (frames_on_the_way_to_hole'_obligation_6 p wfp) (frames_on_the_way_to_hole'_obligation_7 q wfq) ∪ frames_on_the_way_to_hole' EvS SvS E ψ2 p q (frames_on_the_way_to_hole'_obligation_9 ψ1 ψ2 p q wfψ wfp wfq) (frames_on_the_way_to_hole'_obligation_10 p wfp) (frames_on_the_way_to_hole'_obligation_11 q wfq)
pi_set_solver. Qed.
Σ: Signature
EvS: EVarSet
SvS: SVarSet
E: evar
ψ1, ψ2, p, q: Pattern
wfψ1: well_formed ψ1 = true
wfψ: well_formed (ψ1 ---> ψ2) = true
wfp: well_formed p = true
wfq: well_formed q = true

frames_on_the_way_to_hole' EvS SvS E ψ1 p q wfψ1 wfp wfq ⊆ frames_on_the_way_to_hole' EvS SvS E (ψ1 ---> ψ2) p q wfψ wfp wfq
Σ: Signature
EvS: EVarSet
SvS: SVarSet
E: evar
ψ1, ψ2, p, q: Pattern
wfψ1: well_formed ψ1 = true
wfψ: well_formed (ψ1 ---> ψ2) = true
wfp: well_formed p = true
wfq: well_formed q = true

frames_on_the_way_to_hole' EvS SvS E ψ1 p q wfψ1 wfp wfq ⊆ frames_on_the_way_to_hole' EvS SvS E (ψ1 ---> ψ2) p q wfψ wfp wfq
Σ: Signature
EvS: EVarSet
SvS: SVarSet
E: evar
ψ1, ψ2, p, q: Pattern
wfψ1: well_formed ψ1 = true
wfψ: well_formed (ψ1 ---> ψ2) = true
wfp: well_formed p = true
wfq: well_formed q = true

frames_on_the_way_to_hole' EvS SvS E ψ1 p q wfψ1 wfp wfq ⊆ frames_on_the_way_to_hole' EvS SvS E ψ1 p q (frames_on_the_way_to_hole'_obligation_13 ψ1 ψ2 p q wfψ wfp wfq) (frames_on_the_way_to_hole'_obligation_14 p wfp) (frames_on_the_way_to_hole'_obligation_15 q wfq) ∪ frames_on_the_way_to_hole' EvS SvS E ψ2 p q (frames_on_the_way_to_hole'_obligation_17 ψ1 ψ2 p q wfψ wfp wfq) (frames_on_the_way_to_hole'_obligation_18 p wfp) (frames_on_the_way_to_hole'_obligation_19 q wfq)
(*unfold frames_on_the_way_to_hole'_unfold_clause_7.*) pi_set_solver. Qed.
Σ: Signature
EvS: EVarSet
SvS: SVarSet
E: evar
ψ1, ψ2, p, q: Pattern
wfψ2: well_formed ψ2 = true
wfψ: well_formed (ψ1 ---> ψ2) = true
wfp: well_formed p = true
wfq: well_formed q = true

frames_on_the_way_to_hole' EvS SvS E ψ2 p q wfψ2 wfp wfq ⊆ frames_on_the_way_to_hole' EvS SvS E (ψ1 ---> ψ2) p q wfψ wfp wfq
Σ: Signature
EvS: EVarSet
SvS: SVarSet
E: evar
ψ1, ψ2, p, q: Pattern
wfψ2: well_formed ψ2 = true
wfψ: well_formed (ψ1 ---> ψ2) = true
wfp: well_formed p = true
wfq: well_formed q = true

frames_on_the_way_to_hole' EvS SvS E ψ2 p q wfψ2 wfp wfq ⊆ frames_on_the_way_to_hole' EvS SvS E (ψ1 ---> ψ2) p q wfψ wfp wfq
Σ: Signature
EvS: EVarSet
SvS: SVarSet
E: evar
ψ1, ψ2, p, q: Pattern
wfψ2: well_formed ψ2 = true
wfψ: well_formed (ψ1 ---> ψ2) = true
wfp: well_formed p = true
wfq: well_formed q = true

frames_on_the_way_to_hole' EvS SvS E ψ2 p q wfψ2 wfp wfq ⊆ frames_on_the_way_to_hole' EvS SvS E ψ1 p q (frames_on_the_way_to_hole'_obligation_13 ψ1 ψ2 p q wfψ wfp wfq) (frames_on_the_way_to_hole'_obligation_14 p wfp) (frames_on_the_way_to_hole'_obligation_15 q wfq) ∪ frames_on_the_way_to_hole' EvS SvS E ψ2 p q (frames_on_the_way_to_hole'_obligation_17 ψ1 ψ2 p q wfψ wfp wfq) (frames_on_the_way_to_hole'_obligation_18 p wfp) (frames_on_the_way_to_hole'_obligation_19 q wfq)
pi_set_solver. Qed.
Σ: Signature
Γ: Theory
ψ1, ψ2, p, q: Pattern
E: evar
i: ProofInfo
wfψ1: well_formed ψ1
wfψ2: well_formed ψ2
wfp: well_formed p
wfq: well_formed q
pile: ProofInfoLe (ExGen := ∅, SVSubst := ∅, KT := false, FP := {[ψ1^[[evar:E↦p]] ↾ well_formed_free_evar_subst_0 E ψ1 p wfp wfψ1; ψ1^[[evar:E↦q]] ↾ well_formed_free_evar_subst_0 E ψ1 q wfq wfψ1; ψ2^[[evar:E↦p]] ↾ well_formed_free_evar_subst_0 E ψ2 p wfp wfψ2; ψ2^[[evar:E↦q]] ↾ well_formed_free_evar_subst_0 E ψ2 q wfq wfψ2]}) i
pf₁: Γ ⊢i ψ1^[[evar:E↦p]] <---> ψ1^[[evar:E↦q]] using i
pf₂: Γ ⊢i ψ2^[[evar:E↦p]] <---> ψ2^[[evar:E↦q]] using i

Γ ⊢i ψ1^[[evar:E↦p]] $ ψ2^[[evar:E↦p]] <---> ψ1^[[evar:E↦q]] $ ψ2^[[evar:E↦q]] using i
Σ: Signature
Γ: Theory
ψ1, ψ2, p, q: Pattern
E: evar
i: ProofInfo
wfψ1: well_formed ψ1
wfψ2: well_formed ψ2
wfp: well_formed p
wfq: well_formed q
pile: ProofInfoLe (ExGen := ∅, SVSubst := ∅, KT := false, FP := {[ψ1^[[evar:E↦p]] ↾ well_formed_free_evar_subst_0 E ψ1 p wfp wfψ1; ψ1^[[evar:E↦q]] ↾ well_formed_free_evar_subst_0 E ψ1 q wfq wfψ1; ψ2^[[evar:E↦p]] ↾ well_formed_free_evar_subst_0 E ψ2 p wfp wfψ2; ψ2^[[evar:E↦q]] ↾ well_formed_free_evar_subst_0 E ψ2 q wfq wfψ2]}) i
pf₁: Γ ⊢i ψ1^[[evar:E↦p]] <---> ψ1^[[evar:E↦q]] using i
pf₂: Γ ⊢i ψ2^[[evar:E↦p]] <---> ψ2^[[evar:E↦q]] using i

Γ ⊢i ψ1^[[evar:E↦p]] $ ψ2^[[evar:E↦p]] <---> ψ1^[[evar:E↦q]] $ ψ2^[[evar:E↦q]] using i
Σ: Signature
Γ: Theory
ψ1, ψ2, p, q: Pattern
E: evar
i: ProofInfo
wfψ1: well_formed ψ1
wfψ2: well_formed ψ2
wfp: well_formed p
wfq: well_formed q
Hwf1: well_formed ψ1^[[evar:E↦p]] = true
HeqHwf1: Hwf1 = well_formed_free_evar_subst_0 E ψ1 p wfp wfψ1
pile: ProofInfoLe (ExGen := ∅, SVSubst := ∅, KT := false, FP := {[ψ1^[[evar:E↦p]] ↾ Hwf1; ψ1^[[evar:E↦q]] ↾ well_formed_free_evar_subst_0 E ψ1 q wfq wfψ1; ψ2^[[evar:E↦p]] ↾ well_formed_free_evar_subst_0 E ψ2 p wfp wfψ2; ψ2^[[evar:E↦q]] ↾ well_formed_free_evar_subst_0 E ψ2 q wfq wfψ2]}) i
pf₁: Γ ⊢i ψ1^[[evar:E↦p]] <---> ψ1^[[evar:E↦q]] using i
pf₂: Γ ⊢i ψ2^[[evar:E↦p]] <---> ψ2^[[evar:E↦q]] using i

Γ ⊢i ψ1^[[evar:E↦p]] $ ψ2^[[evar:E↦p]] <---> ψ1^[[evar:E↦q]] $ ψ2^[[evar:E↦q]] using i
Σ: Signature
Γ: Theory
ψ1, ψ2, p, q: Pattern
E: evar
i: ProofInfo
wfψ1: well_formed ψ1
wfψ2: well_formed ψ2
wfp: well_formed p
wfq: well_formed q
Hwf1: well_formed ψ1^[[evar:E↦p]] = true
HeqHwf1: Hwf1 = well_formed_free_evar_subst_0 E ψ1 p wfp wfψ1
Hwf2: well_formed ψ1^[[evar:E↦q]] = true
HeqHwf2: Hwf2 = well_formed_free_evar_subst_0 E ψ1 q wfq wfψ1
pile: ProofInfoLe (ExGen := ∅, SVSubst := ∅, KT := false, FP := {[ψ1^[[evar:E↦p]] ↾ Hwf1; ψ1^[[evar:E↦q]] ↾ Hwf2; ψ2^[[evar:E↦p]] ↾ well_formed_free_evar_subst_0 E ψ2 p wfp wfψ2; ψ2^[[evar:E↦q]] ↾ well_formed_free_evar_subst_0 E ψ2 q wfq wfψ2]}) i
pf₁: Γ ⊢i ψ1^[[evar:E↦p]] <---> ψ1^[[evar:E↦q]] using i
pf₂: Γ ⊢i ψ2^[[evar:E↦p]] <---> ψ2^[[evar:E↦q]] using i

Γ ⊢i ψ1^[[evar:E↦p]] $ ψ2^[[evar:E↦p]] <---> ψ1^[[evar:E↦q]] $ ψ2^[[evar:E↦q]] using i
Σ: Signature
Γ: Theory
ψ1, ψ2, p, q: Pattern
E: evar
i: ProofInfo
wfψ1: well_formed ψ1
wfψ2: well_formed ψ2
wfp: well_formed p
wfq: well_formed q
Hwf1: well_formed ψ1^[[evar:E↦p]] = true
HeqHwf1: Hwf1 = well_formed_free_evar_subst_0 E ψ1 p wfp wfψ1
Hwf2: well_formed ψ1^[[evar:E↦q]] = true
HeqHwf2: Hwf2 = well_formed_free_evar_subst_0 E ψ1 q wfq wfψ1
Hwf3: well_formed ψ2^[[evar:E↦p]] = true
HeqHwf3: Hwf3 = well_formed_free_evar_subst_0 E ψ2 p wfp wfψ2
pile: ProofInfoLe (ExGen := ∅, SVSubst := ∅, KT := false, FP := {[ψ1^[[evar:E↦p]] ↾ Hwf1; ψ1^[[evar:E↦q]] ↾ Hwf2; ψ2^[[evar:E↦p]] ↾ Hwf3; ψ2^[[evar:E↦q]] ↾ well_formed_free_evar_subst_0 E ψ2 q wfq wfψ2]}) i
pf₁: Γ ⊢i ψ1^[[evar:E↦p]] <---> ψ1^[[evar:E↦q]] using i
pf₂: Γ ⊢i ψ2^[[evar:E↦p]] <---> ψ2^[[evar:E↦q]] using i

Γ ⊢i ψ1^[[evar:E↦p]] $ ψ2^[[evar:E↦p]] <---> ψ1^[[evar:E↦q]] $ ψ2^[[evar:E↦q]] using i
Σ: Signature
Γ: Theory
ψ1, ψ2, p, q: Pattern
E: evar
i: ProofInfo
wfψ1: well_formed ψ1
wfψ2: well_formed ψ2
wfp: well_formed p
wfq: well_formed q
Hwf1: well_formed ψ1^[[evar:E↦p]] = true
HeqHwf1: Hwf1 = well_formed_free_evar_subst_0 E ψ1 p wfp wfψ1
Hwf2: well_formed ψ1^[[evar:E↦q]] = true
HeqHwf2: Hwf2 = well_formed_free_evar_subst_0 E ψ1 q wfq wfψ1
Hwf3: well_formed ψ2^[[evar:E↦p]] = true
HeqHwf3: Hwf3 = well_formed_free_evar_subst_0 E ψ2 p wfp wfψ2
Hwf4: well_formed ψ2^[[evar:E↦q]] = true
HeqHwf4: Hwf4 = well_formed_free_evar_subst_0 E ψ2 q wfq wfψ2
pile: ProofInfoLe (ExGen := ∅, SVSubst := ∅, KT := false, FP := {[ψ1^[[evar:E↦p]] ↾ Hwf1; ψ1^[[evar:E↦q]] ↾ Hwf2; ψ2^[[evar:E↦p]] ↾ Hwf3; ψ2^[[evar:E↦q]] ↾ Hwf4]}) i
pf₁: Γ ⊢i ψ1^[[evar:E↦p]] <---> ψ1^[[evar:E↦q]] using i
pf₂: Γ ⊢i ψ2^[[evar:E↦p]] <---> ψ2^[[evar:E↦q]] using i

Γ ⊢i ψ1^[[evar:E↦p]] $ ψ2^[[evar:E↦p]] <---> ψ1^[[evar:E↦q]] $ ψ2^[[evar:E↦q]] using i
Σ: Signature
Γ: Theory
ψ1, ψ2, p, q: Pattern
E: evar
i: ProofInfo
wfψ1: well_formed ψ1
wfψ2: well_formed ψ2
wfp: well_formed p
wfq: well_formed q
Hwf1: well_formed ψ1^[[evar:E↦p]] = true
HeqHwf1: Hwf1 = well_formed_free_evar_subst_0 E ψ1 p wfp wfψ1
Hwf2: well_formed ψ1^[[evar:E↦q]] = true
HeqHwf2: Hwf2 = well_formed_free_evar_subst_0 E ψ1 q wfq wfψ1
Hwf3: well_formed ψ2^[[evar:E↦p]] = true
HeqHwf3: Hwf3 = well_formed_free_evar_subst_0 E ψ2 p wfp wfψ2
Hwf4: well_formed ψ2^[[evar:E↦q]] = true
HeqHwf4: Hwf4 = well_formed_free_evar_subst_0 E ψ2 q wfq wfψ2
pile: ProofInfoLe (ExGen := ∅, SVSubst := ∅, KT := false, FP := {[ψ1^[[evar:E↦p]] ↾ Hwf1; ψ1^[[evar:E↦q]] ↾ Hwf2; ψ2^[[evar:E↦p]] ↾ Hwf3; ψ2^[[evar:E↦q]] ↾ Hwf4]}) i
pf₁: Γ ⊢i ψ1^[[evar:E↦p]] <---> ψ1^[[evar:E↦q]] using i
pf₂: Γ ⊢i ψ2^[[evar:E↦p]] <---> ψ2^[[evar:E↦q]] using i

well_formed (ψ1^[[evar:E↦p]] $ ψ2^[[evar:E↦p]])
Σ: Signature
Γ: Theory
ψ1, ψ2, p, q: Pattern
E: evar
i: ProofInfo
wfψ1: well_formed ψ1
wfψ2: well_formed ψ2
wfp: well_formed p
wfq: well_formed q
Hwf1: well_formed ψ1^[[evar:E↦p]] = true
HeqHwf1: Hwf1 = well_formed_free_evar_subst_0 E ψ1 p wfp wfψ1
Hwf2: well_formed ψ1^[[evar:E↦q]] = true
HeqHwf2: Hwf2 = well_formed_free_evar_subst_0 E ψ1 q wfq wfψ1
Hwf3: well_formed ψ2^[[evar:E↦p]] = true
HeqHwf3: Hwf3 = well_formed_free_evar_subst_0 E ψ2 p wfp wfψ2
Hwf4: well_formed ψ2^[[evar:E↦q]] = true
HeqHwf4: Hwf4 = well_formed_free_evar_subst_0 E ψ2 q wfq wfψ2
pile: ProofInfoLe (ExGen := ∅, SVSubst := ∅, KT := false, FP := {[ψ1^[[evar:E↦p]] ↾ Hwf1; ψ1^[[evar:E↦q]] ↾ Hwf2; ψ2^[[evar:E↦p]] ↾ Hwf3; ψ2^[[evar:E↦q]] ↾ Hwf4]}) i
pf₁: Γ ⊢i ψ1^[[evar:E↦p]] <---> ψ1^[[evar:E↦q]] using i
pf₂: Γ ⊢i ψ2^[[evar:E↦p]] <---> ψ2^[[evar:E↦q]] using i
well_formed ?B
Σ: Signature
Γ: Theory
ψ1, ψ2, p, q: Pattern
E: evar
i: ProofInfo
wfψ1: well_formed ψ1
wfψ2: well_formed ψ2
wfp: well_formed p
wfq: well_formed q
Hwf1: well_formed ψ1^[[evar:E↦p]] = true
HeqHwf1: Hwf1 = well_formed_free_evar_subst_0 E ψ1 p wfp wfψ1
Hwf2: well_formed ψ1^[[evar:E↦q]] = true
HeqHwf2: Hwf2 = well_formed_free_evar_subst_0 E ψ1 q wfq wfψ1
Hwf3: well_formed ψ2^[[evar:E↦p]] = true
HeqHwf3: Hwf3 = well_formed_free_evar_subst_0 E ψ2 p wfp wfψ2
Hwf4: well_formed ψ2^[[evar:E↦q]] = true
HeqHwf4: Hwf4 = well_formed_free_evar_subst_0 E ψ2 q wfq wfψ2
pile: ProofInfoLe (ExGen := ∅, SVSubst := ∅, KT := false, FP := {[ψ1^[[evar:E↦p]] ↾ Hwf1; ψ1^[[evar:E↦q]] ↾ Hwf2; ψ2^[[evar:E↦p]] ↾ Hwf3; ψ2^[[evar:E↦q]] ↾ Hwf4]}) i
pf₁: Γ ⊢i ψ1^[[evar:E↦p]] <---> ψ1^[[evar:E↦q]] using i
pf₂: Γ ⊢i ψ2^[[evar:E↦p]] <---> ψ2^[[evar:E↦q]] using i
well_formed (ψ1^[[evar:E↦q]] $ ψ2^[[evar:E↦q]])
Σ: Signature
Γ: Theory
ψ1, ψ2, p, q: Pattern
E: evar
i: ProofInfo
wfψ1: well_formed ψ1
wfψ2: well_formed ψ2
wfp: well_formed p
wfq: well_formed q
Hwf1: well_formed ψ1^[[evar:E↦p]] = true
HeqHwf1: Hwf1 = well_formed_free_evar_subst_0 E ψ1 p wfp wfψ1
Hwf2: well_formed ψ1^[[evar:E↦q]] = true
HeqHwf2: Hwf2 = well_formed_free_evar_subst_0 E ψ1 q wfq wfψ1
Hwf3: well_formed ψ2^[[evar:E↦p]] = true
HeqHwf3: Hwf3 = well_formed_free_evar_subst_0 E ψ2 p wfp wfψ2
Hwf4: well_formed ψ2^[[evar:E↦q]] = true
HeqHwf4: Hwf4 = well_formed_free_evar_subst_0 E ψ2 q wfq wfψ2
pile: ProofInfoLe (ExGen := ∅, SVSubst := ∅, KT := false, FP := {[ψ1^[[evar:E↦p]] ↾ Hwf1; ψ1^[[evar:E↦q]] ↾ Hwf2; ψ2^[[evar:E↦p]] ↾ Hwf3; ψ2^[[evar:E↦q]] ↾ Hwf4]}) i
pf₁: Γ ⊢i ψ1^[[evar:E↦p]] <---> ψ1^[[evar:E↦q]] using i
pf₂: Γ ⊢i ψ2^[[evar:E↦p]] <---> ψ2^[[evar:E↦q]] using i
Γ ⊢i ψ1^[[evar:E↦p]] $ ψ2^[[evar:E↦p]] <---> ?B using i
Σ: Signature
Γ: Theory
ψ1, ψ2, p, q: Pattern
E: evar
i: ProofInfo
wfψ1: well_formed ψ1
wfψ2: well_formed ψ2
wfp: well_formed p
wfq: well_formed q
Hwf1: well_formed ψ1^[[evar:E↦p]] = true
HeqHwf1: Hwf1 = well_formed_free_evar_subst_0 E ψ1 p wfp wfψ1
Hwf2: well_formed ψ1^[[evar:E↦q]] = true
HeqHwf2: Hwf2 = well_formed_free_evar_subst_0 E ψ1 q wfq wfψ1
Hwf3: well_formed ψ2^[[evar:E↦p]] = true
HeqHwf3: Hwf3 = well_formed_free_evar_subst_0 E ψ2 p wfp wfψ2
Hwf4: well_formed ψ2^[[evar:E↦q]] = true
HeqHwf4: Hwf4 = well_formed_free_evar_subst_0 E ψ2 q wfq wfψ2
pile: ProofInfoLe (ExGen := ∅, SVSubst := ∅, KT := false, FP := {[ψ1^[[evar:E↦p]] ↾ Hwf1; ψ1^[[evar:E↦q]] ↾ Hwf2; ψ2^[[evar:E↦p]] ↾ Hwf3; ψ2^[[evar:E↦q]] ↾ Hwf4]}) i
pf₁: Γ ⊢i ψ1^[[evar:E↦p]] <---> ψ1^[[evar:E↦q]] using i
pf₂: Γ ⊢i ψ2^[[evar:E↦p]] <---> ψ2^[[evar:E↦q]] using i
Γ ⊢i ?B <---> ψ1^[[evar:E↦q]] $ ψ2^[[evar:E↦q]] using i
Σ: Signature
Γ: Theory
ψ1, ψ2, p, q: Pattern
E: evar
i: ProofInfo
wfψ1: well_formed ψ1
wfψ2: well_formed ψ2
wfp: well_formed p
wfq: well_formed q
Hwf1: well_formed ψ1^[[evar:E↦p]] = true
HeqHwf1: Hwf1 = well_formed_free_evar_subst_0 E ψ1 p wfp wfψ1
Hwf2: well_formed ψ1^[[evar:E↦q]] = true
HeqHwf2: Hwf2 = well_formed_free_evar_subst_0 E ψ1 q wfq wfψ1
Hwf3: well_formed ψ2^[[evar:E↦p]] = true
HeqHwf3: Hwf3 = well_formed_free_evar_subst_0 E ψ2 p wfp wfψ2
Hwf4: well_formed ψ2^[[evar:E↦q]] = true
HeqHwf4: Hwf4 = well_formed_free_evar_subst_0 E ψ2 q wfq wfψ2
pile: ProofInfoLe (ExGen := ∅, SVSubst := ∅, KT := false, FP := {[ψ1^[[evar:E↦p]] ↾ Hwf1; ψ1^[[evar:E↦q]] ↾ Hwf2; ψ2^[[evar:E↦p]] ↾ Hwf3; ψ2^[[evar:E↦q]] ↾ Hwf4]}) i
pf₁: Γ ⊢i ψ1^[[evar:E↦p]] <---> ψ1^[[evar:E↦q]] using i
pf₂: Γ ⊢i ψ2^[[evar:E↦p]] <---> ψ2^[[evar:E↦q]] using i

Γ ⊢i ?B <---> ψ1^[[evar:E↦q]] $ ψ2^[[evar:E↦q]] using i
Σ: Signature
Γ: Theory
ψ1, ψ2, p, q: Pattern
E: evar
i: ProofInfo
wfψ1: well_formed ψ1
wfψ2: well_formed ψ2
wfp: well_formed p
wfq: well_formed q
Hwf1: well_formed ψ1^[[evar:E↦p]] = true
HeqHwf1: Hwf1 = well_formed_free_evar_subst_0 E ψ1 p wfp wfψ1
Hwf2: well_formed ψ1^[[evar:E↦q]] = true
HeqHwf2: Hwf2 = well_formed_free_evar_subst_0 E ψ1 q wfq wfψ1
Hwf3: well_formed ψ2^[[evar:E↦p]] = true
HeqHwf3: Hwf3 = well_formed_free_evar_subst_0 E ψ2 p wfp wfψ2
Hwf4: well_formed ψ2^[[evar:E↦q]] = true
HeqHwf4: Hwf4 = well_formed_free_evar_subst_0 E ψ2 q wfq wfψ2
pile: ProofInfoLe (ExGen := ∅, SVSubst := ∅, KT := false, FP := {[ψ1^[[evar:E↦p]] ↾ Hwf1; ψ1^[[evar:E↦q]] ↾ Hwf2; ψ2^[[evar:E↦p]] ↾ Hwf3; ψ2^[[evar:E↦q]] ↾ Hwf4]}) i
pf₁: Γ ⊢i ψ1^[[evar:E↦p]] <---> ψ1^[[evar:E↦q]] using i
pf₂: Γ ⊢i ψ2^[[evar:E↦p]] <---> ψ2^[[evar:E↦q]] using i

well_formed (?B ---> ψ1^[[evar:E↦q]] $ ψ2^[[evar:E↦q]])
Σ: Signature
Γ: Theory
ψ1, ψ2, p, q: Pattern
E: evar
i: ProofInfo
wfψ1: well_formed ψ1
wfψ2: well_formed ψ2
wfp: well_formed p
wfq: well_formed q
Hwf1: well_formed ψ1^[[evar:E↦p]] = true
HeqHwf1: Hwf1 = well_formed_free_evar_subst_0 E ψ1 p wfp wfψ1
Hwf2: well_formed ψ1^[[evar:E↦q]] = true
HeqHwf2: Hwf2 = well_formed_free_evar_subst_0 E ψ1 q wfq wfψ1
Hwf3: well_formed ψ2^[[evar:E↦p]] = true
HeqHwf3: Hwf3 = well_formed_free_evar_subst_0 E ψ2 p wfp wfψ2
Hwf4: well_formed ψ2^[[evar:E↦q]] = true
HeqHwf4: Hwf4 = well_formed_free_evar_subst_0 E ψ2 q wfq wfψ2
pile: ProofInfoLe (ExGen := ∅, SVSubst := ∅, KT := false, FP := {[ψ1^[[evar:E↦p]] ↾ Hwf1; ψ1^[[evar:E↦q]] ↾ Hwf2; ψ2^[[evar:E↦p]] ↾ Hwf3; ψ2^[[evar:E↦q]] ↾ Hwf4]}) i
pf₁: Γ ⊢i ψ1^[[evar:E↦p]] <---> ψ1^[[evar:E↦q]] using i
pf₂: Γ ⊢i ψ2^[[evar:E↦p]] <---> ψ2^[[evar:E↦q]] using i
well_formed (ψ1^[[evar:E↦q]] $ ψ2^[[evar:E↦q]] ---> ?B)
Σ: Signature
Γ: Theory
ψ1, ψ2, p, q: Pattern
E: evar
i: ProofInfo
wfψ1: well_formed ψ1
wfψ2: well_formed ψ2
wfp: well_formed p
wfq: well_formed q
Hwf1: well_formed ψ1^[[evar:E↦p]] = true
HeqHwf1: Hwf1 = well_formed_free_evar_subst_0 E ψ1 p wfp wfψ1
Hwf2: well_formed ψ1^[[evar:E↦q]] = true
HeqHwf2: Hwf2 = well_formed_free_evar_subst_0 E ψ1 q wfq wfψ1
Hwf3: well_formed ψ2^[[evar:E↦p]] = true
HeqHwf3: Hwf3 = well_formed_free_evar_subst_0 E ψ2 p wfp wfψ2
Hwf4: well_formed ψ2^[[evar:E↦q]] = true
HeqHwf4: Hwf4 = well_formed_free_evar_subst_0 E ψ2 q wfq wfψ2
pile: ProofInfoLe (ExGen := ∅, SVSubst := ∅, KT := false, FP := {[ψ1^[[evar:E↦p]] ↾ Hwf1; ψ1^[[evar:E↦q]] ↾ Hwf2; ψ2^[[evar:E↦p]] ↾ Hwf3; ψ2^[[evar:E↦q]] ↾ Hwf4]}) i
pf₁: Γ ⊢i ψ1^[[evar:E↦p]] <---> ψ1^[[evar:E↦q]] using i
pf₂: Γ ⊢i ψ2^[[evar:E↦p]] <---> ψ2^[[evar:E↦q]] using i
Γ ⊢i ?B ---> ψ1^[[evar:E↦q]] $ ψ2^[[evar:E↦q]] using i
Σ: Signature
Γ: Theory
ψ1, ψ2, p, q: Pattern
E: evar
i: ProofInfo
wfψ1: well_formed ψ1
wfψ2: well_formed ψ2
wfp: well_formed p
wfq: well_formed q
Hwf1: well_formed ψ1^[[evar:E↦p]] = true
HeqHwf1: Hwf1 = well_formed_free_evar_subst_0 E ψ1 p wfp wfψ1
Hwf2: well_formed ψ1^[[evar:E↦q]] = true
HeqHwf2: Hwf2 = well_formed_free_evar_subst_0 E ψ1 q wfq wfψ1
Hwf3: well_formed ψ2^[[evar:E↦p]] = true
HeqHwf3: Hwf3 = well_formed_free_evar_subst_0 E ψ2 p wfp wfψ2
Hwf4: well_formed ψ2^[[evar:E↦q]] = true
HeqHwf4: Hwf4 = well_formed_free_evar_subst_0 E ψ2 q wfq wfψ2
pile: ProofInfoLe (ExGen := ∅, SVSubst := ∅, KT := false, FP := {[ψ1^[[evar:E↦p]] ↾ Hwf1; ψ1^[[evar:E↦q]] ↾ Hwf2; ψ2^[[evar:E↦p]] ↾ Hwf3; ψ2^[[evar:E↦q]] ↾ Hwf4]}) i
pf₁: Γ ⊢i ψ1^[[evar:E↦p]] <---> ψ1^[[evar:E↦q]] using i
pf₂: Γ ⊢i ψ2^[[evar:E↦p]] <---> ψ2^[[evar:E↦q]] using i
Γ ⊢i ψ1^[[evar:E↦q]] $ ψ2^[[evar:E↦q]] ---> ?B using i
Σ: Signature
Γ: Theory
ψ1, ψ2, p, q: Pattern
E: evar
i: ProofInfo
wfψ1: well_formed ψ1
wfψ2: well_formed ψ2
wfp: well_formed p
wfq: well_formed q
Hwf1: well_formed ψ1^[[evar:E↦p]] = true
HeqHwf1: Hwf1 = well_formed_free_evar_subst_0 E ψ1 p wfp wfψ1
Hwf2: well_formed ψ1^[[evar:E↦q]] = true
HeqHwf2: Hwf2 = well_formed_free_evar_subst_0 E ψ1 q wfq wfψ1
Hwf3: well_formed ψ2^[[evar:E↦p]] = true
HeqHwf3: Hwf3 = well_formed_free_evar_subst_0 E ψ2 p wfp wfψ2
Hwf4: well_formed ψ2^[[evar:E↦q]] = true
HeqHwf4: Hwf4 = well_formed_free_evar_subst_0 E ψ2 q wfq wfψ2
pile: ProofInfoLe (ExGen := ∅, SVSubst := ∅, KT := false, FP := {[ψ1^[[evar:E↦p]] ↾ Hwf1; ψ1^[[evar:E↦q]] ↾ Hwf2; ψ2^[[evar:E↦p]] ↾ Hwf3; ψ2^[[evar:E↦q]] ↾ Hwf4]}) i
pf₁: Γ ⊢i ψ1^[[evar:E↦p]] <---> ψ1^[[evar:E↦q]] using i
pf₂: Γ ⊢i ψ2^[[evar:E↦p]] <---> ψ2^[[evar:E↦q]] using i

Γ ⊢i ψ1^[[evar:E↦q]] $ ψ2^[[evar:E↦q]] ---> ?B using i
Σ: Signature
Γ: Theory
ψ1, ψ2, p, q: Pattern
E: evar
i: ProofInfo
wfψ1: well_formed ψ1
wfψ2: well_formed ψ2
wfp: well_formed p
wfq: well_formed q
Hwf1: well_formed ψ1^[[evar:E↦p]] = true
HeqHwf1: Hwf1 = well_formed_free_evar_subst_0 E ψ1 p wfp wfψ1
Hwf2: well_formed ψ1^[[evar:E↦q]] = true
HeqHwf2: Hwf2 = well_formed_free_evar_subst_0 E ψ1 q wfq wfψ1
Hwf3: well_formed ψ2^[[evar:E↦p]] = true
HeqHwf3: Hwf3 = well_formed_free_evar_subst_0 E ψ2 p wfp wfψ2
Hwf4: well_formed ψ2^[[evar:E↦q]] = true
HeqHwf4: Hwf4 = well_formed_free_evar_subst_0 E ψ2 q wfq wfψ2
pile: ProofInfoLe (ExGen := ∅, SVSubst := ∅, KT := false, FP := {[ψ1^[[evar:E↦p]] ↾ Hwf1; ψ1^[[evar:E↦q]] ↾ Hwf2; ψ2^[[evar:E↦p]] ↾ Hwf3; ψ2^[[evar:E↦q]] ↾ Hwf4]}) i
pf₁: Γ ⊢i ψ1^[[evar:E↦p]] <---> ψ1^[[evar:E↦q]] using i
pf₂: Γ ⊢i ψ2^[[evar:E↦p]] <---> ψ2^[[evar:E↦q]] using i

ProofInfoLe (ExGen := ∅, SVSubst := ∅, KT := false, FP := {[ψ1^[[evar:E↦q]] ↾ Hwf2]}) i
Σ: Signature
Γ: Theory
ψ1, ψ2, p, q: Pattern
E: evar
i: ProofInfo
wfψ1: well_formed ψ1
wfψ2: well_formed ψ2
wfp: well_formed p
wfq: well_formed q
Hwf1: well_formed ψ1^[[evar:E↦p]] = true
HeqHwf1: Hwf1 = well_formed_free_evar_subst_0 E ψ1 p wfp wfψ1
Hwf2: well_formed ψ1^[[evar:E↦q]] = true
HeqHwf2: Hwf2 = well_formed_free_evar_subst_0 E ψ1 q wfq wfψ1
Hwf3: well_formed ψ2^[[evar:E↦p]] = true
HeqHwf3: Hwf3 = well_formed_free_evar_subst_0 E ψ2 p wfp wfψ2
Hwf4: well_formed ψ2^[[evar:E↦q]] = true
HeqHwf4: Hwf4 = well_formed_free_evar_subst_0 E ψ2 q wfq wfψ2
pile: ProofInfoLe (ExGen := ∅, SVSubst := ∅, KT := false, FP := {[ψ1^[[evar:E↦p]] ↾ Hwf1; ψ1^[[evar:E↦q]] ↾ Hwf2; ψ2^[[evar:E↦p]] ↾ Hwf3; ψ2^[[evar:E↦q]] ↾ Hwf4]}) i
pf₁: Γ ⊢i ψ1^[[evar:E↦p]] <---> ψ1^[[evar:E↦q]] using i
pf₂: Γ ⊢i ψ2^[[evar:E↦p]] <---> ψ2^[[evar:E↦q]] using i
Γ ⊢i ψ2^[[evar:E↦q]] ---> ?ϕ₂ using i
Σ: Signature
Γ: Theory
ψ1, ψ2, p, q: Pattern
E: evar
i: ProofInfo
wfψ1: well_formed ψ1
wfψ2: well_formed ψ2
wfp: well_formed p
wfq: well_formed q
Hwf1: well_formed ψ1^[[evar:E↦p]] = true
HeqHwf1: Hwf1 = well_formed_free_evar_subst_0 E ψ1 p wfp wfψ1
Hwf2: well_formed ψ1^[[evar:E↦q]] = true
HeqHwf2: Hwf2 = well_formed_free_evar_subst_0 E ψ1 q wfq wfψ1
Hwf3: well_formed ψ2^[[evar:E↦p]] = true
HeqHwf3: Hwf3 = well_formed_free_evar_subst_0 E ψ2 p wfp wfψ2
Hwf4: well_formed ψ2^[[evar:E↦q]] = true
HeqHwf4: Hwf4 = well_formed_free_evar_subst_0 E ψ2 q wfq wfψ2
pile: ProofInfoLe (ExGen := ∅, SVSubst := ∅, KT := false, FP := {[ψ1^[[evar:E↦p]] ↾ Hwf1; ψ1^[[evar:E↦q]] ↾ Hwf2; ψ2^[[evar:E↦p]] ↾ Hwf3; ψ2^[[evar:E↦q]] ↾ Hwf4]}) i
pf₁: Γ ⊢i ψ1^[[evar:E↦p]] <---> ψ1^[[evar:E↦q]] using i
pf₂: Γ ⊢i ψ2^[[evar:E↦p]] <---> ψ2^[[evar:E↦q]] using i

ProofInfoLe (ExGen := ∅, SVSubst := ∅, KT := false, FP := {[ψ1^[[evar:E↦q]] ↾ Hwf2]}) i
Σ: Signature
Γ: Theory
ψ1, ψ2, p, q: Pattern
E: evar
i: ProofInfo
wfψ1: well_formed ψ1
wfψ2: well_formed ψ2
wfp: well_formed p
wfq: well_formed q
Hwf1: well_formed ψ1^[[evar:E↦p]] = true
HeqHwf1: Hwf1 = well_formed_free_evar_subst_0 E ψ1 p wfp wfψ1
Hwf2: well_formed ψ1^[[evar:E↦q]] = true
HeqHwf2: Hwf2 = well_formed_free_evar_subst_0 E ψ1 q wfq wfψ1
Hwf3: well_formed ψ2^[[evar:E↦p]] = true
HeqHwf3: Hwf3 = well_formed_free_evar_subst_0 E ψ2 p wfp wfψ2
Hwf4: well_formed ψ2^[[evar:E↦q]] = true
HeqHwf4: Hwf4 = well_formed_free_evar_subst_0 E ψ2 q wfq wfψ2
pile: ProofInfoLe (ExGen := ∅, SVSubst := ∅, KT := false, FP := {[ψ1^[[evar:E↦p]] ↾ Hwf1; ψ1^[[evar:E↦q]] ↾ Hwf2; ψ2^[[evar:E↦p]] ↾ Hwf3; ψ2^[[evar:E↦q]] ↾ Hwf4]}) i
pf₁: Γ ⊢i ψ1^[[evar:E↦p]] <---> ψ1^[[evar:E↦q]] using i
pf₂: Γ ⊢i ψ2^[[evar:E↦p]] <---> ψ2^[[evar:E↦q]] using i

ProofInfoLe (ExGen := ∅, SVSubst := ∅, KT := false, FP := {[ψ1^[[evar:E↦q]] ↾ Hwf2]}) ?i₂
Σ: Signature
Γ: Theory
ψ1, ψ2, p, q: Pattern
E: evar
i: ProofInfo
wfψ1: well_formed ψ1
wfψ2: well_formed ψ2
wfp: well_formed p
wfq: well_formed q
Hwf1: well_formed ψ1^[[evar:E↦p]] = true
HeqHwf1: Hwf1 = well_formed_free_evar_subst_0 E ψ1 p wfp wfψ1
Hwf2: well_formed ψ1^[[evar:E↦q]] = true
HeqHwf2: Hwf2 = well_formed_free_evar_subst_0 E ψ1 q wfq wfψ1
Hwf3: well_formed ψ2^[[evar:E↦p]] = true
HeqHwf3: Hwf3 = well_formed_free_evar_subst_0 E ψ2 p wfp wfψ2
Hwf4: well_formed ψ2^[[evar:E↦q]] = true
HeqHwf4: Hwf4 = well_formed_free_evar_subst_0 E ψ2 q wfq wfψ2
pile: ProofInfoLe (ExGen := ∅, SVSubst := ∅, KT := false, FP := {[ψ1^[[evar:E↦p]] ↾ Hwf1; ψ1^[[evar:E↦q]] ↾ Hwf2; ψ2^[[evar:E↦p]] ↾ Hwf3; ψ2^[[evar:E↦q]] ↾ Hwf4]}) i
pf₁: Γ ⊢i ψ1^[[evar:E↦p]] <---> ψ1^[[evar:E↦q]] using i
pf₂: Γ ⊢i ψ2^[[evar:E↦p]] <---> ψ2^[[evar:E↦q]] using i
ProofInfoLe ?i₂ i
Σ: Signature
Γ: Theory
ψ1, ψ2, p, q: Pattern
E: evar
i: ProofInfo
wfψ1: well_formed ψ1
wfψ2: well_formed ψ2
wfp: well_formed p
wfq: well_formed q
Hwf1: well_formed ψ1^[[evar:E↦p]] = true
HeqHwf1: Hwf1 = well_formed_free_evar_subst_0 E ψ1 p wfp wfψ1
Hwf2: well_formed ψ1^[[evar:E↦q]] = true
HeqHwf2: Hwf2 = well_formed_free_evar_subst_0 E ψ1 q wfq wfψ1
Hwf3: well_formed ψ2^[[evar:E↦p]] = true
HeqHwf3: Hwf3 = well_formed_free_evar_subst_0 E ψ2 p wfp wfψ2
Hwf4: well_formed ψ2^[[evar:E↦q]] = true
HeqHwf4: Hwf4 = well_formed_free_evar_subst_0 E ψ2 q wfq wfψ2
pile: ProofInfoLe (ExGen := ∅, SVSubst := ∅, KT := false, FP := {[ψ1^[[evar:E↦p]] ↾ Hwf1; ψ1^[[evar:E↦q]] ↾ Hwf2; ψ2^[[evar:E↦p]] ↾ Hwf3; ψ2^[[evar:E↦q]] ↾ Hwf4]}) i
pf₁: Γ ⊢i ψ1^[[evar:E↦p]] <---> ψ1^[[evar:E↦q]] using i
pf₂: Γ ⊢i ψ2^[[evar:E↦p]] <---> ψ2^[[evar:E↦q]] using i

ProofInfoLe (ExGen := ∅, SVSubst := ∅, KT := false, FP := {[ψ1^[[evar:E↦q]] ↾ Hwf2]}) (ExGen := ∅, SVSubst := ∅, KT := false, FP := {[ψ1^[[evar:E↦p]] ↾ Hwf1; ψ1^[[evar:E↦q]] ↾ Hwf2; ψ2^[[evar:E↦p]] ↾ Hwf3; ψ2^[[evar:E↦q]] ↾ Hwf4]})
try_solve_pile.
Σ: Signature
Γ: Theory
ψ1, ψ2, p, q: Pattern
E: evar
i: ProofInfo
wfψ1: well_formed ψ1
wfψ2: well_formed ψ2
wfp: well_formed p
wfq: well_formed q
Hwf1: well_formed ψ1^[[evar:E↦p]] = true
HeqHwf1: Hwf1 = well_formed_free_evar_subst_0 E ψ1 p wfp wfψ1
Hwf2: well_formed ψ1^[[evar:E↦q]] = true
HeqHwf2: Hwf2 = well_formed_free_evar_subst_0 E ψ1 q wfq wfψ1
Hwf3: well_formed ψ2^[[evar:E↦p]] = true
HeqHwf3: Hwf3 = well_formed_free_evar_subst_0 E ψ2 p wfp wfψ2
Hwf4: well_formed ψ2^[[evar:E↦q]] = true
HeqHwf4: Hwf4 = well_formed_free_evar_subst_0 E ψ2 q wfq wfψ2
pile: ProofInfoLe (ExGen := ∅, SVSubst := ∅, KT := false, FP := {[ψ1^[[evar:E↦p]] ↾ Hwf1; ψ1^[[evar:E↦q]] ↾ Hwf2; ψ2^[[evar:E↦p]] ↾ Hwf3; ψ2^[[evar:E↦q]] ↾ Hwf4]}) i
pf₁: Γ ⊢i ψ1^[[evar:E↦p]] <---> ψ1^[[evar:E↦q]] using i
pf₂: Γ ⊢i ψ2^[[evar:E↦p]] <---> ψ2^[[evar:E↦q]] using i

Γ ⊢i ψ2^[[evar:E↦q]] ---> ?ϕ₂ using i
Σ: Signature
Γ: Theory
ψ1, ψ2, p, q: Pattern
E: evar
i: ProofInfo
wfψ1: well_formed ψ1
wfψ2: well_formed ψ2
wfp: well_formed p
wfq: well_formed q
Hwf1: well_formed ψ1^[[evar:E↦p]] = true
HeqHwf1: Hwf1 = well_formed_free_evar_subst_0 E ψ1 p wfp wfψ1
Hwf2: well_formed ψ1^[[evar:E↦q]] = true
HeqHwf2: Hwf2 = well_formed_free_evar_subst_0 E ψ1 q wfq wfψ1
Hwf3: well_formed ψ2^[[evar:E↦p]] = true
HeqHwf3: Hwf3 = well_formed_free_evar_subst_0 E ψ2 p wfp wfψ2
Hwf4: well_formed ψ2^[[evar:E↦q]] = true
HeqHwf4: Hwf4 = well_formed_free_evar_subst_0 E ψ2 q wfq wfψ2
pile: ProofInfoLe (ExGen := ∅, SVSubst := ∅, KT := false, FP := {[ψ1^[[evar:E↦p]] ↾ Hwf1; ψ1^[[evar:E↦q]] ↾ Hwf2; ψ2^[[evar:E↦p]] ↾ Hwf3; ψ2^[[evar:E↦q]] ↾ Hwf4]}) i
pf₁: Γ ⊢i ψ1^[[evar:E↦p]] <---> ψ1^[[evar:E↦q]] using i
pf₂: Γ ⊢i ψ2^[[evar:E↦p]] <---> ψ2^[[evar:E↦q]] using i

Γ ⊢i ψ2^[[evar:E↦q]] ---> ?ϕ₂ using i
Σ: Signature
Γ: Theory
ψ1, ψ2, p, q: Pattern
E: evar
i: ProofInfo
wfψ1: well_formed ψ1
wfψ2: well_formed ψ2
wfp: well_formed p
wfq: well_formed q
Hwf1: well_formed ψ1^[[evar:E↦p]] = true
HeqHwf1: Hwf1 = well_formed_free_evar_subst_0 E ψ1 p wfp wfψ1
Hwf2: well_formed ψ1^[[evar:E↦q]] = true
HeqHwf2: Hwf2 = well_formed_free_evar_subst_0 E ψ1 q wfq wfψ1
Hwf3: well_formed ψ2^[[evar:E↦p]] = true
HeqHwf3: Hwf3 = well_formed_free_evar_subst_0 E ψ2 p wfp wfψ2
Hwf4: well_formed ψ2^[[evar:E↦q]] = true
HeqHwf4: Hwf4 = well_formed_free_evar_subst_0 E ψ2 q wfq wfψ2
pile: ProofInfoLe (ExGen := ∅, SVSubst := ∅, KT := false, FP := {[ψ1^[[evar:E↦p]] ↾ Hwf1; ψ1^[[evar:E↦q]] ↾ Hwf2; ψ2^[[evar:E↦p]] ↾ Hwf3; ψ2^[[evar:E↦q]] ↾ Hwf4]}) i
pf₁: Γ ⊢i ψ1^[[evar:E↦p]] <---> ψ1^[[evar:E↦q]] using i
pf₂: Γ ⊢i ψ2^[[evar:E↦q]] ---> ψ2^[[evar:E↦p]] using i

Γ ⊢i ψ2^[[evar:E↦q]] ---> ?ϕ₂ using i
Σ: Signature
Γ: Theory
ψ1, ψ2, p, q: Pattern
E: evar
i: ProofInfo
wfψ1: well_formed ψ1
wfψ2: well_formed ψ2
wfp: well_formed p
wfq: well_formed q
Hwf1: well_formed ψ1^[[evar:E↦p]] = true
HeqHwf1: Hwf1 = well_formed_free_evar_subst_0 E ψ1 p wfp wfψ1
Hwf2: well_formed ψ1^[[evar:E↦q]] = true
HeqHwf2: Hwf2 = well_formed_free_evar_subst_0 E ψ1 q wfq wfψ1
Hwf3: well_formed ψ2^[[evar:E↦p]] = true
HeqHwf3: Hwf3 = well_formed_free_evar_subst_0 E ψ2 p wfp wfψ2
Hwf4: well_formed ψ2^[[evar:E↦q]] = true
HeqHwf4: Hwf4 = well_formed_free_evar_subst_0 E ψ2 q wfq wfψ2
pile: ProofInfoLe (ExGen := ∅, SVSubst := ∅, KT := false, FP := {[ψ1^[[evar:E↦p]] ↾ Hwf1; ψ1^[[evar:E↦q]] ↾ Hwf2; ψ2^[[evar:E↦p]] ↾ Hwf3; ψ2^[[evar:E↦q]] ↾ Hwf4]}) i
pf₁: Γ ⊢i ψ1^[[evar:E↦p]] <---> ψ1^[[evar:E↦q]] using i
pf₂: Γ ⊢i ψ2^[[evar:E↦p]] <---> ψ2^[[evar:E↦q]] using i
well_formed (ψ2^[[evar:E↦p]] ---> ψ2^[[evar:E↦q]])
Σ: Signature
Γ: Theory
ψ1, ψ2, p, q: Pattern
E: evar
i: ProofInfo
wfψ1: well_formed ψ1
wfψ2: well_formed ψ2
wfp: well_formed p
wfq: well_formed q
Hwf1: well_formed ψ1^[[evar:E↦p]] = true
HeqHwf1: Hwf1 = well_formed_free_evar_subst_0 E ψ1 p wfp wfψ1
Hwf2: well_formed ψ1^[[evar:E↦q]] = true
HeqHwf2: Hwf2 = well_formed_free_evar_subst_0 E ψ1 q wfq wfψ1
Hwf3: well_formed ψ2^[[evar:E↦p]] = true
HeqHwf3: Hwf3 = well_formed_free_evar_subst_0 E ψ2 p wfp wfψ2
Hwf4: well_formed ψ2^[[evar:E↦q]] = true
HeqHwf4: Hwf4 = well_formed_free_evar_subst_0 E ψ2 q wfq wfψ2
pile: ProofInfoLe (ExGen := ∅, SVSubst := ∅, KT := false, FP := {[ψ1^[[evar:E↦p]] ↾ Hwf1; ψ1^[[evar:E↦q]] ↾ Hwf2; ψ2^[[evar:E↦p]] ↾ Hwf3; ψ2^[[evar:E↦q]] ↾ Hwf4]}) i
pf₁: Γ ⊢i ψ1^[[evar:E↦p]] <---> ψ1^[[evar:E↦q]] using i
pf₂: Γ ⊢i ψ2^[[evar:E↦p]] <---> ψ2^[[evar:E↦q]] using i
well_formed (ψ2^[[evar:E↦q]] ---> ψ2^[[evar:E↦p]])
Σ: Signature
Γ: Theory
ψ1, ψ2, p, q: Pattern
E: evar
i: ProofInfo
wfψ1: well_formed ψ1
wfψ2: well_formed ψ2
wfp: well_formed p
wfq: well_formed q
Hwf1: well_formed ψ1^[[evar:E↦p]] = true
HeqHwf1: Hwf1 = well_formed_free_evar_subst_0 E ψ1 p wfp wfψ1
Hwf2: well_formed ψ1^[[evar:E↦q]] = true
HeqHwf2: Hwf2 = well_formed_free_evar_subst_0 E ψ1 q wfq wfψ1
Hwf3: well_formed ψ2^[[evar:E↦p]] = true
HeqHwf3: Hwf3 = well_formed_free_evar_subst_0 E ψ2 p wfp wfψ2
Hwf4: well_formed ψ2^[[evar:E↦q]] = true
HeqHwf4: Hwf4 = well_formed_free_evar_subst_0 E ψ2 q wfq wfψ2
pile: ProofInfoLe (ExGen := ∅, SVSubst := ∅, KT := false, FP := {[ψ1^[[evar:E↦p]] ↾ Hwf1; ψ1^[[evar:E↦q]] ↾ Hwf2; ψ2^[[evar:E↦p]] ↾ Hwf3; ψ2^[[evar:E↦q]] ↾ Hwf4]}) i
pf₁: Γ ⊢i ψ1^[[evar:E↦p]] <---> ψ1^[[evar:E↦q]] using i
pf₂: Γ ⊢i ψ2^[[evar:E↦p]] <---> ψ2^[[evar:E↦q]] using i

well_formed (ψ2^[[evar:E↦p]] ---> ψ2^[[evar:E↦q]])
Σ: Signature
Γ: Theory
ψ1, ψ2, p, q: Pattern
E: evar
i: ProofInfo
wfψ1: well_formed ψ1
wfψ2: well_formed ψ2
wfp: well_formed p
wfq: well_formed q
Hwf1: well_formed ψ1^[[evar:E↦p]] = true
HeqHwf1: Hwf1 = well_formed_free_evar_subst_0 E ψ1 p wfp wfψ1
Hwf2: well_formed ψ1^[[evar:E↦q]] = true
HeqHwf2: Hwf2 = well_formed_free_evar_subst_0 E ψ1 q wfq wfψ1
Hwf3: well_formed ψ2^[[evar:E↦p]] = true
HeqHwf3: Hwf3 = well_formed_free_evar_subst_0 E ψ2 p wfp wfψ2
Hwf4: well_formed ψ2^[[evar:E↦q]] = true
HeqHwf4: Hwf4 = well_formed_free_evar_subst_0 E ψ2 q wfq wfψ2
pile: ProofInfoLe (ExGen := ∅, SVSubst := ∅, KT := false, FP := {[ψ1^[[evar:E↦p]] ↾ Hwf1; ψ1^[[evar:E↦q]] ↾ Hwf2; ψ2^[[evar:E↦p]] ↾ Hwf3; ψ2^[[evar:E↦q]] ↾ Hwf4]}) i
pf₁: Γ ⊢i ψ1^[[evar:E↦p]] <---> ψ1^[[evar:E↦q]] using i
pf₂: Γ ⊢i ψ2^[[evar:E↦p]] <---> ψ2^[[evar:E↦q]] using i
well_formed (ψ2^[[evar:E↦q]] ---> ψ2^[[evar:E↦p]])
Σ: Signature
Γ: Theory
ψ1, ψ2, p, q: Pattern
E: evar
i: ProofInfo
wfψ1: well_formed ψ1
wfψ2: well_formed ψ2
wfp: well_formed p
wfq: well_formed q
Hwf1: well_formed ψ1^[[evar:E↦p]] = true
HeqHwf1: Hwf1 = well_formed_free_evar_subst_0 E ψ1 p wfp wfψ1
Hwf2: well_formed ψ1^[[evar:E↦q]] = true
HeqHwf2: Hwf2 = well_formed_free_evar_subst_0 E ψ1 q wfq wfψ1
Hwf3: well_formed ψ2^[[evar:E↦p]] = true
HeqHwf3: Hwf3 = well_formed_free_evar_subst_0 E ψ2 p wfp wfψ2
Hwf4: well_formed ψ2^[[evar:E↦q]] = true
HeqHwf4: Hwf4 = well_formed_free_evar_subst_0 E ψ2 q wfq wfψ2
pile: ProofInfoLe (ExGen := ∅, SVSubst := ∅, KT := false, FP := {[ψ1^[[evar:E↦p]] ↾ Hwf1; ψ1^[[evar:E↦q]] ↾ Hwf2; ψ2^[[evar:E↦p]] ↾ Hwf3; ψ2^[[evar:E↦q]] ↾ Hwf4]}) i
pf₁: Γ ⊢i ψ1^[[evar:E↦p]] <---> ψ1^[[evar:E↦q]] using i
pf₂: Γ ⊢i ψ2^[[evar:E↦p]] <---> ψ2^[[evar:E↦q]] using i

well_formed (ψ2^[[evar:E↦p]] ---> ψ2^[[evar:E↦q]])
abstract (wf_auto2).
Σ: Signature
Γ: Theory
ψ1, ψ2, p, q: Pattern
E: evar
i: ProofInfo
wfψ1: well_formed ψ1
wfψ2: well_formed ψ2
wfp: well_formed p
wfq: well_formed q
Hwf1: well_formed ψ1^[[evar:E↦p]] = true
HeqHwf1: Hwf1 = well_formed_free_evar_subst_0 E ψ1 p wfp wfψ1
Hwf2: well_formed ψ1^[[evar:E↦q]] = true
HeqHwf2: Hwf2 = well_formed_free_evar_subst_0 E ψ1 q wfq wfψ1
Hwf3: well_formed ψ2^[[evar:E↦p]] = true
HeqHwf3: Hwf3 = well_formed_free_evar_subst_0 E ψ2 p wfp wfψ2
Hwf4: well_formed ψ2^[[evar:E↦q]] = true
HeqHwf4: Hwf4 = well_formed_free_evar_subst_0 E ψ2 q wfq wfψ2
pile: ProofInfoLe (ExGen := ∅, SVSubst := ∅, KT := false, FP := {[ψ1^[[evar:E↦p]] ↾ Hwf1; ψ1^[[evar:E↦q]] ↾ Hwf2; ψ2^[[evar:E↦p]] ↾ Hwf3; ψ2^[[evar:E↦q]] ↾ Hwf4]}) i
pf₁: Γ ⊢i ψ1^[[evar:E↦p]] <---> ψ1^[[evar:E↦q]] using i
pf₂: Γ ⊢i ψ2^[[evar:E↦p]] <---> ψ2^[[evar:E↦q]] using i

well_formed (ψ2^[[evar:E↦q]] ---> ψ2^[[evar:E↦p]])
Σ: Signature
Γ: Theory
ψ1, ψ2, p, q: Pattern
E: evar
i: ProofInfo
wfψ1: well_formed ψ1
wfψ2: well_formed ψ2
wfp: well_formed p
wfq: well_formed q
Hwf1: well_formed ψ1^[[evar:E↦p]] = true
HeqHwf1: Hwf1 = well_formed_free_evar_subst_0 E ψ1 p wfp wfψ1
Hwf2: well_formed ψ1^[[evar:E↦q]] = true
HeqHwf2: Hwf2 = well_formed_free_evar_subst_0 E ψ1 q wfq wfψ1
Hwf3: well_formed ψ2^[[evar:E↦p]] = true
HeqHwf3: Hwf3 = well_formed_free_evar_subst_0 E ψ2 p wfp wfψ2
Hwf4: well_formed ψ2^[[evar:E↦q]] = true
HeqHwf4: Hwf4 = well_formed_free_evar_subst_0 E ψ2 q wfq wfψ2
pile: ProofInfoLe (ExGen := ∅, SVSubst := ∅, KT := false, FP := {[ψ1^[[evar:E↦p]] ↾ Hwf1; ψ1^[[evar:E↦q]] ↾ Hwf2; ψ2^[[evar:E↦p]] ↾ Hwf3; ψ2^[[evar:E↦q]] ↾ Hwf4]}) i
pf₁: Γ ⊢i ψ1^[[evar:E↦p]] <---> ψ1^[[evar:E↦q]] using i
pf₂: Γ ⊢i ψ2^[[evar:E↦p]] <---> ψ2^[[evar:E↦q]] using i

well_formed (ψ2^[[evar:E↦q]] ---> ψ2^[[evar:E↦p]])
abstract (wf_auto2). } }
Σ: Signature
Γ: Theory
ψ1, ψ2, p, q: Pattern
E: evar
i: ProofInfo
wfψ1: well_formed ψ1
wfψ2: well_formed ψ2
wfp: well_formed p
wfq: well_formed q
Hwf1: well_formed ψ1^[[evar:E↦p]] = true
HeqHwf1: Hwf1 = well_formed_free_evar_subst_0 E ψ1 p wfp wfψ1
Hwf2: well_formed ψ1^[[evar:E↦q]] = true
HeqHwf2: Hwf2 = well_formed_free_evar_subst_0 E ψ1 q wfq wfψ1
Hwf3: well_formed ψ2^[[evar:E↦p]] = true
HeqHwf3: Hwf3 = well_formed_free_evar_subst_0 E ψ2 p wfp wfψ2
Hwf4: well_formed ψ2^[[evar:E↦q]] = true
HeqHwf4: Hwf4 = well_formed_free_evar_subst_0 E ψ2 q wfq wfψ2
pile: ProofInfoLe (ExGen := ∅, SVSubst := ∅, KT := false, FP := {[ψ1^[[evar:E↦p]] ↾ Hwf1; ψ1^[[evar:E↦q]] ↾ Hwf2; ψ2^[[evar:E↦p]] ↾ Hwf3; ψ2^[[evar:E↦q]] ↾ Hwf4]}) i
pf₁: Γ ⊢i ψ1^[[evar:E↦p]] <---> ψ1^[[evar:E↦q]] using i
pf₂: Γ ⊢i ψ2^[[evar:E↦p]] <---> ψ2^[[evar:E↦q]] using i

well_formed (ψ1^[[evar:E↦q]] $ ψ2^[[evar:E↦p]] ---> ψ1^[[evar:E↦q]] $ ψ2^[[evar:E↦q]])
Σ: Signature
Γ: Theory
ψ1, ψ2, p, q: Pattern
E: evar
i: ProofInfo
wfψ1: well_formed ψ1
wfψ2: well_formed ψ2
wfp: well_formed p
wfq: well_formed q
Hwf1: well_formed ψ1^[[evar:E↦p]] = true
HeqHwf1: Hwf1 = well_formed_free_evar_subst_0 E ψ1 p wfp wfψ1
Hwf2: well_formed ψ1^[[evar:E↦q]] = true
HeqHwf2: Hwf2 = well_formed_free_evar_subst_0 E ψ1 q wfq wfψ1
Hwf3: well_formed ψ2^[[evar:E↦p]] = true
HeqHwf3: Hwf3 = well_formed_free_evar_subst_0 E ψ2 p wfp wfψ2
Hwf4: well_formed ψ2^[[evar:E↦q]] = true
HeqHwf4: Hwf4 = well_formed_free_evar_subst_0 E ψ2 q wfq wfψ2
pile: ProofInfoLe (ExGen := ∅, SVSubst := ∅, KT := false, FP := {[ψ1^[[evar:E↦p]] ↾ Hwf1; ψ1^[[evar:E↦q]] ↾ Hwf2; ψ2^[[evar:E↦p]] ↾ Hwf3; ψ2^[[evar:E↦q]] ↾ Hwf4]}) i
pf₁: Γ ⊢i ψ1^[[evar:E↦p]] <---> ψ1^[[evar:E↦q]] using i
pf₂: Γ ⊢i ψ2^[[evar:E↦p]] <---> ψ2^[[evar:E↦q]] using i
well_formed (ψ1^[[evar:E↦q]] $ ψ2^[[evar:E↦q]] ---> ψ1^[[evar:E↦q]] $ ψ2^[[evar:E↦p]])
Σ: Signature
Γ: Theory
ψ1, ψ2, p, q: Pattern
E: evar
i: ProofInfo
wfψ1: well_formed ψ1
wfψ2: well_formed ψ2
wfp: well_formed p
wfq: well_formed q
Hwf1: well_formed ψ1^[[evar:E↦p]] = true
HeqHwf1: Hwf1 = well_formed_free_evar_subst_0 E ψ1 p wfp wfψ1
Hwf2: well_formed ψ1^[[evar:E↦q]] = true
HeqHwf2: Hwf2 = well_formed_free_evar_subst_0 E ψ1 q wfq wfψ1
Hwf3: well_formed ψ2^[[evar:E↦p]] = true
HeqHwf3: Hwf3 = well_formed_free_evar_subst_0 E ψ2 p wfp wfψ2
Hwf4: well_formed ψ2^[[evar:E↦q]] = true
HeqHwf4: Hwf4 = well_formed_free_evar_subst_0 E ψ2 q wfq wfψ2
pile: ProofInfoLe (ExGen := ∅, SVSubst := ∅, KT := false, FP := {[ψ1^[[evar:E↦p]] ↾ Hwf1; ψ1^[[evar:E↦q]] ↾ Hwf2; ψ2^[[evar:E↦p]] ↾ Hwf3; ψ2^[[evar:E↦q]] ↾ Hwf4]}) i
pf₁: Γ ⊢i ψ1^[[evar:E↦p]] <---> ψ1^[[evar:E↦q]] using i
pf₂: Γ ⊢i ψ2^[[evar:E↦p]] <---> ψ2^[[evar:E↦q]] using i
Γ ⊢i ψ1^[[evar:E↦q]] $ ψ2^[[evar:E↦p]] ---> ψ1^[[evar:E↦q]] $ ψ2^[[evar:E↦q]] using i
Σ: Signature
Γ: Theory
ψ1, ψ2, p, q: Pattern
E: evar
i: ProofInfo
wfψ1: well_formed ψ1
wfψ2: well_formed ψ2
wfp: well_formed p
wfq: well_formed q
Hwf1: well_formed ψ1^[[evar:E↦p]] = true
HeqHwf1: Hwf1 = well_formed_free_evar_subst_0 E ψ1 p wfp wfψ1
Hwf2: well_formed ψ1^[[evar:E↦q]] = true
HeqHwf2: Hwf2 = well_formed_free_evar_subst_0 E ψ1 q wfq wfψ1
Hwf3: well_formed ψ2^[[evar:E↦p]] = true
HeqHwf3: Hwf3 = well_formed_free_evar_subst_0 E ψ2 p wfp wfψ2
Hwf4: well_formed ψ2^[[evar:E↦q]] = true
HeqHwf4: Hwf4 = well_formed_free_evar_subst_0 E ψ2 q wfq wfψ2
pile: ProofInfoLe (ExGen := ∅, SVSubst := ∅, KT := false, FP := {[ψ1^[[evar:E↦p]] ↾ Hwf1; ψ1^[[evar:E↦q]] ↾ Hwf2; ψ2^[[evar:E↦p]] ↾ Hwf3; ψ2^[[evar:E↦q]] ↾ Hwf4]}) i
pf₁: Γ ⊢i ψ1^[[evar:E↦p]] <---> ψ1^[[evar:E↦q]] using i
pf₂: Γ ⊢i ψ2^[[evar:E↦p]] <---> ψ2^[[evar:E↦q]] using i

Γ ⊢i ψ1^[[evar:E↦q]] $ ψ2^[[evar:E↦p]] ---> ψ1^[[evar:E↦q]] $ ψ2^[[evar:E↦q]] using i
Σ: Signature
Γ: Theory
ψ1, ψ2, p, q: Pattern
E: evar
i: ProofInfo
wfψ1: well_formed ψ1
wfψ2: well_formed ψ2
wfp: well_formed p
wfq: well_formed q
Hwf1: well_formed ψ1^[[evar:E↦p]] = true
HeqHwf1: Hwf1 = well_formed_free_evar_subst_0 E ψ1 p wfp wfψ1
Hwf2: well_formed ψ1^[[evar:E↦q]] = true
HeqHwf2: Hwf2 = well_formed_free_evar_subst_0 E ψ1 q wfq wfψ1
Hwf3: well_formed ψ2^[[evar:E↦p]] = true
HeqHwf3: Hwf3 = well_formed_free_evar_subst_0 E ψ2 p wfp wfψ2
Hwf4: well_formed ψ2^[[evar:E↦q]] = true
HeqHwf4: Hwf4 = well_formed_free_evar_subst_0 E ψ2 q wfq wfψ2
pile: ProofInfoLe (ExGen := ∅, SVSubst := ∅, KT := false, FP := {[ψ1^[[evar:E↦p]] ↾ Hwf1; ψ1^[[evar:E↦q]] ↾ Hwf2; ψ2^[[evar:E↦p]] ↾ Hwf3; ψ2^[[evar:E↦q]] ↾ Hwf4]}) i
pf₁: Γ ⊢i ψ1^[[evar:E↦p]] <---> ψ1^[[evar:E↦q]] using i
pf₂: Γ ⊢i ψ2^[[evar:E↦p]] <---> ψ2^[[evar:E↦q]] using i

ProofInfoLe (ExGen := ∅, SVSubst := ∅, KT := false, FP := {[ψ1^[[evar:E↦q]] ↾ Hwf2]}) i
Σ: Signature
Γ: Theory
ψ1, ψ2, p, q: Pattern
E: evar
i: ProofInfo
wfψ1: well_formed ψ1
wfψ2: well_formed ψ2
wfp: well_formed p
wfq: well_formed q
Hwf1: well_formed ψ1^[[evar:E↦p]] = true
HeqHwf1: Hwf1 = well_formed_free_evar_subst_0 E ψ1 p wfp wfψ1
Hwf2: well_formed ψ1^[[evar:E↦q]] = true
HeqHwf2: Hwf2 = well_formed_free_evar_subst_0 E ψ1 q wfq wfψ1
Hwf3: well_formed ψ2^[[evar:E↦p]] = true
HeqHwf3: Hwf3 = well_formed_free_evar_subst_0 E ψ2 p wfp wfψ2
Hwf4: well_formed ψ2^[[evar:E↦q]] = true
HeqHwf4: Hwf4 = well_formed_free_evar_subst_0 E ψ2 q wfq wfψ2
pile: ProofInfoLe (ExGen := ∅, SVSubst := ∅, KT := false, FP := {[ψ1^[[evar:E↦p]] ↾ Hwf1; ψ1^[[evar:E↦q]] ↾ Hwf2; ψ2^[[evar:E↦p]] ↾ Hwf3; ψ2^[[evar:E↦q]] ↾ Hwf4]}) i
pf₁: Γ ⊢i ψ1^[[evar:E↦p]] <---> ψ1^[[evar:E↦q]] using i
pf₂: Γ ⊢i ψ2^[[evar:E↦p]] <---> ψ2^[[evar:E↦q]] using i
Γ ⊢i ψ2^[[evar:E↦p]] ---> ψ2^[[evar:E↦q]] using i
Σ: Signature
Γ: Theory
ψ1, ψ2, p, q: Pattern
E: evar
i: ProofInfo
wfψ1: well_formed ψ1
wfψ2: well_formed ψ2
wfp: well_formed p
wfq: well_formed q
Hwf1: well_formed ψ1^[[evar:E↦p]] = true
HeqHwf1: Hwf1 = well_formed_free_evar_subst_0 E ψ1 p wfp wfψ1
Hwf2: well_formed ψ1^[[evar:E↦q]] = true
HeqHwf2: Hwf2 = well_formed_free_evar_subst_0 E ψ1 q wfq wfψ1
Hwf3: well_formed ψ2^[[evar:E↦p]] = true
HeqHwf3: Hwf3 = well_formed_free_evar_subst_0 E ψ2 p wfp wfψ2
Hwf4: well_formed ψ2^[[evar:E↦q]] = true
HeqHwf4: Hwf4 = well_formed_free_evar_subst_0 E ψ2 q wfq wfψ2
pile: ProofInfoLe (ExGen := ∅, SVSubst := ∅, KT := false, FP := {[ψ1^[[evar:E↦p]] ↾ Hwf1; ψ1^[[evar:E↦q]] ↾ Hwf2; ψ2^[[evar:E↦p]] ↾ Hwf3; ψ2^[[evar:E↦q]] ↾ Hwf4]}) i
pf₁: Γ ⊢i ψ1^[[evar:E↦p]] <---> ψ1^[[evar:E↦q]] using i
pf₂: Γ ⊢i ψ2^[[evar:E↦p]] <---> ψ2^[[evar:E↦q]] using i

ProofInfoLe (ExGen := ∅, SVSubst := ∅, KT := false, FP := {[ψ1^[[evar:E↦q]] ↾ Hwf2]}) i
Σ: Signature
Γ: Theory
ψ1, ψ2, p, q: Pattern
E: evar
i: ProofInfo
wfψ1: well_formed ψ1
wfψ2: well_formed ψ2
wfp: well_formed p
wfq: well_formed q
Hwf1: well_formed ψ1^[[evar:E↦p]] = true
HeqHwf1: Hwf1 = well_formed_free_evar_subst_0 E ψ1 p wfp wfψ1
Hwf2: well_formed ψ1^[[evar:E↦q]] = true
HeqHwf2: Hwf2 = well_formed_free_evar_subst_0 E ψ1 q wfq wfψ1
Hwf3: well_formed ψ2^[[evar:E↦p]] = true
HeqHwf3: Hwf3 = well_formed_free_evar_subst_0 E ψ2 p wfp wfψ2
Hwf4: well_formed ψ2^[[evar:E↦q]] = true
HeqHwf4: Hwf4 = well_formed_free_evar_subst_0 E ψ2 q wfq wfψ2
pile: ProofInfoLe (ExGen := ∅, SVSubst := ∅, KT := false, FP := {[ψ1^[[evar:E↦p]] ↾ Hwf1; ψ1^[[evar:E↦q]] ↾ Hwf2; ψ2^[[evar:E↦p]] ↾ Hwf3; ψ2^[[evar:E↦q]] ↾ Hwf4]}) i
pf₁: Γ ⊢i ψ1^[[evar:E↦p]] <---> ψ1^[[evar:E↦q]] using i
pf₂: Γ ⊢i ψ2^[[evar:E↦p]] <---> ψ2^[[evar:E↦q]] using i

ProofInfoLe (ExGen := ∅, SVSubst := ∅, KT := false, FP := {[ψ1^[[evar:E↦q]] ↾ Hwf2]}) ?i₂
Σ: Signature
Γ: Theory
ψ1, ψ2, p, q: Pattern
E: evar
i: ProofInfo
wfψ1: well_formed ψ1
wfψ2: well_formed ψ2
wfp: well_formed p
wfq: well_formed q
Hwf1: well_formed ψ1^[[evar:E↦p]] = true
HeqHwf1: Hwf1 = well_formed_free_evar_subst_0 E ψ1 p wfp wfψ1
Hwf2: well_formed ψ1^[[evar:E↦q]] = true
HeqHwf2: Hwf2 = well_formed_free_evar_subst_0 E ψ1 q wfq wfψ1
Hwf3: well_formed ψ2^[[evar:E↦p]] = true
HeqHwf3: Hwf3 = well_formed_free_evar_subst_0 E ψ2 p wfp wfψ2
Hwf4: well_formed ψ2^[[evar:E↦q]] = true
HeqHwf4: Hwf4 = well_formed_free_evar_subst_0 E ψ2 q wfq wfψ2
pile: ProofInfoLe (ExGen := ∅, SVSubst := ∅, KT := false, FP := {[ψ1^[[evar:E↦p]] ↾ Hwf1; ψ1^[[evar:E↦q]] ↾ Hwf2; ψ2^[[evar:E↦p]] ↾ Hwf3; ψ2^[[evar:E↦q]] ↾ Hwf4]}) i
pf₁: Γ ⊢i ψ1^[[evar:E↦p]] <---> ψ1^[[evar:E↦q]] using i
pf₂: Γ ⊢i ψ2^[[evar:E↦p]] <---> ψ2^[[evar:E↦q]] using i
ProofInfoLe ?i₂ i
Σ: Signature
Γ: Theory
ψ1, ψ2, p, q: Pattern
E: evar
i: ProofInfo
wfψ1: well_formed ψ1
wfψ2: well_formed ψ2
wfp: well_formed p
wfq: well_formed q
Hwf1: well_formed ψ1^[[evar:E↦p]] = true
HeqHwf1: Hwf1 = well_formed_free_evar_subst_0 E ψ1 p wfp wfψ1
Hwf2: well_formed ψ1^[[evar:E↦q]] = true
HeqHwf2: Hwf2 = well_formed_free_evar_subst_0 E ψ1 q wfq wfψ1
Hwf3: well_formed ψ2^[[evar:E↦p]] = true
HeqHwf3: Hwf3 = well_formed_free_evar_subst_0 E ψ2 p wfp wfψ2
Hwf4: well_formed ψ2^[[evar:E↦q]] = true
HeqHwf4: Hwf4 = well_formed_free_evar_subst_0 E ψ2 q wfq wfψ2
pile: ProofInfoLe (ExGen := ∅, SVSubst := ∅, KT := false, FP := {[ψ1^[[evar:E↦p]] ↾ Hwf1; ψ1^[[evar:E↦q]] ↾ Hwf2; ψ2^[[evar:E↦p]] ↾ Hwf3; ψ2^[[evar:E↦q]] ↾ Hwf4]}) i
pf₁: Γ ⊢i ψ1^[[evar:E↦p]] <---> ψ1^[[evar:E↦q]] using i
pf₂: Γ ⊢i ψ2^[[evar:E↦p]] <---> ψ2^[[evar:E↦q]] using i

ProofInfoLe (ExGen := ∅, SVSubst := ∅, KT := false, FP := {[ψ1^[[evar:E↦q]] ↾ Hwf2]}) (ExGen := ∅, SVSubst := ∅, KT := false, FP := {[ψ1^[[evar:E↦p]] ↾ Hwf1; ψ1^[[evar:E↦q]] ↾ Hwf2; ψ2^[[evar:E↦p]] ↾ Hwf3; ψ2^[[evar:E↦q]] ↾ Hwf4]})
try_solve_pile.
Σ: Signature
Γ: Theory
ψ1, ψ2, p, q: Pattern
E: evar
i: ProofInfo
wfψ1: well_formed ψ1
wfψ2: well_formed ψ2
wfp: well_formed p
wfq: well_formed q
Hwf1: well_formed ψ1^[[evar:E↦p]] = true
HeqHwf1: Hwf1 = well_formed_free_evar_subst_0 E ψ1 p wfp wfψ1
Hwf2: well_formed ψ1^[[evar:E↦q]] = true
HeqHwf2: Hwf2 = well_formed_free_evar_subst_0 E ψ1 q wfq wfψ1
Hwf3: well_formed ψ2^[[evar:E↦p]] = true
HeqHwf3: Hwf3 = well_formed_free_evar_subst_0 E ψ2 p wfp wfψ2
Hwf4: well_formed ψ2^[[evar:E↦q]] = true
HeqHwf4: Hwf4 = well_formed_free_evar_subst_0 E ψ2 q wfq wfψ2
pile: ProofInfoLe (ExGen := ∅, SVSubst := ∅, KT := false, FP := {[ψ1^[[evar:E↦p]] ↾ Hwf1; ψ1^[[evar:E↦q]] ↾ Hwf2; ψ2^[[evar:E↦p]] ↾ Hwf3; ψ2^[[evar:E↦q]] ↾ Hwf4]}) i
pf₁: Γ ⊢i ψ1^[[evar:E↦p]] <---> ψ1^[[evar:E↦q]] using i
pf₂: Γ ⊢i ψ2^[[evar:E↦p]] <---> ψ2^[[evar:E↦q]] using i

Γ ⊢i ψ2^[[evar:E↦p]] ---> ψ2^[[evar:E↦q]] using i
Σ: Signature
Γ: Theory
ψ1, ψ2, p, q: Pattern
E: evar
i: ProofInfo
wfψ1: well_formed ψ1
wfψ2: well_formed ψ2
wfp: well_formed p
wfq: well_formed q
Hwf1: well_formed ψ1^[[evar:E↦p]] = true
HeqHwf1: Hwf1 = well_formed_free_evar_subst_0 E ψ1 p wfp wfψ1
Hwf2: well_formed ψ1^[[evar:E↦q]] = true
HeqHwf2: Hwf2 = well_formed_free_evar_subst_0 E ψ1 q wfq wfψ1
Hwf3: well_formed ψ2^[[evar:E↦p]] = true
HeqHwf3: Hwf3 = well_formed_free_evar_subst_0 E ψ2 p wfp wfψ2
Hwf4: well_formed ψ2^[[evar:E↦q]] = true
HeqHwf4: Hwf4 = well_formed_free_evar_subst_0 E ψ2 q wfq wfψ2
pile: ProofInfoLe (ExGen := ∅, SVSubst := ∅, KT := false, FP := {[ψ1^[[evar:E↦p]] ↾ Hwf1; ψ1^[[evar:E↦q]] ↾ Hwf2; ψ2^[[evar:E↦p]] ↾ Hwf3; ψ2^[[evar:E↦q]] ↾ Hwf4]}) i
pf₁: Γ ⊢i ψ1^[[evar:E↦p]] <---> ψ1^[[evar:E↦q]] using i
pf₂: Γ ⊢i ψ2^[[evar:E↦p]] <---> ψ2^[[evar:E↦q]] using i

Γ ⊢i ψ2^[[evar:E↦p]] ---> ψ2^[[evar:E↦q]] using i
Σ: Signature
Γ: Theory
ψ1, ψ2, p, q: Pattern
E: evar
i: ProofInfo
wfψ1: well_formed ψ1
wfψ2: well_formed ψ2
wfp: well_formed p
wfq: well_formed q
Hwf1: well_formed ψ1^[[evar:E↦p]] = true
HeqHwf1: Hwf1 = well_formed_free_evar_subst_0 E ψ1 p wfp wfψ1
Hwf2: well_formed ψ1^[[evar:E↦q]] = true
HeqHwf2: Hwf2 = well_formed_free_evar_subst_0 E ψ1 q wfq wfψ1
Hwf3: well_formed ψ2^[[evar:E↦p]] = true
HeqHwf3: Hwf3 = well_formed_free_evar_subst_0 E ψ2 p wfp wfψ2
Hwf4: well_formed ψ2^[[evar:E↦q]] = true
HeqHwf4: Hwf4 = well_formed_free_evar_subst_0 E ψ2 q wfq wfψ2
pile: ProofInfoLe (ExGen := ∅, SVSubst := ∅, KT := false, FP := {[ψ1^[[evar:E↦p]] ↾ Hwf1; ψ1^[[evar:E↦q]] ↾ Hwf2; ψ2^[[evar:E↦p]] ↾ Hwf3; ψ2^[[evar:E↦q]] ↾ Hwf4]}) i
pf₁: Γ ⊢i ψ1^[[evar:E↦p]] <---> ψ1^[[evar:E↦q]] using i
pf₂: Γ ⊢i ψ2^[[evar:E↦p]] ---> ψ2^[[evar:E↦q]] using i

Γ ⊢i ψ2^[[evar:E↦p]] ---> ψ2^[[evar:E↦q]] using i
Σ: Signature
Γ: Theory
ψ1, ψ2, p, q: Pattern
E: evar
i: ProofInfo
wfψ1: well_formed ψ1
wfψ2: well_formed ψ2
wfp: well_formed p
wfq: well_formed q
Hwf1: well_formed ψ1^[[evar:E↦p]] = true
HeqHwf1: Hwf1 = well_formed_free_evar_subst_0 E ψ1 p wfp wfψ1
Hwf2: well_formed ψ1^[[evar:E↦q]] = true
HeqHwf2: Hwf2 = well_formed_free_evar_subst_0 E ψ1 q wfq wfψ1
Hwf3: well_formed ψ2^[[evar:E↦p]] = true
HeqHwf3: Hwf3 = well_formed_free_evar_subst_0 E ψ2 p wfp wfψ2
Hwf4: well_formed ψ2^[[evar:E↦q]] = true
HeqHwf4: Hwf4 = well_formed_free_evar_subst_0 E ψ2 q wfq wfψ2
pile: ProofInfoLe (ExGen := ∅, SVSubst := ∅, KT := false, FP := {[ψ1^[[evar:E↦p]] ↾ Hwf1; ψ1^[[evar:E↦q]] ↾ Hwf2; ψ2^[[evar:E↦p]] ↾ Hwf3; ψ2^[[evar:E↦q]] ↾ Hwf4]}) i
pf₁: Γ ⊢i ψ1^[[evar:E↦p]] <---> ψ1^[[evar:E↦q]] using i
pf₂: Γ ⊢i ψ2^[[evar:E↦p]] <---> ψ2^[[evar:E↦q]] using i
well_formed (ψ2^[[evar:E↦p]] ---> ψ2^[[evar:E↦q]])
Σ: Signature
Γ: Theory
ψ1, ψ2, p, q: Pattern
E: evar
i: ProofInfo
wfψ1: well_formed ψ1
wfψ2: well_formed ψ2
wfp: well_formed p
wfq: well_formed q
Hwf1: well_formed ψ1^[[evar:E↦p]] = true
HeqHwf1: Hwf1 = well_formed_free_evar_subst_0 E ψ1 p wfp wfψ1
Hwf2: well_formed ψ1^[[evar:E↦q]] = true
HeqHwf2: Hwf2 = well_formed_free_evar_subst_0 E ψ1 q wfq wfψ1
Hwf3: well_formed ψ2^[[evar:E↦p]] = true
HeqHwf3: Hwf3 = well_formed_free_evar_subst_0 E ψ2 p wfp wfψ2
Hwf4: well_formed ψ2^[[evar:E↦q]] = true
HeqHwf4: Hwf4 = well_formed_free_evar_subst_0 E ψ2 q wfq wfψ2
pile: ProofInfoLe (ExGen := ∅, SVSubst := ∅, KT := false, FP := {[ψ1^[[evar:E↦p]] ↾ Hwf1; ψ1^[[evar:E↦q]] ↾ Hwf2; ψ2^[[evar:E↦p]] ↾ Hwf3; ψ2^[[evar:E↦q]] ↾ Hwf4]}) i
pf₁: Γ ⊢i ψ1^[[evar:E↦p]] <---> ψ1^[[evar:E↦q]] using i
pf₂: Γ ⊢i ψ2^[[evar:E↦p]] <---> ψ2^[[evar:E↦q]] using i
well_formed (ψ2^[[evar:E↦q]] ---> ψ2^[[evar:E↦p]])
Σ: Signature
Γ: Theory
ψ1, ψ2, p, q: Pattern
E: evar
i: ProofInfo
wfψ1: well_formed ψ1
wfψ2: well_formed ψ2
wfp: well_formed p
wfq: well_formed q
Hwf1: well_formed ψ1^[[evar:E↦p]] = true
HeqHwf1: Hwf1 = well_formed_free_evar_subst_0 E ψ1 p wfp wfψ1
Hwf2: well_formed ψ1^[[evar:E↦q]] = true
HeqHwf2: Hwf2 = well_formed_free_evar_subst_0 E ψ1 q wfq wfψ1
Hwf3: well_formed ψ2^[[evar:E↦p]] = true
HeqHwf3: Hwf3 = well_formed_free_evar_subst_0 E ψ2 p wfp wfψ2
Hwf4: well_formed ψ2^[[evar:E↦q]] = true
HeqHwf4: Hwf4 = well_formed_free_evar_subst_0 E ψ2 q wfq wfψ2
pile: ProofInfoLe (ExGen := ∅, SVSubst := ∅, KT := false, FP := {[ψ1^[[evar:E↦p]] ↾ Hwf1; ψ1^[[evar:E↦q]] ↾ Hwf2; ψ2^[[evar:E↦p]] ↾ Hwf3; ψ2^[[evar:E↦q]] ↾ Hwf4]}) i
pf₁: Γ ⊢i ψ1^[[evar:E↦p]] <---> ψ1^[[evar:E↦q]] using i
pf₂: Γ ⊢i ψ2^[[evar:E↦p]] <---> ψ2^[[evar:E↦q]] using i

well_formed (ψ2^[[evar:E↦p]] ---> ψ2^[[evar:E↦q]])
Σ: Signature
Γ: Theory
ψ1, ψ2, p, q: Pattern
E: evar
i: ProofInfo
wfψ1: well_formed ψ1
wfψ2: well_formed ψ2
wfp: well_formed p
wfq: well_formed q
Hwf1: well_formed ψ1^[[evar:E↦p]] = true
HeqHwf1: Hwf1 = well_formed_free_evar_subst_0 E ψ1 p wfp wfψ1
Hwf2: well_formed ψ1^[[evar:E↦q]] = true
HeqHwf2: Hwf2 = well_formed_free_evar_subst_0 E ψ1 q wfq wfψ1
Hwf3: well_formed ψ2^[[evar:E↦p]] = true
HeqHwf3: Hwf3 = well_formed_free_evar_subst_0 E ψ2 p wfp wfψ2
Hwf4: well_formed ψ2^[[evar:E↦q]] = true
HeqHwf4: Hwf4 = well_formed_free_evar_subst_0 E ψ2 q wfq wfψ2
pile: ProofInfoLe (ExGen := ∅, SVSubst := ∅, KT := false, FP := {[ψ1^[[evar:E↦p]] ↾ Hwf1; ψ1^[[evar:E↦q]] ↾ Hwf2; ψ2^[[evar:E↦p]] ↾ Hwf3; ψ2^[[evar:E↦q]] ↾ Hwf4]}) i
pf₁: Γ ⊢i ψ1^[[evar:E↦p]] <---> ψ1^[[evar:E↦q]] using i
pf₂: Γ ⊢i ψ2^[[evar:E↦p]] <---> ψ2^[[evar:E↦q]] using i
well_formed (ψ2^[[evar:E↦q]] ---> ψ2^[[evar:E↦p]])
Σ: Signature
Γ: Theory
ψ1, ψ2, p, q: Pattern
E: evar
i: ProofInfo
wfψ1: well_formed ψ1
wfψ2: well_formed ψ2
wfp: well_formed p
wfq: well_formed q
Hwf1: well_formed ψ1^[[evar:E↦p]] = true
HeqHwf1: Hwf1 = well_formed_free_evar_subst_0 E ψ1 p wfp wfψ1
Hwf2: well_formed ψ1^[[evar:E↦q]] = true
HeqHwf2: Hwf2 = well_formed_free_evar_subst_0 E ψ1 q wfq wfψ1
Hwf3: well_formed ψ2^[[evar:E↦p]] = true
HeqHwf3: Hwf3 = well_formed_free_evar_subst_0 E ψ2 p wfp wfψ2
Hwf4: well_formed ψ2^[[evar:E↦q]] = true
HeqHwf4: Hwf4 = well_formed_free_evar_subst_0 E ψ2 q wfq wfψ2
pile: ProofInfoLe (ExGen := ∅, SVSubst := ∅, KT := false, FP := {[ψ1^[[evar:E↦p]] ↾ Hwf1; ψ1^[[evar:E↦q]] ↾ Hwf2; ψ2^[[evar:E↦p]] ↾ Hwf3; ψ2^[[evar:E↦q]] ↾ Hwf4]}) i
pf₁: Γ ⊢i ψ1^[[evar:E↦p]] <---> ψ1^[[evar:E↦q]] using i
pf₂: Γ ⊢i ψ2^[[evar:E↦p]] <---> ψ2^[[evar:E↦q]] using i

well_formed (ψ2^[[evar:E↦p]] ---> ψ2^[[evar:E↦q]])
abstract (wf_auto2).
Σ: Signature
Γ: Theory
ψ1, ψ2, p, q: Pattern
E: evar
i: ProofInfo
wfψ1: well_formed ψ1
wfψ2: well_formed ψ2
wfp: well_formed p
wfq: well_formed q
Hwf1: well_formed ψ1^[[evar:E↦p]] = true
HeqHwf1: Hwf1 = well_formed_free_evar_subst_0 E ψ1 p wfp wfψ1
Hwf2: well_formed ψ1^[[evar:E↦q]] = true
HeqHwf2: Hwf2 = well_formed_free_evar_subst_0 E ψ1 q wfq wfψ1
Hwf3: well_formed ψ2^[[evar:E↦p]] = true
HeqHwf3: Hwf3 = well_formed_free_evar_subst_0 E ψ2 p wfp wfψ2
Hwf4: well_formed ψ2^[[evar:E↦q]] = true
HeqHwf4: Hwf4 = well_formed_free_evar_subst_0 E ψ2 q wfq wfψ2
pile: ProofInfoLe (ExGen := ∅, SVSubst := ∅, KT := false, FP := {[ψ1^[[evar:E↦p]] ↾ Hwf1; ψ1^[[evar:E↦q]] ↾ Hwf2; ψ2^[[evar:E↦p]] ↾ Hwf3; ψ2^[[evar:E↦q]] ↾ Hwf4]}) i
pf₁: Γ ⊢i ψ1^[[evar:E↦p]] <---> ψ1^[[evar:E↦q]] using i
pf₂: Γ ⊢i ψ2^[[evar:E↦p]] <---> ψ2^[[evar:E↦q]] using i

well_formed (ψ2^[[evar:E↦q]] ---> ψ2^[[evar:E↦p]])
Σ: Signature
Γ: Theory
ψ1, ψ2, p, q: Pattern
E: evar
i: ProofInfo
wfψ1: well_formed ψ1
wfψ2: well_formed ψ2
wfp: well_formed p
wfq: well_formed q
Hwf1: well_formed ψ1^[[evar:E↦p]] = true
HeqHwf1: Hwf1 = well_formed_free_evar_subst_0 E ψ1 p wfp wfψ1
Hwf2: well_formed ψ1^[[evar:E↦q]] = true
HeqHwf2: Hwf2 = well_formed_free_evar_subst_0 E ψ1 q wfq wfψ1
Hwf3: well_formed ψ2^[[evar:E↦p]] = true
HeqHwf3: Hwf3 = well_formed_free_evar_subst_0 E ψ2 p wfp wfψ2
Hwf4: well_formed ψ2^[[evar:E↦q]] = true
HeqHwf4: Hwf4 = well_formed_free_evar_subst_0 E ψ2 q wfq wfψ2
pile: ProofInfoLe (ExGen := ∅, SVSubst := ∅, KT := false, FP := {[ψ1^[[evar:E↦p]] ↾ Hwf1; ψ1^[[evar:E↦q]] ↾ Hwf2; ψ2^[[evar:E↦p]] ↾ Hwf3; ψ2^[[evar:E↦q]] ↾ Hwf4]}) i
pf₁: Γ ⊢i ψ1^[[evar:E↦p]] <---> ψ1^[[evar:E↦q]] using i
pf₂: Γ ⊢i ψ2^[[evar:E↦p]] <---> ψ2^[[evar:E↦q]] using i

well_formed (ψ2^[[evar:E↦q]] ---> ψ2^[[evar:E↦p]])
abstract (wf_auto2). } }
Σ: Signature
Γ: Theory
ψ1, ψ2, p, q: Pattern
E: evar
i: ProofInfo
wfψ1: well_formed ψ1
wfψ2: well_formed ψ2
wfp: well_formed p
wfq: well_formed q
Hwf1: well_formed ψ1^[[evar:E↦p]] = true
HeqHwf1: Hwf1 = well_formed_free_evar_subst_0 E ψ1 p wfp wfψ1
Hwf2: well_formed ψ1^[[evar:E↦q]] = true
HeqHwf2: Hwf2 = well_formed_free_evar_subst_0 E ψ1 q wfq wfψ1
Hwf3: well_formed ψ2^[[evar:E↦p]] = true
HeqHwf3: Hwf3 = well_formed_free_evar_subst_0 E ψ2 p wfp wfψ2
Hwf4: well_formed ψ2^[[evar:E↦q]] = true
HeqHwf4: Hwf4 = well_formed_free_evar_subst_0 E ψ2 q wfq wfψ2
pile: ProofInfoLe (ExGen := ∅, SVSubst := ∅, KT := false, FP := {[ψ1^[[evar:E↦p]] ↾ Hwf1; ψ1^[[evar:E↦q]] ↾ Hwf2; ψ2^[[evar:E↦p]] ↾ Hwf3; ψ2^[[evar:E↦q]] ↾ Hwf4]}) i
pf₁: Γ ⊢i ψ1^[[evar:E↦p]] <---> ψ1^[[evar:E↦q]] using i
pf₂: Γ ⊢i ψ2^[[evar:E↦p]] <---> ψ2^[[evar:E↦q]] using i

well_formed (ψ1^[[evar:E↦q]] $ ψ2^[[evar:E↦p]] ---> ψ1^[[evar:E↦q]] $ ψ2^[[evar:E↦q]])
Σ: Signature
Γ: Theory
ψ1, ψ2, p, q: Pattern
E: evar
i: ProofInfo
wfψ1: well_formed ψ1
wfψ2: well_formed ψ2
wfp: well_formed p
wfq: well_formed q
Hwf1: well_formed ψ1^[[evar:E↦p]] = true
HeqHwf1: Hwf1 = well_formed_free_evar_subst_0 E ψ1 p wfp wfψ1
Hwf2: well_formed ψ1^[[evar:E↦q]] = true
HeqHwf2: Hwf2 = well_formed_free_evar_subst_0 E ψ1 q wfq wfψ1
Hwf3: well_formed ψ2^[[evar:E↦p]] = true
HeqHwf3: Hwf3 = well_formed_free_evar_subst_0 E ψ2 p wfp wfψ2
Hwf4: well_formed ψ2^[[evar:E↦q]] = true
HeqHwf4: Hwf4 = well_formed_free_evar_subst_0 E ψ2 q wfq wfψ2
pile: ProofInfoLe (ExGen := ∅, SVSubst := ∅, KT := false, FP := {[ψ1^[[evar:E↦p]] ↾ Hwf1; ψ1^[[evar:E↦q]] ↾ Hwf2; ψ2^[[evar:E↦p]] ↾ Hwf3; ψ2^[[evar:E↦q]] ↾ Hwf4]}) i
pf₁: Γ ⊢i ψ1^[[evar:E↦p]] <---> ψ1^[[evar:E↦q]] using i
pf₂: Γ ⊢i ψ2^[[evar:E↦p]] <---> ψ2^[[evar:E↦q]] using i
well_formed (ψ1^[[evar:E↦q]] $ ψ2^[[evar:E↦q]] ---> ψ1^[[evar:E↦q]] $ ψ2^[[evar:E↦p]])
Σ: Signature
Γ: Theory
ψ1, ψ2, p, q: Pattern
E: evar
i: ProofInfo
wfψ1: well_formed ψ1
wfψ2: well_formed ψ2
wfp: well_formed p
wfq: well_formed q
Hwf1: well_formed ψ1^[[evar:E↦p]] = true
HeqHwf1: Hwf1 = well_formed_free_evar_subst_0 E ψ1 p wfp wfψ1
Hwf2: well_formed ψ1^[[evar:E↦q]] = true
HeqHwf2: Hwf2 = well_formed_free_evar_subst_0 E ψ1 q wfq wfψ1
Hwf3: well_formed ψ2^[[evar:E↦p]] = true
HeqHwf3: Hwf3 = well_formed_free_evar_subst_0 E ψ2 p wfp wfψ2
Hwf4: well_formed ψ2^[[evar:E↦q]] = true
HeqHwf4: Hwf4 = well_formed_free_evar_subst_0 E ψ2 q wfq wfψ2
pile: ProofInfoLe (ExGen := ∅, SVSubst := ∅, KT := false, FP := {[ψ1^[[evar:E↦p]] ↾ Hwf1; ψ1^[[evar:E↦q]] ↾ Hwf2; ψ2^[[evar:E↦p]] ↾ Hwf3; ψ2^[[evar:E↦q]] ↾ Hwf4]}) i
pf₁: Γ ⊢i ψ1^[[evar:E↦p]] <---> ψ1^[[evar:E↦q]] using i
pf₂: Γ ⊢i ψ2^[[evar:E↦p]] <---> ψ2^[[evar:E↦q]] using i

well_formed (ψ1^[[evar:E↦q]] $ ψ2^[[evar:E↦p]] ---> ψ1^[[evar:E↦q]] $ ψ2^[[evar:E↦q]])
abstract (wf_auto2).
Σ: Signature
Γ: Theory
ψ1, ψ2, p, q: Pattern
E: evar
i: ProofInfo
wfψ1: well_formed ψ1
wfψ2: well_formed ψ2
wfp: well_formed p
wfq: well_formed q
Hwf1: well_formed ψ1^[[evar:E↦p]] = true
HeqHwf1: Hwf1 = well_formed_free_evar_subst_0 E ψ1 p wfp wfψ1
Hwf2: well_formed ψ1^[[evar:E↦q]] = true
HeqHwf2: Hwf2 = well_formed_free_evar_subst_0 E ψ1 q wfq wfψ1
Hwf3: well_formed ψ2^[[evar:E↦p]] = true
HeqHwf3: Hwf3 = well_formed_free_evar_subst_0 E ψ2 p wfp wfψ2
Hwf4: well_formed ψ2^[[evar:E↦q]] = true
HeqHwf4: Hwf4 = well_formed_free_evar_subst_0 E ψ2 q wfq wfψ2
pile: ProofInfoLe (ExGen := ∅, SVSubst := ∅, KT := false, FP := {[ψ1^[[evar:E↦p]] ↾ Hwf1; ψ1^[[evar:E↦q]] ↾ Hwf2; ψ2^[[evar:E↦p]] ↾ Hwf3; ψ2^[[evar:E↦q]] ↾ Hwf4]}) i
pf₁: Γ ⊢i ψ1^[[evar:E↦p]] <---> ψ1^[[evar:E↦q]] using i
pf₂: Γ ⊢i ψ2^[[evar:E↦p]] <---> ψ2^[[evar:E↦q]] using i

well_formed (ψ1^[[evar:E↦q]] $ ψ2^[[evar:E↦q]] ---> ψ1^[[evar:E↦q]] $ ψ2^[[evar:E↦p]])
Σ: Signature
Γ: Theory
ψ1, ψ2, p, q: Pattern
E: evar
i: ProofInfo
wfψ1: well_formed ψ1
wfψ2: well_formed ψ2
wfp: well_formed p
wfq: well_formed q
Hwf1: well_formed ψ1^[[evar:E↦p]] = true
HeqHwf1: Hwf1 = well_formed_free_evar_subst_0 E ψ1 p wfp wfψ1
Hwf2: well_formed ψ1^[[evar:E↦q]] = true
HeqHwf2: Hwf2 = well_formed_free_evar_subst_0 E ψ1 q wfq wfψ1
Hwf3: well_formed ψ2^[[evar:E↦p]] = true
HeqHwf3: Hwf3 = well_formed_free_evar_subst_0 E ψ2 p wfp wfψ2
Hwf4: well_formed ψ2^[[evar:E↦q]] = true
HeqHwf4: Hwf4 = well_formed_free_evar_subst_0 E ψ2 q wfq wfψ2
pile: ProofInfoLe (ExGen := ∅, SVSubst := ∅, KT := false, FP := {[ψ1^[[evar:E↦p]] ↾ Hwf1; ψ1^[[evar:E↦q]] ↾ Hwf2; ψ2^[[evar:E↦p]] ↾ Hwf3; ψ2^[[evar:E↦q]] ↾ Hwf4]}) i
pf₁: Γ ⊢i ψ1^[[evar:E↦p]] <---> ψ1^[[evar:E↦q]] using i
pf₂: Γ ⊢i ψ2^[[evar:E↦p]] <---> ψ2^[[evar:E↦q]] using i

well_formed (ψ1^[[evar:E↦q]] $ ψ2^[[evar:E↦q]] ---> ψ1^[[evar:E↦q]] $ ψ2^[[evar:E↦p]])
abstract (wf_auto2). }
Σ: Signature
Γ: Theory
ψ1, ψ2, p, q: Pattern
E: evar
i: ProofInfo
wfψ1: well_formed ψ1
wfψ2: well_formed ψ2
wfp: well_formed p
wfq: well_formed q
Hwf1: well_formed ψ1^[[evar:E↦p]] = true
HeqHwf1: Hwf1 = well_formed_free_evar_subst_0 E ψ1 p wfp wfψ1
Hwf2: well_formed ψ1^[[evar:E↦q]] = true
HeqHwf2: Hwf2 = well_formed_free_evar_subst_0 E ψ1 q wfq wfψ1
Hwf3: well_formed ψ2^[[evar:E↦p]] = true
HeqHwf3: Hwf3 = well_formed_free_evar_subst_0 E ψ2 p wfp wfψ2
Hwf4: well_formed ψ2^[[evar:E↦q]] = true
HeqHwf4: Hwf4 = well_formed_free_evar_subst_0 E ψ2 q wfq wfψ2
pile: ProofInfoLe (ExGen := ∅, SVSubst := ∅, KT := false, FP := {[ψ1^[[evar:E↦p]] ↾ Hwf1; ψ1^[[evar:E↦q]] ↾ Hwf2; ψ2^[[evar:E↦p]] ↾ Hwf3; ψ2^[[evar:E↦q]] ↾ Hwf4]}) i
pf₁: Γ ⊢i ψ1^[[evar:E↦p]] <---> ψ1^[[evar:E↦q]] using i
pf₂: Γ ⊢i ψ2^[[evar:E↦p]] <---> ψ2^[[evar:E↦q]] using i

well_formed (ψ1^[[evar:E↦p]] $ ψ2^[[evar:E↦p]])
Σ: Signature
Γ: Theory
ψ1, ψ2, p, q: Pattern
E: evar
i: ProofInfo
wfψ1: well_formed ψ1
wfψ2: well_formed ψ2
wfp: well_formed p
wfq: well_formed q
Hwf1: well_formed ψ1^[[evar:E↦p]] = true
HeqHwf1: Hwf1 = well_formed_free_evar_subst_0 E ψ1 p wfp wfψ1
Hwf2: well_formed ψ1^[[evar:E↦q]] = true
HeqHwf2: Hwf2 = well_formed_free_evar_subst_0 E ψ1 q wfq wfψ1
Hwf3: well_formed ψ2^[[evar:E↦p]] = true
HeqHwf3: Hwf3 = well_formed_free_evar_subst_0 E ψ2 p wfp wfψ2
Hwf4: well_formed ψ2^[[evar:E↦q]] = true
HeqHwf4: Hwf4 = well_formed_free_evar_subst_0 E ψ2 q wfq wfψ2
pile: ProofInfoLe (ExGen := ∅, SVSubst := ∅, KT := false, FP := {[ψ1^[[evar:E↦p]] ↾ Hwf1; ψ1^[[evar:E↦q]] ↾ Hwf2; ψ2^[[evar:E↦p]] ↾ Hwf3; ψ2^[[evar:E↦q]] ↾ Hwf4]}) i
pf₁: Γ ⊢i ψ1^[[evar:E↦p]] <---> ψ1^[[evar:E↦q]] using i
pf₂: Γ ⊢i ψ2^[[evar:E↦p]] <---> ψ2^[[evar:E↦q]] using i
well_formed (ψ1^[[evar:E↦q]] $ ψ2^[[evar:E↦p]])
Σ: Signature
Γ: Theory
ψ1, ψ2, p, q: Pattern
E: evar
i: ProofInfo
wfψ1: well_formed ψ1
wfψ2: well_formed ψ2
wfp: well_formed p
wfq: well_formed q
Hwf1: well_formed ψ1^[[evar:E↦p]] = true
HeqHwf1: Hwf1 = well_formed_free_evar_subst_0 E ψ1 p wfp wfψ1
Hwf2: well_formed ψ1^[[evar:E↦q]] = true
HeqHwf2: Hwf2 = well_formed_free_evar_subst_0 E ψ1 q wfq wfψ1
Hwf3: well_formed ψ2^[[evar:E↦p]] = true
HeqHwf3: Hwf3 = well_formed_free_evar_subst_0 E ψ2 p wfp wfψ2
Hwf4: well_formed ψ2^[[evar:E↦q]] = true
HeqHwf4: Hwf4 = well_formed_free_evar_subst_0 E ψ2 q wfq wfψ2
pile: ProofInfoLe (ExGen := ∅, SVSubst := ∅, KT := false, FP := {[ψ1^[[evar:E↦p]] ↾ Hwf1; ψ1^[[evar:E↦q]] ↾ Hwf2; ψ2^[[evar:E↦p]] ↾ Hwf3; ψ2^[[evar:E↦q]] ↾ Hwf4]}) i
pf₁: Γ ⊢i ψ1^[[evar:E↦p]] <---> ψ1^[[evar:E↦q]] using i
pf₂: Γ ⊢i ψ2^[[evar:E↦p]] <---> ψ2^[[evar:E↦q]] using i
well_formed (ψ1^[[evar:E↦q]] $ ψ2^[[evar:E↦q]])
Σ: Signature
Γ: Theory
ψ1, ψ2, p, q: Pattern
E: evar
i: ProofInfo
wfψ1: well_formed ψ1
wfψ2: well_formed ψ2
wfp: well_formed p
wfq: well_formed q
Hwf1: well_formed ψ1^[[evar:E↦p]] = true
HeqHwf1: Hwf1 = well_formed_free_evar_subst_0 E ψ1 p wfp wfψ1
Hwf2: well_formed ψ1^[[evar:E↦q]] = true
HeqHwf2: Hwf2 = well_formed_free_evar_subst_0 E ψ1 q wfq wfψ1
Hwf3: well_formed ψ2^[[evar:E↦p]] = true
HeqHwf3: Hwf3 = well_formed_free_evar_subst_0 E ψ2 p wfp wfψ2
Hwf4: well_formed ψ2^[[evar:E↦q]] = true
HeqHwf4: Hwf4 = well_formed_free_evar_subst_0 E ψ2 q wfq wfψ2
pile: ProofInfoLe (ExGen := ∅, SVSubst := ∅, KT := false, FP := {[ψ1^[[evar:E↦p]] ↾ Hwf1; ψ1^[[evar:E↦q]] ↾ Hwf2; ψ2^[[evar:E↦p]] ↾ Hwf3; ψ2^[[evar:E↦q]] ↾ Hwf4]}) i
pf₁: Γ ⊢i ψ1^[[evar:E↦p]] <---> ψ1^[[evar:E↦q]] using i
pf₂: Γ ⊢i ψ2^[[evar:E↦p]] <---> ψ2^[[evar:E↦q]] using i
Γ ⊢i ψ1^[[evar:E↦p]] $ ψ2^[[evar:E↦p]] <---> ψ1^[[evar:E↦q]] $ ψ2^[[evar:E↦p]] using i
Σ: Signature
Γ: Theory
ψ1, ψ2, p, q: Pattern
E: evar
i: ProofInfo
wfψ1: well_formed ψ1
wfψ2: well_formed ψ2
wfp: well_formed p
wfq: well_formed q
Hwf1: well_formed ψ1^[[evar:E↦p]] = true
HeqHwf1: Hwf1 = well_formed_free_evar_subst_0 E ψ1 p wfp wfψ1
Hwf2: well_formed ψ1^[[evar:E↦q]] = true
HeqHwf2: Hwf2 = well_formed_free_evar_subst_0 E ψ1 q wfq wfψ1
Hwf3: well_formed ψ2^[[evar:E↦p]] = true
HeqHwf3: Hwf3 = well_formed_free_evar_subst_0 E ψ2 p wfp wfψ2
Hwf4: well_formed ψ2^[[evar:E↦q]] = true
HeqHwf4: Hwf4 = well_formed_free_evar_subst_0 E ψ2 q wfq wfψ2
pile: ProofInfoLe (ExGen := ∅, SVSubst := ∅, KT := false, FP := {[ψ1^[[evar:E↦p]] ↾ Hwf1; ψ1^[[evar:E↦q]] ↾ Hwf2; ψ2^[[evar:E↦p]] ↾ Hwf3; ψ2^[[evar:E↦q]] ↾ Hwf4]}) i
pf₁: Γ ⊢i ψ1^[[evar:E↦p]] <---> ψ1^[[evar:E↦q]] using i
pf₂: Γ ⊢i ψ2^[[evar:E↦p]] <---> ψ2^[[evar:E↦q]] using i

Γ ⊢i ψ1^[[evar:E↦p]] $ ψ2^[[evar:E↦p]] <---> ψ1^[[evar:E↦q]] $ ψ2^[[evar:E↦p]] using i
Σ: Signature
Γ: Theory
ψ1, ψ2, p, q: Pattern
E: evar
i: ProofInfo
wfψ1: well_formed ψ1
wfψ2: well_formed ψ2
wfp: well_formed p
wfq: well_formed q
Hwf1: well_formed ψ1^[[evar:E↦p]] = true
HeqHwf1: Hwf1 = well_formed_free_evar_subst_0 E ψ1 p wfp wfψ1
Hwf2: well_formed ψ1^[[evar:E↦q]] = true
HeqHwf2: Hwf2 = well_formed_free_evar_subst_0 E ψ1 q wfq wfψ1
Hwf3: well_formed ψ2^[[evar:E↦p]] = true
HeqHwf3: Hwf3 = well_formed_free_evar_subst_0 E ψ2 p wfp wfψ2
Hwf4: well_formed ψ2^[[evar:E↦q]] = true
HeqHwf4: Hwf4 = well_formed_free_evar_subst_0 E ψ2 q wfq wfψ2
pile: ProofInfoLe (ExGen := ∅, SVSubst := ∅, KT := false, FP := {[ψ1^[[evar:E↦p]] ↾ Hwf1; ψ1^[[evar:E↦q]] ↾ Hwf2; ψ2^[[evar:E↦p]] ↾ Hwf3; ψ2^[[evar:E↦q]] ↾ Hwf4]}) i
pf₁: Γ ⊢i ψ1^[[evar:E↦p]] <---> ψ1^[[evar:E↦q]] using i
pf₂: Γ ⊢i ψ2^[[evar:E↦p]] <---> ψ2^[[evar:E↦q]] using i

well_formed (ψ1^[[evar:E↦p]] $ ψ2^[[evar:E↦p]] ---> ψ1^[[evar:E↦q]] $ ψ2^[[evar:E↦p]])
Σ: Signature
Γ: Theory
ψ1, ψ2, p, q: Pattern
E: evar
i: ProofInfo
wfψ1: well_formed ψ1
wfψ2: well_formed ψ2
wfp: well_formed p
wfq: well_formed q
Hwf1: well_formed ψ1^[[evar:E↦p]] = true
HeqHwf1: Hwf1 = well_formed_free_evar_subst_0 E ψ1 p wfp wfψ1
Hwf2: well_formed ψ1^[[evar:E↦q]] = true
HeqHwf2: Hwf2 = well_formed_free_evar_subst_0 E ψ1 q wfq wfψ1
Hwf3: well_formed ψ2^[[evar:E↦p]] = true
HeqHwf3: Hwf3 = well_formed_free_evar_subst_0 E ψ2 p wfp wfψ2
Hwf4: well_formed ψ2^[[evar:E↦q]] = true
HeqHwf4: Hwf4 = well_formed_free_evar_subst_0 E ψ2 q wfq wfψ2
pile: ProofInfoLe (ExGen := ∅, SVSubst := ∅, KT := false, FP := {[ψ1^[[evar:E↦p]] ↾ Hwf1; ψ1^[[evar:E↦q]] ↾ Hwf2; ψ2^[[evar:E↦p]] ↾ Hwf3; ψ2^[[evar:E↦q]] ↾ Hwf4]}) i
pf₁: Γ ⊢i ψ1^[[evar:E↦p]] <---> ψ1^[[evar:E↦q]] using i
pf₂: Γ ⊢i ψ2^[[evar:E↦p]] <---> ψ2^[[evar:E↦q]] using i
well_formed (ψ1^[[evar:E↦q]] $ ψ2^[[evar:E↦p]] ---> ψ1^[[evar:E↦p]] $ ψ2^[[evar:E↦p]])
Σ: Signature
Γ: Theory
ψ1, ψ2, p, q: Pattern
E: evar
i: ProofInfo
wfψ1: well_formed ψ1
wfψ2: well_formed ψ2
wfp: well_formed p
wfq: well_formed q
Hwf1: well_formed ψ1^[[evar:E↦p]] = true
HeqHwf1: Hwf1 = well_formed_free_evar_subst_0 E ψ1 p wfp wfψ1
Hwf2: well_formed ψ1^[[evar:E↦q]] = true
HeqHwf2: Hwf2 = well_formed_free_evar_subst_0 E ψ1 q wfq wfψ1
Hwf3: well_formed ψ2^[[evar:E↦p]] = true
HeqHwf3: Hwf3 = well_formed_free_evar_subst_0 E ψ2 p wfp wfψ2
Hwf4: well_formed ψ2^[[evar:E↦q]] = true
HeqHwf4: Hwf4 = well_formed_free_evar_subst_0 E ψ2 q wfq wfψ2
pile: ProofInfoLe (ExGen := ∅, SVSubst := ∅, KT := false, FP := {[ψ1^[[evar:E↦p]] ↾ Hwf1; ψ1^[[evar:E↦q]] ↾ Hwf2; ψ2^[[evar:E↦p]] ↾ Hwf3; ψ2^[[evar:E↦q]] ↾ Hwf4]}) i
pf₁: Γ ⊢i ψ1^[[evar:E↦p]] <---> ψ1^[[evar:E↦q]] using i
pf₂: Γ ⊢i ψ2^[[evar:E↦p]] <---> ψ2^[[evar:E↦q]] using i
Γ ⊢i ψ1^[[evar:E↦p]] $ ψ2^[[evar:E↦p]] ---> ψ1^[[evar:E↦q]] $ ψ2^[[evar:E↦p]] using i
Σ: Signature
Γ: Theory
ψ1, ψ2, p, q: Pattern
E: evar
i: ProofInfo
wfψ1: well_formed ψ1
wfψ2: well_formed ψ2
wfp: well_formed p
wfq: well_formed q
Hwf1: well_formed ψ1^[[evar:E↦p]] = true
HeqHwf1: Hwf1 = well_formed_free_evar_subst_0 E ψ1 p wfp wfψ1
Hwf2: well_formed ψ1^[[evar:E↦q]] = true
HeqHwf2: Hwf2 = well_formed_free_evar_subst_0 E ψ1 q wfq wfψ1
Hwf3: well_formed ψ2^[[evar:E↦p]] = true
HeqHwf3: Hwf3 = well_formed_free_evar_subst_0 E ψ2 p wfp wfψ2
Hwf4: well_formed ψ2^[[evar:E↦q]] = true
HeqHwf4: Hwf4 = well_formed_free_evar_subst_0 E ψ2 q wfq wfψ2
pile: ProofInfoLe (ExGen := ∅, SVSubst := ∅, KT := false, FP := {[ψ1^[[evar:E↦p]] ↾ Hwf1; ψ1^[[evar:E↦q]] ↾ Hwf2; ψ2^[[evar:E↦p]] ↾ Hwf3; ψ2^[[evar:E↦q]] ↾ Hwf4]}) i
pf₁: Γ ⊢i ψ1^[[evar:E↦p]] <---> ψ1^[[evar:E↦q]] using i
pf₂: Γ ⊢i ψ2^[[evar:E↦p]] <---> ψ2^[[evar:E↦q]] using i
Γ ⊢i ψ1^[[evar:E↦q]] $ ψ2^[[evar:E↦p]] ---> ψ1^[[evar:E↦p]] $ ψ2^[[evar:E↦p]] using i
Σ: Signature
Γ: Theory
ψ1, ψ2, p, q: Pattern
E: evar
i: ProofInfo
wfψ1: well_formed ψ1
wfψ2: well_formed ψ2
wfp: well_formed p
wfq: well_formed q
Hwf1: well_formed ψ1^[[evar:E↦p]] = true
HeqHwf1: Hwf1 = well_formed_free_evar_subst_0 E ψ1 p wfp wfψ1
Hwf2: well_formed ψ1^[[evar:E↦q]] = true
HeqHwf2: Hwf2 = well_formed_free_evar_subst_0 E ψ1 q wfq wfψ1
Hwf3: well_formed ψ2^[[evar:E↦p]] = true
HeqHwf3: Hwf3 = well_formed_free_evar_subst_0 E ψ2 p wfp wfψ2
Hwf4: well_formed ψ2^[[evar:E↦q]] = true
HeqHwf4: Hwf4 = well_formed_free_evar_subst_0 E ψ2 q wfq wfψ2
pile: ProofInfoLe (ExGen := ∅, SVSubst := ∅, KT := false, FP := {[ψ1^[[evar:E↦p]] ↾ Hwf1; ψ1^[[evar:E↦q]] ↾ Hwf2; ψ2^[[evar:E↦p]] ↾ Hwf3; ψ2^[[evar:E↦q]] ↾ Hwf4]}) i
pf₁: Γ ⊢i ψ1^[[evar:E↦p]] <---> ψ1^[[evar:E↦q]] using i
pf₂: Γ ⊢i ψ2^[[evar:E↦p]] <---> ψ2^[[evar:E↦q]] using i

Γ ⊢i ψ1^[[evar:E↦q]] $ ψ2^[[evar:E↦p]] ---> ψ1^[[evar:E↦p]] $ ψ2^[[evar:E↦p]] using i
Σ: Signature
Γ: Theory
ψ1, ψ2, p, q: Pattern
E: evar
i: ProofInfo
wfψ1: well_formed ψ1
wfψ2: well_formed ψ2
wfp: well_formed p
wfq: well_formed q
Hwf1: well_formed ψ1^[[evar:E↦p]] = true
HeqHwf1: Hwf1 = well_formed_free_evar_subst_0 E ψ1 p wfp wfψ1
Hwf2: well_formed ψ1^[[evar:E↦q]] = true
HeqHwf2: Hwf2 = well_formed_free_evar_subst_0 E ψ1 q wfq wfψ1
Hwf3: well_formed ψ2^[[evar:E↦p]] = true
HeqHwf3: Hwf3 = well_formed_free_evar_subst_0 E ψ2 p wfp wfψ2
Hwf4: well_formed ψ2^[[evar:E↦q]] = true
HeqHwf4: Hwf4 = well_formed_free_evar_subst_0 E ψ2 q wfq wfψ2
pile: ProofInfoLe (ExGen := ∅, SVSubst := ∅, KT := false, FP := {[ψ1^[[evar:E↦p]] ↾ Hwf1; ψ1^[[evar:E↦q]] ↾ Hwf2; ψ2^[[evar:E↦p]] ↾ Hwf3; ψ2^[[evar:E↦q]] ↾ Hwf4]}) i
pf₁: Γ ⊢i ψ1^[[evar:E↦p]] <---> ψ1^[[evar:E↦q]] using i
pf₂: Γ ⊢i ψ2^[[evar:E↦p]] <---> ψ2^[[evar:E↦q]] using i

ProofInfoLe (ExGen := ∅, SVSubst := ∅, KT := false, FP := {[ψ2^[[evar:E↦p]] ↾ Hwf3]}) i
Σ: Signature
Γ: Theory
ψ1, ψ2, p, q: Pattern
E: evar
i: ProofInfo
wfψ1: well_formed ψ1
wfψ2: well_formed ψ2
wfp: well_formed p
wfq: well_formed q
Hwf1: well_formed ψ1^[[evar:E↦p]] = true
HeqHwf1: Hwf1 = well_formed_free_evar_subst_0 E ψ1 p wfp wfψ1
Hwf2: well_formed ψ1^[[evar:E↦q]] = true
HeqHwf2: Hwf2 = well_formed_free_evar_subst_0 E ψ1 q wfq wfψ1
Hwf3: well_formed ψ2^[[evar:E↦p]] = true
HeqHwf3: Hwf3 = well_formed_free_evar_subst_0 E ψ2 p wfp wfψ2
Hwf4: well_formed ψ2^[[evar:E↦q]] = true
HeqHwf4: Hwf4 = well_formed_free_evar_subst_0 E ψ2 q wfq wfψ2
pile: ProofInfoLe (ExGen := ∅, SVSubst := ∅, KT := false, FP := {[ψ1^[[evar:E↦p]] ↾ Hwf1; ψ1^[[evar:E↦q]] ↾ Hwf2; ψ2^[[evar:E↦p]] ↾ Hwf3; ψ2^[[evar:E↦q]] ↾ Hwf4]}) i
pf₁: Γ ⊢i ψ1^[[evar:E↦p]] <---> ψ1^[[evar:E↦q]] using i
pf₂: Γ ⊢i ψ2^[[evar:E↦p]] <---> ψ2^[[evar:E↦q]] using i
Γ ⊢i ψ1^[[evar:E↦q]] ---> ψ1^[[evar:E↦p]] using i
Σ: Signature
Γ: Theory
ψ1, ψ2, p, q: Pattern
E: evar
i: ProofInfo
wfψ1: well_formed ψ1
wfψ2: well_formed ψ2
wfp: well_formed p
wfq: well_formed q
Hwf1: well_formed ψ1^[[evar:E↦p]] = true
HeqHwf1: Hwf1 = well_formed_free_evar_subst_0 E ψ1 p wfp wfψ1
Hwf2: well_formed ψ1^[[evar:E↦q]] = true
HeqHwf2: Hwf2 = well_formed_free_evar_subst_0 E ψ1 q wfq wfψ1
Hwf3: well_formed ψ2^[[evar:E↦p]] = true
HeqHwf3: Hwf3 = well_formed_free_evar_subst_0 E ψ2 p wfp wfψ2
Hwf4: well_formed ψ2^[[evar:E↦q]] = true
HeqHwf4: Hwf4 = well_formed_free_evar_subst_0 E ψ2 q wfq wfψ2
pile: ProofInfoLe (ExGen := ∅, SVSubst := ∅, KT := false, FP := {[ψ1^[[evar:E↦p]] ↾ Hwf1; ψ1^[[evar:E↦q]] ↾ Hwf2; ψ2^[[evar:E↦p]] ↾ Hwf3; ψ2^[[evar:E↦q]] ↾ Hwf4]}) i
pf₁: Γ ⊢i ψ1^[[evar:E↦p]] <---> ψ1^[[evar:E↦q]] using i
pf₂: Γ ⊢i ψ2^[[evar:E↦p]] <---> ψ2^[[evar:E↦q]] using i

ProofInfoLe (ExGen := ∅, SVSubst := ∅, KT := false, FP := {[ψ2^[[evar:E↦p]] ↾ Hwf3]}) i
Σ: Signature
Γ: Theory
ψ1, ψ2, p, q: Pattern
E: evar
i: ProofInfo
wfψ1: well_formed ψ1
wfψ2: well_formed ψ2
wfp: well_formed p
wfq: well_formed q
Hwf1: well_formed ψ1^[[evar:E↦p]] = true
HeqHwf1: Hwf1 = well_formed_free_evar_subst_0 E ψ1 p wfp wfψ1
Hwf2: well_formed ψ1^[[evar:E↦q]] = true
HeqHwf2: Hwf2 = well_formed_free_evar_subst_0 E ψ1 q wfq wfψ1
Hwf3: well_formed ψ2^[[evar:E↦p]] = true
HeqHwf3: Hwf3 = well_formed_free_evar_subst_0 E ψ2 p wfp wfψ2
Hwf4: well_formed ψ2^[[evar:E↦q]] = true
HeqHwf4: Hwf4 = well_formed_free_evar_subst_0 E ψ2 q wfq wfψ2
pile: ProofInfoLe (ExGen := ∅, SVSubst := ∅, KT := false, FP := {[ψ1^[[evar:E↦p]] ↾ Hwf1; ψ1^[[evar:E↦q]] ↾ Hwf2; ψ2^[[evar:E↦p]] ↾ Hwf3; ψ2^[[evar:E↦q]] ↾ Hwf4]}) i
pf₁: Γ ⊢i ψ1^[[evar:E↦p]] <---> ψ1^[[evar:E↦q]] using i
pf₂: Γ ⊢i ψ2^[[evar:E↦p]] <---> ψ2^[[evar:E↦q]] using i

ProofInfoLe (ExGen := ∅, SVSubst := ∅, KT := false, FP := {[ψ2^[[evar:E↦p]] ↾ Hwf3]}) ?i₂
Σ: Signature
Γ: Theory
ψ1, ψ2, p, q: Pattern
E: evar
i: ProofInfo
wfψ1: well_formed ψ1
wfψ2: well_formed ψ2
wfp: well_formed p
wfq: well_formed q
Hwf1: well_formed ψ1^[[evar:E↦p]] = true
HeqHwf1: Hwf1 = well_formed_free_evar_subst_0 E ψ1 p wfp wfψ1
Hwf2: well_formed ψ1^[[evar:E↦q]] = true
HeqHwf2: Hwf2 = well_formed_free_evar_subst_0 E ψ1 q wfq wfψ1
Hwf3: well_formed ψ2^[[evar:E↦p]] = true
HeqHwf3: Hwf3 = well_formed_free_evar_subst_0 E ψ2 p wfp wfψ2
Hwf4: well_formed ψ2^[[evar:E↦q]] = true
HeqHwf4: Hwf4 = well_formed_free_evar_subst_0 E ψ2 q wfq wfψ2
pile: ProofInfoLe (ExGen := ∅, SVSubst := ∅, KT := false, FP := {[ψ1^[[evar:E↦p]] ↾ Hwf1; ψ1^[[evar:E↦q]] ↾ Hwf2; ψ2^[[evar:E↦p]] ↾ Hwf3; ψ2^[[evar:E↦q]] ↾ Hwf4]}) i
pf₁: Γ ⊢i ψ1^[[evar:E↦p]] <---> ψ1^[[evar:E↦q]] using i
pf₂: Γ ⊢i ψ2^[[evar:E↦p]] <---> ψ2^[[evar:E↦q]] using i
ProofInfoLe ?i₂ i
Σ: Signature
Γ: Theory
ψ1, ψ2, p, q: Pattern
E: evar
i: ProofInfo
wfψ1: well_formed ψ1
wfψ2: well_formed ψ2
wfp: well_formed p
wfq: well_formed q
Hwf1: well_formed ψ1^[[evar:E↦p]] = true
HeqHwf1: Hwf1 = well_formed_free_evar_subst_0 E ψ1 p wfp wfψ1
Hwf2: well_formed ψ1^[[evar:E↦q]] = true
HeqHwf2: Hwf2 = well_formed_free_evar_subst_0 E ψ1 q wfq wfψ1
Hwf3: well_formed ψ2^[[evar:E↦p]] = true
HeqHwf3: Hwf3 = well_formed_free_evar_subst_0 E ψ2 p wfp wfψ2
Hwf4: well_formed ψ2^[[evar:E↦q]] = true
HeqHwf4: Hwf4 = well_formed_free_evar_subst_0 E ψ2 q wfq wfψ2
pile: ProofInfoLe (ExGen := ∅, SVSubst := ∅, KT := false, FP := {[ψ1^[[evar:E↦p]] ↾ Hwf1; ψ1^[[evar:E↦q]] ↾ Hwf2; ψ2^[[evar:E↦p]] ↾ Hwf3; ψ2^[[evar:E↦q]] ↾ Hwf4]}) i
pf₁: Γ ⊢i ψ1^[[evar:E↦p]] <---> ψ1^[[evar:E↦q]] using i
pf₂: Γ ⊢i ψ2^[[evar:E↦p]] <---> ψ2^[[evar:E↦q]] using i

ProofInfoLe (ExGen := ∅, SVSubst := ∅, KT := false, FP := {[ψ2^[[evar:E↦p]] ↾ Hwf3]}) (ExGen := ∅, SVSubst := ∅, KT := false, FP := {[ψ1^[[evar:E↦p]] ↾ Hwf1; ψ1^[[evar:E↦q]] ↾ Hwf2; ψ2^[[evar:E↦p]] ↾ Hwf3; ψ2^[[evar:E↦q]] ↾ Hwf4]})
try_solve_pile.
Σ: Signature
Γ: Theory
ψ1, ψ2, p, q: Pattern
E: evar
i: ProofInfo
wfψ1: well_formed ψ1
wfψ2: well_formed ψ2
wfp: well_formed p
wfq: well_formed q
Hwf1: well_formed ψ1^[[evar:E↦p]] = true
HeqHwf1: Hwf1 = well_formed_free_evar_subst_0 E ψ1 p wfp wfψ1
Hwf2: well_formed ψ1^[[evar:E↦q]] = true
HeqHwf2: Hwf2 = well_formed_free_evar_subst_0 E ψ1 q wfq wfψ1
Hwf3: well_formed ψ2^[[evar:E↦p]] = true
HeqHwf3: Hwf3 = well_formed_free_evar_subst_0 E ψ2 p wfp wfψ2
Hwf4: well_formed ψ2^[[evar:E↦q]] = true
HeqHwf4: Hwf4 = well_formed_free_evar_subst_0 E ψ2 q wfq wfψ2
pile: ProofInfoLe (ExGen := ∅, SVSubst := ∅, KT := false, FP := {[ψ1^[[evar:E↦p]] ↾ Hwf1; ψ1^[[evar:E↦q]] ↾ Hwf2; ψ2^[[evar:E↦p]] ↾ Hwf3; ψ2^[[evar:E↦q]] ↾ Hwf4]}) i
pf₁: Γ ⊢i ψ1^[[evar:E↦p]] <---> ψ1^[[evar:E↦q]] using i
pf₂: Γ ⊢i ψ2^[[evar:E↦p]] <---> ψ2^[[evar:E↦q]] using i

Γ ⊢i ψ1^[[evar:E↦q]] ---> ψ1^[[evar:E↦p]] using i
Σ: Signature
Γ: Theory
ψ1, ψ2, p, q: Pattern
E: evar
i: ProofInfo
wfψ1: well_formed ψ1
wfψ2: well_formed ψ2
wfp: well_formed p
wfq: well_formed q
Hwf1: well_formed ψ1^[[evar:E↦p]] = true
HeqHwf1: Hwf1 = well_formed_free_evar_subst_0 E ψ1 p wfp wfψ1
Hwf2: well_formed ψ1^[[evar:E↦q]] = true
HeqHwf2: Hwf2 = well_formed_free_evar_subst_0 E ψ1 q wfq wfψ1
Hwf3: well_formed ψ2^[[evar:E↦p]] = true
HeqHwf3: Hwf3 = well_formed_free_evar_subst_0 E ψ2 p wfp wfψ2
Hwf4: well_formed ψ2^[[evar:E↦q]] = true
HeqHwf4: Hwf4 = well_formed_free_evar_subst_0 E ψ2 q wfq wfψ2
pile: ProofInfoLe (ExGen := ∅, SVSubst := ∅, KT := false, FP := {[ψ1^[[evar:E↦p]] ↾ Hwf1; ψ1^[[evar:E↦q]] ↾ Hwf2; ψ2^[[evar:E↦p]] ↾ Hwf3; ψ2^[[evar:E↦q]] ↾ Hwf4]}) i
pf₁: Γ ⊢i ψ1^[[evar:E↦p]] <---> ψ1^[[evar:E↦q]] using i
pf₂: Γ ⊢i ψ2^[[evar:E↦p]] <---> ψ2^[[evar:E↦q]] using i

Γ ⊢i ψ1^[[evar:E↦q]] ---> ψ1^[[evar:E↦p]] using i
Σ: Signature
Γ: Theory
ψ1, ψ2, p, q: Pattern
E: evar
i: ProofInfo
wfψ1: well_formed ψ1
wfψ2: well_formed ψ2
wfp: well_formed p
wfq: well_formed q
Hwf1: well_formed ψ1^[[evar:E↦p]] = true
HeqHwf1: Hwf1 = well_formed_free_evar_subst_0 E ψ1 p wfp wfψ1
Hwf2: well_formed ψ1^[[evar:E↦q]] = true
HeqHwf2: Hwf2 = well_formed_free_evar_subst_0 E ψ1 q wfq wfψ1
Hwf3: well_formed ψ2^[[evar:E↦p]] = true
HeqHwf3: Hwf3 = well_formed_free_evar_subst_0 E ψ2 p wfp wfψ2
Hwf4: well_formed ψ2^[[evar:E↦q]] = true
HeqHwf4: Hwf4 = well_formed_free_evar_subst_0 E ψ2 q wfq wfψ2
pile: ProofInfoLe (ExGen := ∅, SVSubst := ∅, KT := false, FP := {[ψ1^[[evar:E↦p]] ↾ Hwf1; ψ1^[[evar:E↦q]] ↾ Hwf2; ψ2^[[evar:E↦p]] ↾ Hwf3; ψ2^[[evar:E↦q]] ↾ Hwf4]}) i
pf₁: Γ ⊢i ψ1^[[evar:E↦q]] ---> ψ1^[[evar:E↦p]] using i
pf₂: Γ ⊢i ψ2^[[evar:E↦p]] <---> ψ2^[[evar:E↦q]] using i

Γ ⊢i ψ1^[[evar:E↦q]] ---> ψ1^[[evar:E↦p]] using i
Σ: Signature
Γ: Theory
ψ1, ψ2, p, q: Pattern
E: evar
i: ProofInfo
wfψ1: well_formed ψ1
wfψ2: well_formed ψ2
wfp: well_formed p
wfq: well_formed q
Hwf1: well_formed ψ1^[[evar:E↦p]] = true
HeqHwf1: Hwf1 = well_formed_free_evar_subst_0 E ψ1 p wfp wfψ1
Hwf2: well_formed ψ1^[[evar:E↦q]] = true
HeqHwf2: Hwf2 = well_formed_free_evar_subst_0 E ψ1 q wfq wfψ1
Hwf3: well_formed ψ2^[[evar:E↦p]] = true
HeqHwf3: Hwf3 = well_formed_free_evar_subst_0 E ψ2 p wfp wfψ2
Hwf4: well_formed ψ2^[[evar:E↦q]] = true
HeqHwf4: Hwf4 = well_formed_free_evar_subst_0 E ψ2 q wfq wfψ2
pile: ProofInfoLe (ExGen := ∅, SVSubst := ∅, KT := false, FP := {[ψ1^[[evar:E↦p]] ↾ Hwf1; ψ1^[[evar:E↦q]] ↾ Hwf2; ψ2^[[evar:E↦p]] ↾ Hwf3; ψ2^[[evar:E↦q]] ↾ Hwf4]}) i
pf₁: Γ ⊢i ψ1^[[evar:E↦p]] <---> ψ1^[[evar:E↦q]] using i
pf₂: Γ ⊢i ψ2^[[evar:E↦p]] <---> ψ2^[[evar:E↦q]] using i
well_formed (ψ1^[[evar:E↦p]] ---> ψ1^[[evar:E↦q]])
Σ: Signature
Γ: Theory
ψ1, ψ2, p, q: Pattern
E: evar
i: ProofInfo
wfψ1: well_formed ψ1
wfψ2: well_formed ψ2
wfp: well_formed p
wfq: well_formed q
Hwf1: well_formed ψ1^[[evar:E↦p]] = true
HeqHwf1: Hwf1 = well_formed_free_evar_subst_0 E ψ1 p wfp wfψ1
Hwf2: well_formed ψ1^[[evar:E↦q]] = true
HeqHwf2: Hwf2 = well_formed_free_evar_subst_0 E ψ1 q wfq wfψ1
Hwf3: well_formed ψ2^[[evar:E↦p]] = true
HeqHwf3: Hwf3 = well_formed_free_evar_subst_0 E ψ2 p wfp wfψ2
Hwf4: well_formed ψ2^[[evar:E↦q]] = true
HeqHwf4: Hwf4 = well_formed_free_evar_subst_0 E ψ2 q wfq wfψ2
pile: ProofInfoLe (ExGen := ∅, SVSubst := ∅, KT := false, FP := {[ψ1^[[evar:E↦p]] ↾ Hwf1; ψ1^[[evar:E↦q]] ↾ Hwf2; ψ2^[[evar:E↦p]] ↾ Hwf3; ψ2^[[evar:E↦q]] ↾ Hwf4]}) i
pf₁: Γ ⊢i ψ1^[[evar:E↦p]] <---> ψ1^[[evar:E↦q]] using i
pf₂: Γ ⊢i ψ2^[[evar:E↦p]] <---> ψ2^[[evar:E↦q]] using i
well_formed (ψ1^[[evar:E↦q]] ---> ψ1^[[evar:E↦p]])
Σ: Signature
Γ: Theory
ψ1, ψ2, p, q: Pattern
E: evar
i: ProofInfo
wfψ1: well_formed ψ1
wfψ2: well_formed ψ2
wfp: well_formed p
wfq: well_formed q
Hwf1: well_formed ψ1^[[evar:E↦p]] = true
HeqHwf1: Hwf1 = well_formed_free_evar_subst_0 E ψ1 p wfp wfψ1
Hwf2: well_formed ψ1^[[evar:E↦q]] = true
HeqHwf2: Hwf2 = well_formed_free_evar_subst_0 E ψ1 q wfq wfψ1
Hwf3: well_formed ψ2^[[evar:E↦p]] = true
HeqHwf3: Hwf3 = well_formed_free_evar_subst_0 E ψ2 p wfp wfψ2
Hwf4: well_formed ψ2^[[evar:E↦q]] = true
HeqHwf4: Hwf4 = well_formed_free_evar_subst_0 E ψ2 q wfq wfψ2
pile: ProofInfoLe (ExGen := ∅, SVSubst := ∅, KT := false, FP := {[ψ1^[[evar:E↦p]] ↾ Hwf1; ψ1^[[evar:E↦q]] ↾ Hwf2; ψ2^[[evar:E↦p]] ↾ Hwf3; ψ2^[[evar:E↦q]] ↾ Hwf4]}) i
pf₁: Γ ⊢i ψ1^[[evar:E↦p]] <---> ψ1^[[evar:E↦q]] using i
pf₂: Γ ⊢i ψ2^[[evar:E↦p]] <---> ψ2^[[evar:E↦q]] using i

well_formed (ψ1^[[evar:E↦p]] ---> ψ1^[[evar:E↦q]])
Σ: Signature
Γ: Theory
ψ1, ψ2, p, q: Pattern
E: evar
i: ProofInfo
wfψ1: well_formed ψ1
wfψ2: well_formed ψ2
wfp: well_formed p
wfq: well_formed q
Hwf1: well_formed ψ1^[[evar:E↦p]] = true
HeqHwf1: Hwf1 = well_formed_free_evar_subst_0 E ψ1 p wfp wfψ1
Hwf2: well_formed ψ1^[[evar:E↦q]] = true
HeqHwf2: Hwf2 = well_formed_free_evar_subst_0 E ψ1 q wfq wfψ1
Hwf3: well_formed ψ2^[[evar:E↦p]] = true
HeqHwf3: Hwf3 = well_formed_free_evar_subst_0 E ψ2 p wfp wfψ2
Hwf4: well_formed ψ2^[[evar:E↦q]] = true
HeqHwf4: Hwf4 = well_formed_free_evar_subst_0 E ψ2 q wfq wfψ2
pile: ProofInfoLe (ExGen := ∅, SVSubst := ∅, KT := false, FP := {[ψ1^[[evar:E↦p]] ↾ Hwf1; ψ1^[[evar:E↦q]] ↾ Hwf2; ψ2^[[evar:E↦p]] ↾ Hwf3; ψ2^[[evar:E↦q]] ↾ Hwf4]}) i
pf₁: Γ ⊢i ψ1^[[evar:E↦p]] <---> ψ1^[[evar:E↦q]] using i
pf₂: Γ ⊢i ψ2^[[evar:E↦p]] <---> ψ2^[[evar:E↦q]] using i
well_formed (ψ1^[[evar:E↦q]] ---> ψ1^[[evar:E↦p]])
Σ: Signature
Γ: Theory
ψ1, ψ2, p, q: Pattern
E: evar
i: ProofInfo
wfψ1: well_formed ψ1
wfψ2: well_formed ψ2
wfp: well_formed p
wfq: well_formed q
Hwf1: well_formed ψ1^[[evar:E↦p]] = true
HeqHwf1: Hwf1 = well_formed_free_evar_subst_0 E ψ1 p wfp wfψ1
Hwf2: well_formed ψ1^[[evar:E↦q]] = true
HeqHwf2: Hwf2 = well_formed_free_evar_subst_0 E ψ1 q wfq wfψ1
Hwf3: well_formed ψ2^[[evar:E↦p]] = true
HeqHwf3: Hwf3 = well_formed_free_evar_subst_0 E ψ2 p wfp wfψ2
Hwf4: well_formed ψ2^[[evar:E↦q]] = true
HeqHwf4: Hwf4 = well_formed_free_evar_subst_0 E ψ2 q wfq wfψ2
pile: ProofInfoLe (ExGen := ∅, SVSubst := ∅, KT := false, FP := {[ψ1^[[evar:E↦p]] ↾ Hwf1; ψ1^[[evar:E↦q]] ↾ Hwf2; ψ2^[[evar:E↦p]] ↾ Hwf3; ψ2^[[evar:E↦q]] ↾ Hwf4]}) i
pf₁: Γ ⊢i ψ1^[[evar:E↦p]] <---> ψ1^[[evar:E↦q]] using i
pf₂: Γ ⊢i ψ2^[[evar:E↦p]] <---> ψ2^[[evar:E↦q]] using i

well_formed (ψ1^[[evar:E↦p]] ---> ψ1^[[evar:E↦q]])
abstract (wf_auto2).
Σ: Signature
Γ: Theory
ψ1, ψ2, p, q: Pattern
E: evar
i: ProofInfo
wfψ1: well_formed ψ1
wfψ2: well_formed ψ2
wfp: well_formed p
wfq: well_formed q
Hwf1: well_formed ψ1^[[evar:E↦p]] = true
HeqHwf1: Hwf1 = well_formed_free_evar_subst_0 E ψ1 p wfp wfψ1
Hwf2: well_formed ψ1^[[evar:E↦q]] = true
HeqHwf2: Hwf2 = well_formed_free_evar_subst_0 E ψ1 q wfq wfψ1
Hwf3: well_formed ψ2^[[evar:E↦p]] = true
HeqHwf3: Hwf3 = well_formed_free_evar_subst_0 E ψ2 p wfp wfψ2
Hwf4: well_formed ψ2^[[evar:E↦q]] = true
HeqHwf4: Hwf4 = well_formed_free_evar_subst_0 E ψ2 q wfq wfψ2
pile: ProofInfoLe (ExGen := ∅, SVSubst := ∅, KT := false, FP := {[ψ1^[[evar:E↦p]] ↾ Hwf1; ψ1^[[evar:E↦q]] ↾ Hwf2; ψ2^[[evar:E↦p]] ↾ Hwf3; ψ2^[[evar:E↦q]] ↾ Hwf4]}) i
pf₁: Γ ⊢i ψ1^[[evar:E↦p]] <---> ψ1^[[evar:E↦q]] using i
pf₂: Γ ⊢i ψ2^[[evar:E↦p]] <---> ψ2^[[evar:E↦q]] using i

well_formed (ψ1^[[evar:E↦q]] ---> ψ1^[[evar:E↦p]])
Σ: Signature
Γ: Theory
ψ1, ψ2, p, q: Pattern
E: evar
i: ProofInfo
wfψ1: well_formed ψ1
wfψ2: well_formed ψ2
wfp: well_formed p
wfq: well_formed q
Hwf1: well_formed ψ1^[[evar:E↦p]] = true
HeqHwf1: Hwf1 = well_formed_free_evar_subst_0 E ψ1 p wfp wfψ1
Hwf2: well_formed ψ1^[[evar:E↦q]] = true
HeqHwf2: Hwf2 = well_formed_free_evar_subst_0 E ψ1 q wfq wfψ1
Hwf3: well_formed ψ2^[[evar:E↦p]] = true
HeqHwf3: Hwf3 = well_formed_free_evar_subst_0 E ψ2 p wfp wfψ2
Hwf4: well_formed ψ2^[[evar:E↦q]] = true
HeqHwf4: Hwf4 = well_formed_free_evar_subst_0 E ψ2 q wfq wfψ2
pile: ProofInfoLe (ExGen := ∅, SVSubst := ∅, KT := false, FP := {[ψ1^[[evar:E↦p]] ↾ Hwf1; ψ1^[[evar:E↦q]] ↾ Hwf2; ψ2^[[evar:E↦p]] ↾ Hwf3; ψ2^[[evar:E↦q]] ↾ Hwf4]}) i
pf₁: Γ ⊢i ψ1^[[evar:E↦p]] <---> ψ1^[[evar:E↦q]] using i
pf₂: Γ ⊢i ψ2^[[evar:E↦p]] <---> ψ2^[[evar:E↦q]] using i

well_formed (ψ1^[[evar:E↦q]] ---> ψ1^[[evar:E↦p]])
abstract (wf_auto2). } }
Σ: Signature
Γ: Theory
ψ1, ψ2, p, q: Pattern
E: evar
i: ProofInfo
wfψ1: well_formed ψ1
wfψ2: well_formed ψ2
wfp: well_formed p
wfq: well_formed q
Hwf1: well_formed ψ1^[[evar:E↦p]] = true
HeqHwf1: Hwf1 = well_formed_free_evar_subst_0 E ψ1 p wfp wfψ1
Hwf2: well_formed ψ1^[[evar:E↦q]] = true
HeqHwf2: Hwf2 = well_formed_free_evar_subst_0 E ψ1 q wfq wfψ1
Hwf3: well_formed ψ2^[[evar:E↦p]] = true
HeqHwf3: Hwf3 = well_formed_free_evar_subst_0 E ψ2 p wfp wfψ2
Hwf4: well_formed ψ2^[[evar:E↦q]] = true
HeqHwf4: Hwf4 = well_formed_free_evar_subst_0 E ψ2 q wfq wfψ2
pile: ProofInfoLe (ExGen := ∅, SVSubst := ∅, KT := false, FP := {[ψ1^[[evar:E↦p]] ↾ Hwf1; ψ1^[[evar:E↦q]] ↾ Hwf2; ψ2^[[evar:E↦p]] ↾ Hwf3; ψ2^[[evar:E↦q]] ↾ Hwf4]}) i
pf₁: Γ ⊢i ψ1^[[evar:E↦p]] <---> ψ1^[[evar:E↦q]] using i
pf₂: Γ ⊢i ψ2^[[evar:E↦p]] <---> ψ2^[[evar:E↦q]] using i

well_formed (ψ1^[[evar:E↦p]] $ ψ2^[[evar:E↦p]] ---> ψ1^[[evar:E↦q]] $ ψ2^[[evar:E↦p]])
Σ: Signature
Γ: Theory
ψ1, ψ2, p, q: Pattern
E: evar
i: ProofInfo
wfψ1: well_formed ψ1
wfψ2: well_formed ψ2
wfp: well_formed p
wfq: well_formed q
Hwf1: well_formed ψ1^[[evar:E↦p]] = true
HeqHwf1: Hwf1 = well_formed_free_evar_subst_0 E ψ1 p wfp wfψ1
Hwf2: well_formed ψ1^[[evar:E↦q]] = true
HeqHwf2: Hwf2 = well_formed_free_evar_subst_0 E ψ1 q wfq wfψ1
Hwf3: well_formed ψ2^[[evar:E↦p]] = true
HeqHwf3: Hwf3 = well_formed_free_evar_subst_0 E ψ2 p wfp wfψ2
Hwf4: well_formed ψ2^[[evar:E↦q]] = true
HeqHwf4: Hwf4 = well_formed_free_evar_subst_0 E ψ2 q wfq wfψ2
pile: ProofInfoLe (ExGen := ∅, SVSubst := ∅, KT := false, FP := {[ψ1^[[evar:E↦p]] ↾ Hwf1; ψ1^[[evar:E↦q]] ↾ Hwf2; ψ2^[[evar:E↦p]] ↾ Hwf3; ψ2^[[evar:E↦q]] ↾ Hwf4]}) i
pf₁: Γ ⊢i ψ1^[[evar:E↦p]] <---> ψ1^[[evar:E↦q]] using i
pf₂: Γ ⊢i ψ2^[[evar:E↦p]] <---> ψ2^[[evar:E↦q]] using i
well_formed (ψ1^[[evar:E↦q]] $ ψ2^[[evar:E↦p]] ---> ψ1^[[evar:E↦p]] $ ψ2^[[evar:E↦p]])
Σ: Signature
Γ: Theory
ψ1, ψ2, p, q: Pattern
E: evar
i: ProofInfo
wfψ1: well_formed ψ1
wfψ2: well_formed ψ2
wfp: well_formed p
wfq: well_formed q
Hwf1: well_formed ψ1^[[evar:E↦p]] = true
HeqHwf1: Hwf1 = well_formed_free_evar_subst_0 E ψ1 p wfp wfψ1
Hwf2: well_formed ψ1^[[evar:E↦q]] = true
HeqHwf2: Hwf2 = well_formed_free_evar_subst_0 E ψ1 q wfq wfψ1
Hwf3: well_formed ψ2^[[evar:E↦p]] = true
HeqHwf3: Hwf3 = well_formed_free_evar_subst_0 E ψ2 p wfp wfψ2
Hwf4: well_formed ψ2^[[evar:E↦q]] = true
HeqHwf4: Hwf4 = well_formed_free_evar_subst_0 E ψ2 q wfq wfψ2
pile: ProofInfoLe (ExGen := ∅, SVSubst := ∅, KT := false, FP := {[ψ1^[[evar:E↦p]] ↾ Hwf1; ψ1^[[evar:E↦q]] ↾ Hwf2; ψ2^[[evar:E↦p]] ↾ Hwf3; ψ2^[[evar:E↦q]] ↾ Hwf4]}) i
pf₁: Γ ⊢i ψ1^[[evar:E↦p]] <---> ψ1^[[evar:E↦q]] using i
pf₂: Γ ⊢i ψ2^[[evar:E↦p]] <---> ψ2^[[evar:E↦q]] using i
Γ ⊢i ψ1^[[evar:E↦p]] $ ψ2^[[evar:E↦p]] ---> ψ1^[[evar:E↦q]] $ ψ2^[[evar:E↦p]] using i
Σ: Signature
Γ: Theory
ψ1, ψ2, p, q: Pattern
E: evar
i: ProofInfo
wfψ1: well_formed ψ1
wfψ2: well_formed ψ2
wfp: well_formed p
wfq: well_formed q
Hwf1: well_formed ψ1^[[evar:E↦p]] = true
HeqHwf1: Hwf1 = well_formed_free_evar_subst_0 E ψ1 p wfp wfψ1
Hwf2: well_formed ψ1^[[evar:E↦q]] = true
HeqHwf2: Hwf2 = well_formed_free_evar_subst_0 E ψ1 q wfq wfψ1
Hwf3: well_formed ψ2^[[evar:E↦p]] = true
HeqHwf3: Hwf3 = well_formed_free_evar_subst_0 E ψ2 p wfp wfψ2
Hwf4: well_formed ψ2^[[evar:E↦q]] = true
HeqHwf4: Hwf4 = well_formed_free_evar_subst_0 E ψ2 q wfq wfψ2
pile: ProofInfoLe (ExGen := ∅, SVSubst := ∅, KT := false, FP := {[ψ1^[[evar:E↦p]] ↾ Hwf1; ψ1^[[evar:E↦q]] ↾ Hwf2; ψ2^[[evar:E↦p]] ↾ Hwf3; ψ2^[[evar:E↦q]] ↾ Hwf4]}) i
pf₁: Γ ⊢i ψ1^[[evar:E↦p]] <---> ψ1^[[evar:E↦q]] using i
pf₂: Γ ⊢i ψ2^[[evar:E↦p]] <---> ψ2^[[evar:E↦q]] using i

Γ ⊢i ψ1^[[evar:E↦p]] $ ψ2^[[evar:E↦p]] ---> ψ1^[[evar:E↦q]] $ ψ2^[[evar:E↦p]] using i
Σ: Signature
Γ: Theory
ψ1, ψ2, p, q: Pattern
E: evar
i: ProofInfo
wfψ1: well_formed ψ1
wfψ2: well_formed ψ2
wfp: well_formed p
wfq: well_formed q
Hwf1: well_formed ψ1^[[evar:E↦p]] = true
HeqHwf1: Hwf1 = well_formed_free_evar_subst_0 E ψ1 p wfp wfψ1
Hwf2: well_formed ψ1^[[evar:E↦q]] = true
HeqHwf2: Hwf2 = well_formed_free_evar_subst_0 E ψ1 q wfq wfψ1
Hwf3: well_formed ψ2^[[evar:E↦p]] = true
HeqHwf3: Hwf3 = well_formed_free_evar_subst_0 E ψ2 p wfp wfψ2
Hwf4: well_formed ψ2^[[evar:E↦q]] = true
HeqHwf4: Hwf4 = well_formed_free_evar_subst_0 E ψ2 q wfq wfψ2
pile: ProofInfoLe (ExGen := ∅, SVSubst := ∅, KT := false, FP := {[ψ1^[[evar:E↦p]] ↾ Hwf1; ψ1^[[evar:E↦q]] ↾ Hwf2; ψ2^[[evar:E↦p]] ↾ Hwf3; ψ2^[[evar:E↦q]] ↾ Hwf4]}) i
pf₁: Γ ⊢i ψ1^[[evar:E↦p]] <---> ψ1^[[evar:E↦q]] using i
pf₂: Γ ⊢i ψ2^[[evar:E↦p]] <---> ψ2^[[evar:E↦q]] using i

ProofInfoLe (ExGen := ∅, SVSubst := ∅, KT := false, FP := {[ψ2^[[evar:E↦p]] ↾ Hwf3]}) i
Σ: Signature
Γ: Theory
ψ1, ψ2, p, q: Pattern
E: evar
i: ProofInfo
wfψ1: well_formed ψ1
wfψ2: well_formed ψ2
wfp: well_formed p
wfq: well_formed q
Hwf1: well_formed ψ1^[[evar:E↦p]] = true
HeqHwf1: Hwf1 = well_formed_free_evar_subst_0 E ψ1 p wfp wfψ1
Hwf2: well_formed ψ1^[[evar:E↦q]] = true
HeqHwf2: Hwf2 = well_formed_free_evar_subst_0 E ψ1 q wfq wfψ1
Hwf3: well_formed ψ2^[[evar:E↦p]] = true
HeqHwf3: Hwf3 = well_formed_free_evar_subst_0 E ψ2 p wfp wfψ2
Hwf4: well_formed ψ2^[[evar:E↦q]] = true
HeqHwf4: Hwf4 = well_formed_free_evar_subst_0 E ψ2 q wfq wfψ2
pile: ProofInfoLe (ExGen := ∅, SVSubst := ∅, KT := false, FP := {[ψ1^[[evar:E↦p]] ↾ Hwf1; ψ1^[[evar:E↦q]] ↾ Hwf2; ψ2^[[evar:E↦p]] ↾ Hwf3; ψ2^[[evar:E↦q]] ↾ Hwf4]}) i
pf₁: Γ ⊢i ψ1^[[evar:E↦p]] <---> ψ1^[[evar:E↦q]] using i
pf₂: Γ ⊢i ψ2^[[evar:E↦p]] <---> ψ2^[[evar:E↦q]] using i
Γ ⊢i ψ1^[[evar:E↦p]] ---> ψ1^[[evar:E↦q]] using i
Σ: Signature
Γ: Theory
ψ1, ψ2, p, q: Pattern
E: evar
i: ProofInfo
wfψ1: well_formed ψ1
wfψ2: well_formed ψ2
wfp: well_formed p
wfq: well_formed q
Hwf1: well_formed ψ1^[[evar:E↦p]] = true
HeqHwf1: Hwf1 = well_formed_free_evar_subst_0 E ψ1 p wfp wfψ1
Hwf2: well_formed ψ1^[[evar:E↦q]] = true
HeqHwf2: Hwf2 = well_formed_free_evar_subst_0 E ψ1 q wfq wfψ1
Hwf3: well_formed ψ2^[[evar:E↦p]] = true
HeqHwf3: Hwf3 = well_formed_free_evar_subst_0 E ψ2 p wfp wfψ2
Hwf4: well_formed ψ2^[[evar:E↦q]] = true
HeqHwf4: Hwf4 = well_formed_free_evar_subst_0 E ψ2 q wfq wfψ2
pile: ProofInfoLe (ExGen := ∅, SVSubst := ∅, KT := false, FP := {[ψ1^[[evar:E↦p]] ↾ Hwf1; ψ1^[[evar:E↦q]] ↾ Hwf2; ψ2^[[evar:E↦p]] ↾ Hwf3; ψ2^[[evar:E↦q]] ↾ Hwf4]}) i
pf₁: Γ ⊢i ψ1^[[evar:E↦p]] <---> ψ1^[[evar:E↦q]] using i
pf₂: Γ ⊢i ψ2^[[evar:E↦p]] <---> ψ2^[[evar:E↦q]] using i

ProofInfoLe (ExGen := ∅, SVSubst := ∅, KT := false, FP := {[ψ2^[[evar:E↦p]] ↾ Hwf3]}) i
Σ: Signature
Γ: Theory
ψ1, ψ2, p, q: Pattern
E: evar
i: ProofInfo
wfψ1: well_formed ψ1
wfψ2: well_formed ψ2
wfp: well_formed p
wfq: well_formed q
Hwf1: well_formed ψ1^[[evar:E↦p]] = true
HeqHwf1: Hwf1 = well_formed_free_evar_subst_0 E ψ1 p wfp wfψ1
Hwf2: well_formed ψ1^[[evar:E↦q]] = true
HeqHwf2: Hwf2 = well_formed_free_evar_subst_0 E ψ1 q wfq wfψ1
Hwf3: well_formed ψ2^[[evar:E↦p]] = true
HeqHwf3: Hwf3 = well_formed_free_evar_subst_0 E ψ2 p wfp wfψ2
Hwf4: well_formed ψ2^[[evar:E↦q]] = true
HeqHwf4: Hwf4 = well_formed_free_evar_subst_0 E ψ2 q wfq wfψ2
pile: ProofInfoLe (ExGen := ∅, SVSubst := ∅, KT := false, FP := {[ψ1^[[evar:E↦p]] ↾ Hwf1; ψ1^[[evar:E↦q]] ↾ Hwf2; ψ2^[[evar:E↦p]] ↾ Hwf3; ψ2^[[evar:E↦q]] ↾ Hwf4]}) i
pf₁: Γ ⊢i ψ1^[[evar:E↦p]] <---> ψ1^[[evar:E↦q]] using i
pf₂: Γ ⊢i ψ2^[[evar:E↦p]] <---> ψ2^[[evar:E↦q]] using i

ProofInfoLe (ExGen := ∅, SVSubst := ∅, KT := false, FP := {[ψ2^[[evar:E↦p]] ↾ Hwf3]}) ?i₂
Σ: Signature
Γ: Theory
ψ1, ψ2, p, q: Pattern
E: evar
i: ProofInfo
wfψ1: well_formed ψ1
wfψ2: well_formed ψ2
wfp: well_formed p
wfq: well_formed q
Hwf1: well_formed ψ1^[[evar:E↦p]] = true
HeqHwf1: Hwf1 = well_formed_free_evar_subst_0 E ψ1 p wfp wfψ1
Hwf2: well_formed ψ1^[[evar:E↦q]] = true
HeqHwf2: Hwf2 = well_formed_free_evar_subst_0 E ψ1 q wfq wfψ1
Hwf3: well_formed ψ2^[[evar:E↦p]] = true
HeqHwf3: Hwf3 = well_formed_free_evar_subst_0 E ψ2 p wfp wfψ2
Hwf4: well_formed ψ2^[[evar:E↦q]] = true
HeqHwf4: Hwf4 = well_formed_free_evar_subst_0 E ψ2 q wfq wfψ2
pile: ProofInfoLe (ExGen := ∅, SVSubst := ∅, KT := false, FP := {[ψ1^[[evar:E↦p]] ↾ Hwf1; ψ1^[[evar:E↦q]] ↾ Hwf2; ψ2^[[evar:E↦p]] ↾ Hwf3; ψ2^[[evar:E↦q]] ↾ Hwf4]}) i
pf₁: Γ ⊢i ψ1^[[evar:E↦p]] <---> ψ1^[[evar:E↦q]] using i
pf₂: Γ ⊢i ψ2^[[evar:E↦p]] <---> ψ2^[[evar:E↦q]] using i
ProofInfoLe ?i₂ i
Σ: Signature
Γ: Theory
ψ1, ψ2, p, q: Pattern
E: evar
i: ProofInfo
wfψ1: well_formed ψ1
wfψ2: well_formed ψ2
wfp: well_formed p
wfq: well_formed q
Hwf1: well_formed ψ1^[[evar:E↦p]] = true
HeqHwf1: Hwf1 = well_formed_free_evar_subst_0 E ψ1 p wfp wfψ1
Hwf2: well_formed ψ1^[[evar:E↦q]] = true
HeqHwf2: Hwf2 = well_formed_free_evar_subst_0 E ψ1 q wfq wfψ1
Hwf3: well_formed ψ2^[[evar:E↦p]] = true
HeqHwf3: Hwf3 = well_formed_free_evar_subst_0 E ψ2 p wfp wfψ2
Hwf4: well_formed ψ2^[[evar:E↦q]] = true
HeqHwf4: Hwf4 = well_formed_free_evar_subst_0 E ψ2 q wfq wfψ2
pile: ProofInfoLe (ExGen := ∅, SVSubst := ∅, KT := false, FP := {[ψ1^[[evar:E↦p]] ↾ Hwf1; ψ1^[[evar:E↦q]] ↾ Hwf2; ψ2^[[evar:E↦p]] ↾ Hwf3; ψ2^[[evar:E↦q]] ↾ Hwf4]}) i
pf₁: Γ ⊢i ψ1^[[evar:E↦p]] <---> ψ1^[[evar:E↦q]] using i
pf₂: Γ ⊢i ψ2^[[evar:E↦p]] <---> ψ2^[[evar:E↦q]] using i

ProofInfoLe (ExGen := ∅, SVSubst := ∅, KT := false, FP := {[ψ2^[[evar:E↦p]] ↾ Hwf3]}) (ExGen := ∅, SVSubst := ∅, KT := false, FP := {[ψ1^[[evar:E↦p]] ↾ Hwf1; ψ1^[[evar:E↦q]] ↾ Hwf2; ψ2^[[evar:E↦p]] ↾ Hwf3; ψ2^[[evar:E↦q]] ↾ Hwf4]})
try_solve_pile.
Σ: Signature
Γ: Theory
ψ1, ψ2, p, q: Pattern
E: evar
i: ProofInfo
wfψ1: well_formed ψ1
wfψ2: well_formed ψ2
wfp: well_formed p
wfq: well_formed q
Hwf1: well_formed ψ1^[[evar:E↦p]] = true
HeqHwf1: Hwf1 = well_formed_free_evar_subst_0 E ψ1 p wfp wfψ1
Hwf2: well_formed ψ1^[[evar:E↦q]] = true
HeqHwf2: Hwf2 = well_formed_free_evar_subst_0 E ψ1 q wfq wfψ1
Hwf3: well_formed ψ2^[[evar:E↦p]] = true
HeqHwf3: Hwf3 = well_formed_free_evar_subst_0 E ψ2 p wfp wfψ2
Hwf4: well_formed ψ2^[[evar:E↦q]] = true
HeqHwf4: Hwf4 = well_formed_free_evar_subst_0 E ψ2 q wfq wfψ2
pile: ProofInfoLe (ExGen := ∅, SVSubst := ∅, KT := false, FP := {[ψ1^[[evar:E↦p]] ↾ Hwf1; ψ1^[[evar:E↦q]] ↾ Hwf2; ψ2^[[evar:E↦p]] ↾ Hwf3; ψ2^[[evar:E↦q]] ↾ Hwf4]}) i
pf₁: Γ ⊢i ψ1^[[evar:E↦p]] <---> ψ1^[[evar:E↦q]] using i
pf₂: Γ ⊢i ψ2^[[evar:E↦p]] <---> ψ2^[[evar:E↦q]] using i

Γ ⊢i ψ1^[[evar:E↦p]] ---> ψ1^[[evar:E↦q]] using i
Σ: Signature
Γ: Theory
ψ1, ψ2, p, q: Pattern
E: evar
i: ProofInfo
wfψ1: well_formed ψ1
wfψ2: well_formed ψ2
wfp: well_formed p
wfq: well_formed q
Hwf1: well_formed ψ1^[[evar:E↦p]] = true
HeqHwf1: Hwf1 = well_formed_free_evar_subst_0 E ψ1 p wfp wfψ1
Hwf2: well_formed ψ1^[[evar:E↦q]] = true
HeqHwf2: Hwf2 = well_formed_free_evar_subst_0 E ψ1 q wfq wfψ1
Hwf3: well_formed ψ2^[[evar:E↦p]] = true
HeqHwf3: Hwf3 = well_formed_free_evar_subst_0 E ψ2 p wfp wfψ2
Hwf4: well_formed ψ2^[[evar:E↦q]] = true
HeqHwf4: Hwf4 = well_formed_free_evar_subst_0 E ψ2 q wfq wfψ2
pile: ProofInfoLe (ExGen := ∅, SVSubst := ∅, KT := false, FP := {[ψ1^[[evar:E↦p]] ↾ Hwf1; ψ1^[[evar:E↦q]] ↾ Hwf2; ψ2^[[evar:E↦p]] ↾ Hwf3; ψ2^[[evar:E↦q]] ↾ Hwf4]}) i
pf₁: Γ ⊢i ψ1^[[evar:E↦p]] <---> ψ1^[[evar:E↦q]] using i
pf₂: Γ ⊢i ψ2^[[evar:E↦p]] <---> ψ2^[[evar:E↦q]] using i

Γ ⊢i ψ1^[[evar:E↦p]] ---> ψ1^[[evar:E↦q]] using i
Σ: Signature
Γ: Theory
ψ1, ψ2, p, q: Pattern
E: evar
i: ProofInfo
wfψ1: well_formed ψ1
wfψ2: well_formed ψ2
wfp: well_formed p
wfq: well_formed q
Hwf1: well_formed ψ1^[[evar:E↦p]] = true
HeqHwf1: Hwf1 = well_formed_free_evar_subst_0 E ψ1 p wfp wfψ1
Hwf2: well_formed ψ1^[[evar:E↦q]] = true
HeqHwf2: Hwf2 = well_formed_free_evar_subst_0 E ψ1 q wfq wfψ1
Hwf3: well_formed ψ2^[[evar:E↦p]] = true
HeqHwf3: Hwf3 = well_formed_free_evar_subst_0 E ψ2 p wfp wfψ2
Hwf4: well_formed ψ2^[[evar:E↦q]] = true
HeqHwf4: Hwf4 = well_formed_free_evar_subst_0 E ψ2 q wfq wfψ2
pile: ProofInfoLe (ExGen := ∅, SVSubst := ∅, KT := false, FP := {[ψ1^[[evar:E↦p]] ↾ Hwf1; ψ1^[[evar:E↦q]] ↾ Hwf2; ψ2^[[evar:E↦p]] ↾ Hwf3; ψ2^[[evar:E↦q]] ↾ Hwf4]}) i
pf₁: Γ ⊢i ψ1^[[evar:E↦p]] ---> ψ1^[[evar:E↦q]] using i
pf₂: Γ ⊢i ψ2^[[evar:E↦p]] <---> ψ2^[[evar:E↦q]] using i

Γ ⊢i ψ1^[[evar:E↦p]] ---> ψ1^[[evar:E↦q]] using i
Σ: Signature
Γ: Theory
ψ1, ψ2, p, q: Pattern
E: evar
i: ProofInfo
wfψ1: well_formed ψ1
wfψ2: well_formed ψ2
wfp: well_formed p
wfq: well_formed q
Hwf1: well_formed ψ1^[[evar:E↦p]] = true
HeqHwf1: Hwf1 = well_formed_free_evar_subst_0 E ψ1 p wfp wfψ1
Hwf2: well_formed ψ1^[[evar:E↦q]] = true
HeqHwf2: Hwf2 = well_formed_free_evar_subst_0 E ψ1 q wfq wfψ1
Hwf3: well_formed ψ2^[[evar:E↦p]] = true
HeqHwf3: Hwf3 = well_formed_free_evar_subst_0 E ψ2 p wfp wfψ2
Hwf4: well_formed ψ2^[[evar:E↦q]] = true
HeqHwf4: Hwf4 = well_formed_free_evar_subst_0 E ψ2 q wfq wfψ2
pile: ProofInfoLe (ExGen := ∅, SVSubst := ∅, KT := false, FP := {[ψ1^[[evar:E↦p]] ↾ Hwf1; ψ1^[[evar:E↦q]] ↾ Hwf2; ψ2^[[evar:E↦p]] ↾ Hwf3; ψ2^[[evar:E↦q]] ↾ Hwf4]}) i
pf₁: Γ ⊢i ψ1^[[evar:E↦p]] <---> ψ1^[[evar:E↦q]] using i
pf₂: Γ ⊢i ψ2^[[evar:E↦p]] <---> ψ2^[[evar:E↦q]] using i
well_formed (ψ1^[[evar:E↦p]] ---> ψ1^[[evar:E↦q]])
Σ: Signature
Γ: Theory
ψ1, ψ2, p, q: Pattern
E: evar
i: ProofInfo
wfψ1: well_formed ψ1
wfψ2: well_formed ψ2
wfp: well_formed p
wfq: well_formed q
Hwf1: well_formed ψ1^[[evar:E↦p]] = true
HeqHwf1: Hwf1 = well_formed_free_evar_subst_0 E ψ1 p wfp wfψ1
Hwf2: well_formed ψ1^[[evar:E↦q]] = true
HeqHwf2: Hwf2 = well_formed_free_evar_subst_0 E ψ1 q wfq wfψ1
Hwf3: well_formed ψ2^[[evar:E↦p]] = true
HeqHwf3: Hwf3 = well_formed_free_evar_subst_0 E ψ2 p wfp wfψ2
Hwf4: well_formed ψ2^[[evar:E↦q]] = true
HeqHwf4: Hwf4 = well_formed_free_evar_subst_0 E ψ2 q wfq wfψ2
pile: ProofInfoLe (ExGen := ∅, SVSubst := ∅, KT := false, FP := {[ψ1^[[evar:E↦p]] ↾ Hwf1; ψ1^[[evar:E↦q]] ↾ Hwf2; ψ2^[[evar:E↦p]] ↾ Hwf3; ψ2^[[evar:E↦q]] ↾ Hwf4]}) i
pf₁: Γ ⊢i ψ1^[[evar:E↦p]] <---> ψ1^[[evar:E↦q]] using i
pf₂: Γ ⊢i ψ2^[[evar:E↦p]] <---> ψ2^[[evar:E↦q]] using i
well_formed (ψ1^[[evar:E↦q]] ---> ψ1^[[evar:E↦p]])
Σ: Signature
Γ: Theory
ψ1, ψ2, p, q: Pattern
E: evar
i: ProofInfo
wfψ1: well_formed ψ1
wfψ2: well_formed ψ2
wfp: well_formed p
wfq: well_formed q
Hwf1: well_formed ψ1^[[evar:E↦p]] = true
HeqHwf1: Hwf1 = well_formed_free_evar_subst_0 E ψ1 p wfp wfψ1
Hwf2: well_formed ψ1^[[evar:E↦q]] = true
HeqHwf2: Hwf2 = well_formed_free_evar_subst_0 E ψ1 q wfq wfψ1
Hwf3: well_formed ψ2^[[evar:E↦p]] = true
HeqHwf3: Hwf3 = well_formed_free_evar_subst_0 E ψ2 p wfp wfψ2
Hwf4: well_formed ψ2^[[evar:E↦q]] = true
HeqHwf4: Hwf4 = well_formed_free_evar_subst_0 E ψ2 q wfq wfψ2
pile: ProofInfoLe (ExGen := ∅, SVSubst := ∅, KT := false, FP := {[ψ1^[[evar:E↦p]] ↾ Hwf1; ψ1^[[evar:E↦q]] ↾ Hwf2; ψ2^[[evar:E↦p]] ↾ Hwf3; ψ2^[[evar:E↦q]] ↾ Hwf4]}) i
pf₁: Γ ⊢i ψ1^[[evar:E↦p]] <---> ψ1^[[evar:E↦q]] using i
pf₂: Γ ⊢i ψ2^[[evar:E↦p]] <---> ψ2^[[evar:E↦q]] using i

well_formed (ψ1^[[evar:E↦p]] ---> ψ1^[[evar:E↦q]])
Σ: Signature
Γ: Theory
ψ1, ψ2, p, q: Pattern
E: evar
i: ProofInfo
wfψ1: well_formed ψ1
wfψ2: well_formed ψ2
wfp: well_formed p
wfq: well_formed q
Hwf1: well_formed ψ1^[[evar:E↦p]] = true
HeqHwf1: Hwf1 = well_formed_free_evar_subst_0 E ψ1 p wfp wfψ1
Hwf2: well_formed ψ1^[[evar:E↦q]] = true
HeqHwf2: Hwf2 = well_formed_free_evar_subst_0 E ψ1 q wfq wfψ1
Hwf3: well_formed ψ2^[[evar:E↦p]] = true
HeqHwf3: Hwf3 = well_formed_free_evar_subst_0 E ψ2 p wfp wfψ2
Hwf4: well_formed ψ2^[[evar:E↦q]] = true
HeqHwf4: Hwf4 = well_formed_free_evar_subst_0 E ψ2 q wfq wfψ2
pile: ProofInfoLe (ExGen := ∅, SVSubst := ∅, KT := false, FP := {[ψ1^[[evar:E↦p]] ↾ Hwf1; ψ1^[[evar:E↦q]] ↾ Hwf2; ψ2^[[evar:E↦p]] ↾ Hwf3; ψ2^[[evar:E↦q]] ↾ Hwf4]}) i
pf₁: Γ ⊢i ψ1^[[evar:E↦p]] <---> ψ1^[[evar:E↦q]] using i
pf₂: Γ ⊢i ψ2^[[evar:E↦p]] <---> ψ2^[[evar:E↦q]] using i
well_formed (ψ1^[[evar:E↦q]] ---> ψ1^[[evar:E↦p]])
Σ: Signature
Γ: Theory
ψ1, ψ2, p, q: Pattern
E: evar
i: ProofInfo
wfψ1: well_formed ψ1
wfψ2: well_formed ψ2
wfp: well_formed p
wfq: well_formed q
Hwf1: well_formed ψ1^[[evar:E↦p]] = true
HeqHwf1: Hwf1 = well_formed_free_evar_subst_0 E ψ1 p wfp wfψ1
Hwf2: well_formed ψ1^[[evar:E↦q]] = true
HeqHwf2: Hwf2 = well_formed_free_evar_subst_0 E ψ1 q wfq wfψ1
Hwf3: well_formed ψ2^[[evar:E↦p]] = true
HeqHwf3: Hwf3 = well_formed_free_evar_subst_0 E ψ2 p wfp wfψ2
Hwf4: well_formed ψ2^[[evar:E↦q]] = true
HeqHwf4: Hwf4 = well_formed_free_evar_subst_0 E ψ2 q wfq wfψ2
pile: ProofInfoLe (ExGen := ∅, SVSubst := ∅, KT := false, FP := {[ψ1^[[evar:E↦p]] ↾ Hwf1; ψ1^[[evar:E↦q]] ↾ Hwf2; ψ2^[[evar:E↦p]] ↾ Hwf3; ψ2^[[evar:E↦q]] ↾ Hwf4]}) i
pf₁: Γ ⊢i ψ1^[[evar:E↦p]] <---> ψ1^[[evar:E↦q]] using i
pf₂: Γ ⊢i ψ2^[[evar:E↦p]] <---> ψ2^[[evar:E↦q]] using i

well_formed (ψ1^[[evar:E↦p]] ---> ψ1^[[evar:E↦q]])
abstract (wf_auto2).
Σ: Signature
Γ: Theory
ψ1, ψ2, p, q: Pattern
E: evar
i: ProofInfo
wfψ1: well_formed ψ1
wfψ2: well_formed ψ2
wfp: well_formed p
wfq: well_formed q
Hwf1: well_formed ψ1^[[evar:E↦p]] = true
HeqHwf1: Hwf1 = well_formed_free_evar_subst_0 E ψ1 p wfp wfψ1
Hwf2: well_formed ψ1^[[evar:E↦q]] = true
HeqHwf2: Hwf2 = well_formed_free_evar_subst_0 E ψ1 q wfq wfψ1
Hwf3: well_formed ψ2^[[evar:E↦p]] = true
HeqHwf3: Hwf3 = well_formed_free_evar_subst_0 E ψ2 p wfp wfψ2
Hwf4: well_formed ψ2^[[evar:E↦q]] = true
HeqHwf4: Hwf4 = well_formed_free_evar_subst_0 E ψ2 q wfq wfψ2
pile: ProofInfoLe (ExGen := ∅, SVSubst := ∅, KT := false, FP := {[ψ1^[[evar:E↦p]] ↾ Hwf1; ψ1^[[evar:E↦q]] ↾ Hwf2; ψ2^[[evar:E↦p]] ↾ Hwf3; ψ2^[[evar:E↦q]] ↾ Hwf4]}) i
pf₁: Γ ⊢i ψ1^[[evar:E↦p]] <---> ψ1^[[evar:E↦q]] using i
pf₂: Γ ⊢i ψ2^[[evar:E↦p]] <---> ψ2^[[evar:E↦q]] using i

well_formed (ψ1^[[evar:E↦q]] ---> ψ1^[[evar:E↦p]])
Σ: Signature
Γ: Theory
ψ1, ψ2, p, q: Pattern
E: evar
i: ProofInfo
wfψ1: well_formed ψ1
wfψ2: well_formed ψ2
wfp: well_formed p
wfq: well_formed q
Hwf1: well_formed ψ1^[[evar:E↦p]] = true
HeqHwf1: Hwf1 = well_formed_free_evar_subst_0 E ψ1 p wfp wfψ1
Hwf2: well_formed ψ1^[[evar:E↦q]] = true
HeqHwf2: Hwf2 = well_formed_free_evar_subst_0 E ψ1 q wfq wfψ1
Hwf3: well_formed ψ2^[[evar:E↦p]] = true
HeqHwf3: Hwf3 = well_formed_free_evar_subst_0 E ψ2 p wfp wfψ2
Hwf4: well_formed ψ2^[[evar:E↦q]] = true
HeqHwf4: Hwf4 = well_formed_free_evar_subst_0 E ψ2 q wfq wfψ2
pile: ProofInfoLe (ExGen := ∅, SVSubst := ∅, KT := false, FP := {[ψ1^[[evar:E↦p]] ↾ Hwf1; ψ1^[[evar:E↦q]] ↾ Hwf2; ψ2^[[evar:E↦p]] ↾ Hwf3; ψ2^[[evar:E↦q]] ↾ Hwf4]}) i
pf₁: Γ ⊢i ψ1^[[evar:E↦p]] <---> ψ1^[[evar:E↦q]] using i
pf₂: Γ ⊢i ψ2^[[evar:E↦p]] <---> ψ2^[[evar:E↦q]] using i

well_formed (ψ1^[[evar:E↦q]] ---> ψ1^[[evar:E↦p]])
abstract (wf_auto2). } }
Σ: Signature
Γ: Theory
ψ1, ψ2, p, q: Pattern
E: evar
i: ProofInfo
wfψ1: well_formed ψ1
wfψ2: well_formed ψ2
wfp: well_formed p
wfq: well_formed q
Hwf1: well_formed ψ1^[[evar:E↦p]] = true
HeqHwf1: Hwf1 = well_formed_free_evar_subst_0 E ψ1 p wfp wfψ1
Hwf2: well_formed ψ1^[[evar:E↦q]] = true
HeqHwf2: Hwf2 = well_formed_free_evar_subst_0 E ψ1 q wfq wfψ1
Hwf3: well_formed ψ2^[[evar:E↦p]] = true
HeqHwf3: Hwf3 = well_formed_free_evar_subst_0 E ψ2 p wfp wfψ2
Hwf4: well_formed ψ2^[[evar:E↦q]] = true
HeqHwf4: Hwf4 = well_formed_free_evar_subst_0 E ψ2 q wfq wfψ2
pile: ProofInfoLe (ExGen := ∅, SVSubst := ∅, KT := false, FP := {[ψ1^[[evar:E↦p]] ↾ Hwf1; ψ1^[[evar:E↦q]] ↾ Hwf2; ψ2^[[evar:E↦p]] ↾ Hwf3; ψ2^[[evar:E↦q]] ↾ Hwf4]}) i
pf₁: Γ ⊢i ψ1^[[evar:E↦p]] <---> ψ1^[[evar:E↦q]] using i
pf₂: Γ ⊢i ψ2^[[evar:E↦p]] <---> ψ2^[[evar:E↦q]] using i

well_formed (ψ1^[[evar:E↦p]] $ ψ2^[[evar:E↦p]] ---> ψ1^[[evar:E↦q]] $ ψ2^[[evar:E↦p]])
Σ: Signature
Γ: Theory
ψ1, ψ2, p, q: Pattern
E: evar
i: ProofInfo
wfψ1: well_formed ψ1
wfψ2: well_formed ψ2
wfp: well_formed p
wfq: well_formed q
Hwf1: well_formed ψ1^[[evar:E↦p]] = true
HeqHwf1: Hwf1 = well_formed_free_evar_subst_0 E ψ1 p wfp wfψ1
Hwf2: well_formed ψ1^[[evar:E↦q]] = true
HeqHwf2: Hwf2 = well_formed_free_evar_subst_0 E ψ1 q wfq wfψ1
Hwf3: well_formed ψ2^[[evar:E↦p]] = true
HeqHwf3: Hwf3 = well_formed_free_evar_subst_0 E ψ2 p wfp wfψ2
Hwf4: well_formed ψ2^[[evar:E↦q]] = true
HeqHwf4: Hwf4 = well_formed_free_evar_subst_0 E ψ2 q wfq wfψ2
pile: ProofInfoLe (ExGen := ∅, SVSubst := ∅, KT := false, FP := {[ψ1^[[evar:E↦p]] ↾ Hwf1; ψ1^[[evar:E↦q]] ↾ Hwf2; ψ2^[[evar:E↦p]] ↾ Hwf3; ψ2^[[evar:E↦q]] ↾ Hwf4]}) i
pf₁: Γ ⊢i ψ1^[[evar:E↦p]] <---> ψ1^[[evar:E↦q]] using i
pf₂: Γ ⊢i ψ2^[[evar:E↦p]] <---> ψ2^[[evar:E↦q]] using i
well_formed (ψ1^[[evar:E↦q]] $ ψ2^[[evar:E↦p]] ---> ψ1^[[evar:E↦p]] $ ψ2^[[evar:E↦p]])
Σ: Signature
Γ: Theory
ψ1, ψ2, p, q: Pattern
E: evar
i: ProofInfo
wfψ1: well_formed ψ1
wfψ2: well_formed ψ2
wfp: well_formed p
wfq: well_formed q
Hwf1: well_formed ψ1^[[evar:E↦p]] = true
HeqHwf1: Hwf1 = well_formed_free_evar_subst_0 E ψ1 p wfp wfψ1
Hwf2: well_formed ψ1^[[evar:E↦q]] = true
HeqHwf2: Hwf2 = well_formed_free_evar_subst_0 E ψ1 q wfq wfψ1
Hwf3: well_formed ψ2^[[evar:E↦p]] = true
HeqHwf3: Hwf3 = well_formed_free_evar_subst_0 E ψ2 p wfp wfψ2
Hwf4: well_formed ψ2^[[evar:E↦q]] = true
HeqHwf4: Hwf4 = well_formed_free_evar_subst_0 E ψ2 q wfq wfψ2
pile: ProofInfoLe (ExGen := ∅, SVSubst := ∅, KT := false, FP := {[ψ1^[[evar:E↦p]] ↾ Hwf1; ψ1^[[evar:E↦q]] ↾ Hwf2; ψ2^[[evar:E↦p]] ↾ Hwf3; ψ2^[[evar:E↦q]] ↾ Hwf4]}) i
pf₁: Γ ⊢i ψ1^[[evar:E↦p]] <---> ψ1^[[evar:E↦q]] using i
pf₂: Γ ⊢i ψ2^[[evar:E↦p]] <---> ψ2^[[evar:E↦q]] using i

well_formed (ψ1^[[evar:E↦p]] $ ψ2^[[evar:E↦p]] ---> ψ1^[[evar:E↦q]] $ ψ2^[[evar:E↦p]])
abstract (wf_auto2).
Σ: Signature
Γ: Theory
ψ1, ψ2, p, q: Pattern
E: evar
i: ProofInfo
wfψ1: well_formed ψ1
wfψ2: well_formed ψ2
wfp: well_formed p
wfq: well_formed q
Hwf1: well_formed ψ1^[[evar:E↦p]] = true
HeqHwf1: Hwf1 = well_formed_free_evar_subst_0 E ψ1 p wfp wfψ1
Hwf2: well_formed ψ1^[[evar:E↦q]] = true
HeqHwf2: Hwf2 = well_formed_free_evar_subst_0 E ψ1 q wfq wfψ1
Hwf3: well_formed ψ2^[[evar:E↦p]] = true
HeqHwf3: Hwf3 = well_formed_free_evar_subst_0 E ψ2 p wfp wfψ2
Hwf4: well_formed ψ2^[[evar:E↦q]] = true
HeqHwf4: Hwf4 = well_formed_free_evar_subst_0 E ψ2 q wfq wfψ2
pile: ProofInfoLe (ExGen := ∅, SVSubst := ∅, KT := false, FP := {[ψ1^[[evar:E↦p]] ↾ Hwf1; ψ1^[[evar:E↦q]] ↾ Hwf2; ψ2^[[evar:E↦p]] ↾ Hwf3; ψ2^[[evar:E↦q]] ↾ Hwf4]}) i
pf₁: Γ ⊢i ψ1^[[evar:E↦p]] <---> ψ1^[[evar:E↦q]] using i
pf₂: Γ ⊢i ψ2^[[evar:E↦p]] <---> ψ2^[[evar:E↦q]] using i

well_formed (ψ1^[[evar:E↦q]] $ ψ2^[[evar:E↦p]] ---> ψ1^[[evar:E↦p]] $ ψ2^[[evar:E↦p]])
Σ: Signature
Γ: Theory
ψ1, ψ2, p, q: Pattern
E: evar
i: ProofInfo
wfψ1: well_formed ψ1
wfψ2: well_formed ψ2
wfp: well_formed p
wfq: well_formed q
Hwf1: well_formed ψ1^[[evar:E↦p]] = true
HeqHwf1: Hwf1 = well_formed_free_evar_subst_0 E ψ1 p wfp wfψ1
Hwf2: well_formed ψ1^[[evar:E↦q]] = true
HeqHwf2: Hwf2 = well_formed_free_evar_subst_0 E ψ1 q wfq wfψ1
Hwf3: well_formed ψ2^[[evar:E↦p]] = true
HeqHwf3: Hwf3 = well_formed_free_evar_subst_0 E ψ2 p wfp wfψ2
Hwf4: well_formed ψ2^[[evar:E↦q]] = true
HeqHwf4: Hwf4 = well_formed_free_evar_subst_0 E ψ2 q wfq wfψ2
pile: ProofInfoLe (ExGen := ∅, SVSubst := ∅, KT := false, FP := {[ψ1^[[evar:E↦p]] ↾ Hwf1; ψ1^[[evar:E↦q]] ↾ Hwf2; ψ2^[[evar:E↦p]] ↾ Hwf3; ψ2^[[evar:E↦q]] ↾ Hwf4]}) i
pf₁: Γ ⊢i ψ1^[[evar:E↦p]] <---> ψ1^[[evar:E↦q]] using i
pf₂: Γ ⊢i ψ2^[[evar:E↦p]] <---> ψ2^[[evar:E↦q]] using i

well_formed (ψ1^[[evar:E↦q]] $ ψ2^[[evar:E↦p]] ---> ψ1^[[evar:E↦p]] $ ψ2^[[evar:E↦p]])
abstract (wf_auto2). }
Σ: Signature
Γ: Theory
ψ1, ψ2, p, q: Pattern
E: evar
i: ProofInfo
wfψ1: well_formed ψ1
wfψ2: well_formed ψ2
wfp: well_formed p
wfq: well_formed q
Hwf1: well_formed ψ1^[[evar:E↦p]] = true
HeqHwf1: Hwf1 = well_formed_free_evar_subst_0 E ψ1 p wfp wfψ1
Hwf2: well_formed ψ1^[[evar:E↦q]] = true
HeqHwf2: Hwf2 = well_formed_free_evar_subst_0 E ψ1 q wfq wfψ1
Hwf3: well_formed ψ2^[[evar:E↦p]] = true
HeqHwf3: Hwf3 = well_formed_free_evar_subst_0 E ψ2 p wfp wfψ2
Hwf4: well_formed ψ2^[[evar:E↦q]] = true
HeqHwf4: Hwf4 = well_formed_free_evar_subst_0 E ψ2 q wfq wfψ2
pile: ProofInfoLe (ExGen := ∅, SVSubst := ∅, KT := false, FP := {[ψ1^[[evar:E↦p]] ↾ Hwf1; ψ1^[[evar:E↦q]] ↾ Hwf2; ψ2^[[evar:E↦p]] ↾ Hwf3; ψ2^[[evar:E↦q]] ↾ Hwf4]}) i
pf₁: Γ ⊢i ψ1^[[evar:E↦p]] <---> ψ1^[[evar:E↦q]] using i
pf₂: Γ ⊢i ψ2^[[evar:E↦p]] <---> ψ2^[[evar:E↦q]] using i

well_formed (ψ1^[[evar:E↦p]] $ ψ2^[[evar:E↦p]])
Σ: Signature
Γ: Theory
ψ1, ψ2, p, q: Pattern
E: evar
i: ProofInfo
wfψ1: well_formed ψ1
wfψ2: well_formed ψ2
wfp: well_formed p
wfq: well_formed q
Hwf1: well_formed ψ1^[[evar:E↦p]] = true
HeqHwf1: Hwf1 = well_formed_free_evar_subst_0 E ψ1 p wfp wfψ1
Hwf2: well_formed ψ1^[[evar:E↦q]] = true
HeqHwf2: Hwf2 = well_formed_free_evar_subst_0 E ψ1 q wfq wfψ1
Hwf3: well_formed ψ2^[[evar:E↦p]] = true
HeqHwf3: Hwf3 = well_formed_free_evar_subst_0 E ψ2 p wfp wfψ2
Hwf4: well_formed ψ2^[[evar:E↦q]] = true
HeqHwf4: Hwf4 = well_formed_free_evar_subst_0 E ψ2 q wfq wfψ2
pile: ProofInfoLe (ExGen := ∅, SVSubst := ∅, KT := false, FP := {[ψ1^[[evar:E↦p]] ↾ Hwf1; ψ1^[[evar:E↦q]] ↾ Hwf2; ψ2^[[evar:E↦p]] ↾ Hwf3; ψ2^[[evar:E↦q]] ↾ Hwf4]}) i
pf₁: Γ ⊢i ψ1^[[evar:E↦p]] <---> ψ1^[[evar:E↦q]] using i
pf₂: Γ ⊢i ψ2^[[evar:E↦p]] <---> ψ2^[[evar:E↦q]] using i
well_formed (ψ1^[[evar:E↦q]] $ ψ2^[[evar:E↦p]])
Σ: Signature
Γ: Theory
ψ1, ψ2, p, q: Pattern
E: evar
i: ProofInfo
wfψ1: well_formed ψ1
wfψ2: well_formed ψ2
wfp: well_formed p
wfq: well_formed q
Hwf1: well_formed ψ1^[[evar:E↦p]] = true
HeqHwf1: Hwf1 = well_formed_free_evar_subst_0 E ψ1 p wfp wfψ1
Hwf2: well_formed ψ1^[[evar:E↦q]] = true
HeqHwf2: Hwf2 = well_formed_free_evar_subst_0 E ψ1 q wfq wfψ1
Hwf3: well_formed ψ2^[[evar:E↦p]] = true
HeqHwf3: Hwf3 = well_formed_free_evar_subst_0 E ψ2 p wfp wfψ2
Hwf4: well_formed ψ2^[[evar:E↦q]] = true
HeqHwf4: Hwf4 = well_formed_free_evar_subst_0 E ψ2 q wfq wfψ2
pile: ProofInfoLe (ExGen := ∅, SVSubst := ∅, KT := false, FP := {[ψ1^[[evar:E↦p]] ↾ Hwf1; ψ1^[[evar:E↦q]] ↾ Hwf2; ψ2^[[evar:E↦p]] ↾ Hwf3; ψ2^[[evar:E↦q]] ↾ Hwf4]}) i
pf₁: Γ ⊢i ψ1^[[evar:E↦p]] <---> ψ1^[[evar:E↦q]] using i
pf₂: Γ ⊢i ψ2^[[evar:E↦p]] <---> ψ2^[[evar:E↦q]] using i
well_formed (ψ1^[[evar:E↦q]] $ ψ2^[[evar:E↦q]])
Σ: Signature
Γ: Theory
ψ1, ψ2, p, q: Pattern
E: evar
i: ProofInfo
wfψ1: well_formed ψ1
wfψ2: well_formed ψ2
wfp: well_formed p
wfq: well_formed q
Hwf1: well_formed ψ1^[[evar:E↦p]] = true
HeqHwf1: Hwf1 = well_formed_free_evar_subst_0 E ψ1 p wfp wfψ1
Hwf2: well_formed ψ1^[[evar:E↦q]] = true
HeqHwf2: Hwf2 = well_formed_free_evar_subst_0 E ψ1 q wfq wfψ1
Hwf3: well_formed ψ2^[[evar:E↦p]] = true
HeqHwf3: Hwf3 = well_formed_free_evar_subst_0 E ψ2 p wfp wfψ2
Hwf4: well_formed ψ2^[[evar:E↦q]] = true
HeqHwf4: Hwf4 = well_formed_free_evar_subst_0 E ψ2 q wfq wfψ2
pile: ProofInfoLe (ExGen := ∅, SVSubst := ∅, KT := false, FP := {[ψ1^[[evar:E↦p]] ↾ Hwf1; ψ1^[[evar:E↦q]] ↾ Hwf2; ψ2^[[evar:E↦p]] ↾ Hwf3; ψ2^[[evar:E↦q]] ↾ Hwf4]}) i
pf₁: Γ ⊢i ψ1^[[evar:E↦p]] <---> ψ1^[[evar:E↦q]] using i
pf₂: Γ ⊢i ψ2^[[evar:E↦p]] <---> ψ2^[[evar:E↦q]] using i

well_formed (ψ1^[[evar:E↦p]] $ ψ2^[[evar:E↦p]])
abstract (wf_auto2).
Σ: Signature
Γ: Theory
ψ1, ψ2, p, q: Pattern
E: evar
i: ProofInfo
wfψ1: well_formed ψ1
wfψ2: well_formed ψ2
wfp: well_formed p
wfq: well_formed q
Hwf1: well_formed ψ1^[[evar:E↦p]] = true
HeqHwf1: Hwf1 = well_formed_free_evar_subst_0 E ψ1 p wfp wfψ1
Hwf2: well_formed ψ1^[[evar:E↦q]] = true
HeqHwf2: Hwf2 = well_formed_free_evar_subst_0 E ψ1 q wfq wfψ1
Hwf3: well_formed ψ2^[[evar:E↦p]] = true
HeqHwf3: Hwf3 = well_formed_free_evar_subst_0 E ψ2 p wfp wfψ2
Hwf4: well_formed ψ2^[[evar:E↦q]] = true
HeqHwf4: Hwf4 = well_formed_free_evar_subst_0 E ψ2 q wfq wfψ2
pile: ProofInfoLe (ExGen := ∅, SVSubst := ∅, KT := false, FP := {[ψ1^[[evar:E↦p]] ↾ Hwf1; ψ1^[[evar:E↦q]] ↾ Hwf2; ψ2^[[evar:E↦p]] ↾ Hwf3; ψ2^[[evar:E↦q]] ↾ Hwf4]}) i
pf₁: Γ ⊢i ψ1^[[evar:E↦p]] <---> ψ1^[[evar:E↦q]] using i
pf₂: Γ ⊢i ψ2^[[evar:E↦p]] <---> ψ2^[[evar:E↦q]] using i

well_formed (ψ1^[[evar:E↦q]] $ ψ2^[[evar:E↦p]])
Σ: Signature
Γ: Theory
ψ1, ψ2, p, q: Pattern
E: evar
i: ProofInfo
wfψ1: well_formed ψ1
wfψ2: well_formed ψ2
wfp: well_formed p
wfq: well_formed q
Hwf1: well_formed ψ1^[[evar:E↦p]] = true
HeqHwf1: Hwf1 = well_formed_free_evar_subst_0 E ψ1 p wfp wfψ1
Hwf2: well_formed ψ1^[[evar:E↦q]] = true
HeqHwf2: Hwf2 = well_formed_free_evar_subst_0 E ψ1 q wfq wfψ1
Hwf3: well_formed ψ2^[[evar:E↦p]] = true
HeqHwf3: Hwf3 = well_formed_free_evar_subst_0 E ψ2 p wfp wfψ2
Hwf4: well_formed ψ2^[[evar:E↦q]] = true
HeqHwf4: Hwf4 = well_formed_free_evar_subst_0 E ψ2 q wfq wfψ2
pile: ProofInfoLe (ExGen := ∅, SVSubst := ∅, KT := false, FP := {[ψ1^[[evar:E↦p]] ↾ Hwf1; ψ1^[[evar:E↦q]] ↾ Hwf2; ψ2^[[evar:E↦p]] ↾ Hwf3; ψ2^[[evar:E↦q]] ↾ Hwf4]}) i
pf₁: Γ ⊢i ψ1^[[evar:E↦p]] <---> ψ1^[[evar:E↦q]] using i
pf₂: Γ ⊢i ψ2^[[evar:E↦p]] <---> ψ2^[[evar:E↦q]] using i
well_formed (ψ1^[[evar:E↦q]] $ ψ2^[[evar:E↦q]])
Σ: Signature
Γ: Theory
ψ1, ψ2, p, q: Pattern
E: evar
i: ProofInfo
wfψ1: well_formed ψ1
wfψ2: well_formed ψ2
wfp: well_formed p
wfq: well_formed q
Hwf1: well_formed ψ1^[[evar:E↦p]] = true
HeqHwf1: Hwf1 = well_formed_free_evar_subst_0 E ψ1 p wfp wfψ1
Hwf2: well_formed ψ1^[[evar:E↦q]] = true
HeqHwf2: Hwf2 = well_formed_free_evar_subst_0 E ψ1 q wfq wfψ1
Hwf3: well_formed ψ2^[[evar:E↦p]] = true
HeqHwf3: Hwf3 = well_formed_free_evar_subst_0 E ψ2 p wfp wfψ2
Hwf4: well_formed ψ2^[[evar:E↦q]] = true
HeqHwf4: Hwf4 = well_formed_free_evar_subst_0 E ψ2 q wfq wfψ2
pile: ProofInfoLe (ExGen := ∅, SVSubst := ∅, KT := false, FP := {[ψ1^[[evar:E↦p]] ↾ Hwf1; ψ1^[[evar:E↦q]] ↾ Hwf2; ψ2^[[evar:E↦p]] ↾ Hwf3; ψ2^[[evar:E↦q]] ↾ Hwf4]}) i
pf₁: Γ ⊢i ψ1^[[evar:E↦p]] <---> ψ1^[[evar:E↦q]] using i
pf₂: Γ ⊢i ψ2^[[evar:E↦p]] <---> ψ2^[[evar:E↦q]] using i

well_formed (ψ1^[[evar:E↦q]] $ ψ2^[[evar:E↦p]])
abstract (wf_auto2).
Σ: Signature
Γ: Theory
ψ1, ψ2, p, q: Pattern
E: evar
i: ProofInfo
wfψ1: well_formed ψ1
wfψ2: well_formed ψ2
wfp: well_formed p
wfq: well_formed q
Hwf1: well_formed ψ1^[[evar:E↦p]] = true
HeqHwf1: Hwf1 = well_formed_free_evar_subst_0 E ψ1 p wfp wfψ1
Hwf2: well_formed ψ1^[[evar:E↦q]] = true
HeqHwf2: Hwf2 = well_formed_free_evar_subst_0 E ψ1 q wfq wfψ1
Hwf3: well_formed ψ2^[[evar:E↦p]] = true
HeqHwf3: Hwf3 = well_formed_free_evar_subst_0 E ψ2 p wfp wfψ2
Hwf4: well_formed ψ2^[[evar:E↦q]] = true
HeqHwf4: Hwf4 = well_formed_free_evar_subst_0 E ψ2 q wfq wfψ2
pile: ProofInfoLe (ExGen := ∅, SVSubst := ∅, KT := false, FP := {[ψ1^[[evar:E↦p]] ↾ Hwf1; ψ1^[[evar:E↦q]] ↾ Hwf2; ψ2^[[evar:E↦p]] ↾ Hwf3; ψ2^[[evar:E↦q]] ↾ Hwf4]}) i
pf₁: Γ ⊢i ψ1^[[evar:E↦p]] <---> ψ1^[[evar:E↦q]] using i
pf₂: Γ ⊢i ψ2^[[evar:E↦p]] <---> ψ2^[[evar:E↦q]] using i

well_formed (ψ1^[[evar:E↦q]] $ ψ2^[[evar:E↦q]])
Σ: Signature
Γ: Theory
ψ1, ψ2, p, q: Pattern
E: evar
i: ProofInfo
wfψ1: well_formed ψ1
wfψ2: well_formed ψ2
wfp: well_formed p
wfq: well_formed q
Hwf1: well_formed ψ1^[[evar:E↦p]] = true
HeqHwf1: Hwf1 = well_formed_free_evar_subst_0 E ψ1 p wfp wfψ1
Hwf2: well_formed ψ1^[[evar:E↦q]] = true
HeqHwf2: Hwf2 = well_formed_free_evar_subst_0 E ψ1 q wfq wfψ1
Hwf3: well_formed ψ2^[[evar:E↦p]] = true
HeqHwf3: Hwf3 = well_formed_free_evar_subst_0 E ψ2 p wfp wfψ2
Hwf4: well_formed ψ2^[[evar:E↦q]] = true
HeqHwf4: Hwf4 = well_formed_free_evar_subst_0 E ψ2 q wfq wfψ2
pile: ProofInfoLe (ExGen := ∅, SVSubst := ∅, KT := false, FP := {[ψ1^[[evar:E↦p]] ↾ Hwf1; ψ1^[[evar:E↦q]] ↾ Hwf2; ψ2^[[evar:E↦p]] ↾ Hwf3; ψ2^[[evar:E↦q]] ↾ Hwf4]}) i
pf₁: Γ ⊢i ψ1^[[evar:E↦p]] <---> ψ1^[[evar:E↦q]] using i
pf₂: Γ ⊢i ψ2^[[evar:E↦p]] <---> ψ2^[[evar:E↦q]] using i

well_formed (ψ1^[[evar:E↦q]] $ ψ2^[[evar:E↦q]])
abstract (wf_auto2). } Defined.
Σ: Signature
sz: nat
Γ: Theory
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
EvS: EVarSet
SvS: SVarSet
E: evar
ψ: Pattern
Hsz: size' ψ ≤ sz
wfψ: well_formed ψ
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
ψ_sub_EvS: free_evars ψ ⊆ EvS
E_in_EvS: E ∈ EvS
p_sub_SvS: free_svars p ⊆ SvS
q_sub_SvS: free_svars q ⊆ SvS
ψ_sub_SvS: free_svars ψ ⊆ SvS
exdepth, mudepth: nat
gpi: ProofInfo
pile: ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ p q wfψ wfp wfq)) gpi
pf: Γ ⊢i p <---> q using gpi

Γ ⊢i ψ^[[evar:E↦p]] <---> ψ^[[evar:E↦q]] using gpi
Σ: Signature
sz: nat
Γ: Theory
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
EvS: EVarSet
SvS: SVarSet
E: evar
ψ: Pattern
Hsz: size' ψ ≤ sz
wfψ: well_formed ψ
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
ψ_sub_EvS: free_evars ψ ⊆ EvS
E_in_EvS: E ∈ EvS
p_sub_SvS: free_svars p ⊆ SvS
q_sub_SvS: free_svars q ⊆ SvS
ψ_sub_SvS: free_svars ψ ⊆ SvS
exdepth, mudepth: nat
gpi: ProofInfo
pile: ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ p q wfψ wfp wfq)) gpi
pf: Γ ⊢i p <---> q using gpi

Γ ⊢i ψ^[[evar:E↦p]] <---> ψ^[[evar:E↦q]] using gpi
Σ: Signature
sz: nat
Γ: Theory
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
E: evar
exdepth, mudepth: nat
gpi: ProofInfo
pf: Γ ⊢i p <---> q using gpi

(ψ : Pattern) (wfψ : well_formed ψ), size' ψ ≤ sz → (EvS : EVarSet) (SvS : SVarSet), ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ p q wfψ wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ ⊆ SvS → Γ ⊢i ψ^[[evar:E↦p]] <---> ψ^[[evar:E↦q]] using gpi
Σ: Signature
Γ: Theory
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
E: evar
exdepth, mudepth: nat
gpi: ProofInfo
pf: Γ ⊢i p <---> q using gpi
ψ: Pattern
wfψ: well_formed ψ
Hsz: size' ψ ≤ 0
EvS: EVarSet
SvS: SVarSet
pile: ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ p q wfψ wfp wfq)) gpi
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
E_in_EvS: E ∈ EvS
ψ_sub_EvS: free_evars ψ ⊆ EvS
p_sub_SvS: free_svars p ⊆ SvS
q_sub_SvS: free_svars q ⊆ SvS
ψ_sub_SvS: free_svars ψ ⊆ SvS

Γ ⊢i ψ^[[evar:E↦p]] <---> ψ^[[evar:E↦q]] using gpi
Σ: Signature
sz: nat
Γ: Theory
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
E: evar
exdepth, mudepth: nat
gpi: ProofInfo
pf: Γ ⊢i p <---> q using gpi
IHsz: (ψ : Pattern) (wfψ : well_formed ψ), size' ψ ≤ sz → (EvS : EVarSet) (SvS : SVarSet), ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ p q wfψ wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ ⊆ SvS → Γ ⊢i ψ^[[evar:E↦p]] <---> ψ^[[evar:E↦q]] using gpi
ψ: Pattern
wfψ: well_formed ψ
Hsz: size' ψ ≤ S sz
EvS: EVarSet
SvS: SVarSet
pile: ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ p q wfψ wfp wfq)) gpi
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
E_in_EvS: E ∈ EvS
ψ_sub_EvS: free_evars ψ ⊆ EvS
p_sub_SvS: free_svars p ⊆ SvS
q_sub_SvS: free_svars q ⊆ SvS
ψ_sub_SvS: free_svars ψ ⊆ SvS
Γ ⊢i ψ^[[evar:E↦p]] <---> ψ^[[evar:E↦q]] using gpi
Σ: Signature
sz: nat
Γ: Theory
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
E: evar
exdepth, mudepth: nat
gpi: ProofInfo
pf: Γ ⊢i p <---> q using gpi
IHsz: (ψ : Pattern) (wfψ : well_formed ψ), size' ψ ≤ sz → (EvS : EVarSet) (SvS : SVarSet), ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ p q wfψ wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ ⊆ SvS → Γ ⊢i ψ^[[evar:E↦p]] <---> ψ^[[evar:E↦q]] using gpi
ψ: Pattern
wfψ: well_formed ψ
Hsz: size' ψ ≤ S sz
EvS: EVarSet
SvS: SVarSet
pile: ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ p q wfψ wfp wfq)) gpi
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
E_in_EvS: E ∈ EvS
ψ_sub_EvS: free_evars ψ ⊆ EvS
p_sub_SvS: free_svars p ⊆ SvS
q_sub_SvS: free_svars q ⊆ SvS
ψ_sub_SvS: free_svars ψ ⊆ SvS

Γ ⊢i ψ^[[evar:E↦p]] <---> ψ^[[evar:E↦q]] using gpi
Σ: Signature
sz: nat
Γ: Theory
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
E: evar
exdepth, mudepth: nat
gpi: ProofInfo
pf: Γ ⊢i p <---> q using gpi
IHsz: (ψ : Pattern) (wfψ : well_formed ψ), size' ψ ≤ sz → (EvS : EVarSet) (SvS : SVarSet), ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ p q wfψ wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ ⊆ SvS → Γ ⊢i ψ^[[evar:E↦p]] <---> ψ^[[evar:E↦q]] using gpi
ψ: Pattern
wfψ: well_formed ψ
Hsz: size' ψ ≤ S sz
EvS: EVarSet
SvS: SVarSet
i':= ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ p q wfψ wfp wfq): ProofInfo
pile: ProofInfoLe i' gpi
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
E_in_EvS: E ∈ EvS
ψ_sub_EvS: free_evars ψ ⊆ EvS
p_sub_SvS: free_svars p ⊆ SvS
q_sub_SvS: free_svars q ⊆ SvS
ψ_sub_SvS: free_svars ψ ⊆ SvS

Γ ⊢i ψ^[[evar:E↦p]] <---> ψ^[[evar:E↦q]] using gpi
Σ: Signature
sz: nat
Γ: Theory
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
E: evar
exdepth, mudepth: nat
gpi: ProofInfo
pf: Γ ⊢i p <---> q using gpi
IHsz: (ψ : Pattern) (wfψ : well_formed ψ), size' ψ ≤ sz → (EvS : EVarSet) (SvS : SVarSet), ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ p q wfψ wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ ⊆ SvS → Γ ⊢i ψ^[[evar:E↦p]] <---> ψ^[[evar:E↦q]] using gpi
ψ: Pattern
wfψ: well_formed ψ
Hsz: size' ψ ≤ S sz
EvS: EVarSet
SvS: SVarSet
i':= ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ p q wfψ wfp wfq): ProofInfo
pile: ProofInfoLe i' gpi
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
E_in_EvS: E ∈ EvS
ψ_sub_EvS: free_evars ψ ⊆ EvS
p_sub_SvS: free_svars p ⊆ SvS
q_sub_SvS: free_svars q ⊆ SvS
ψ_sub_SvS: free_svars ψ ⊆ SvS
HEinψ: E ∈ free_evars ψ

Γ ⊢i ψ^[[evar:E↦p]] <---> ψ^[[evar:E↦q]] using gpi
Σ: Signature
sz: nat
Γ: Theory
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
E: evar
exdepth, mudepth: nat
gpi: ProofInfo
pf: Γ ⊢i p <---> q using gpi
IHsz: (ψ : Pattern) (wfψ : well_formed ψ), size' ψ ≤ sz → (EvS : EVarSet) (SvS : SVarSet), ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ p q wfψ wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ ⊆ SvS → Γ ⊢i ψ^[[evar:E↦p]] <---> ψ^[[evar:E↦q]] using gpi
ψ: Pattern
wfψ: well_formed ψ
Hsz: size' ψ ≤ S sz
EvS: EVarSet
SvS: SVarSet
i':= ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ p q wfψ wfp wfq): ProofInfo
pile: ProofInfoLe i' gpi
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
E_in_EvS: E ∈ EvS
ψ_sub_EvS: free_evars ψ ⊆ EvS
p_sub_SvS: free_svars p ⊆ SvS
q_sub_SvS: free_svars q ⊆ SvS
ψ_sub_SvS: free_svars ψ ⊆ SvS
HEnotinψ: E ∉ free_evars ψ
Γ ⊢i ψ^[[evar:E↦p]] <---> ψ^[[evar:E↦q]] using gpi
Σ: Signature
sz: nat
Γ: Theory
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
E: evar
exdepth, mudepth: nat
gpi: ProofInfo
pf: Γ ⊢i p <---> q using gpi
IHsz: (ψ : Pattern) (wfψ : well_formed ψ), size' ψ ≤ sz → (EvS : EVarSet) (SvS : SVarSet), ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ p q wfψ wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ ⊆ SvS → Γ ⊢i ψ^[[evar:E↦p]] <---> ψ^[[evar:E↦q]] using gpi
ψ: Pattern
wfψ: well_formed ψ
Hsz: size' ψ ≤ S sz
EvS: EVarSet
SvS: SVarSet
i':= ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ p q wfψ wfp wfq): ProofInfo
pile: ProofInfoLe i' gpi
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
E_in_EvS: E ∈ EvS
ψ_sub_EvS: free_evars ψ ⊆ EvS
p_sub_SvS: free_svars p ⊆ SvS
q_sub_SvS: free_svars q ⊆ SvS
ψ_sub_SvS: free_svars ψ ⊆ SvS
HEnotinψ: E ∉ free_evars ψ

Γ ⊢i ψ^[[evar:E↦p]] <---> ψ^[[evar:E↦q]] using gpi
Σ: Signature
sz: nat
Γ: Theory
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
E: evar
exdepth, mudepth: nat
gpi: ProofInfo
pf: Γ ⊢i p <---> q using gpi
IHsz: (ψ : Pattern) (wfψ : well_formed ψ), size' ψ ≤ sz → (EvS : EVarSet) (SvS : SVarSet), ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ p q wfψ wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ ⊆ SvS → Γ ⊢i ψ^[[evar:E↦p]] <---> ψ^[[evar:E↦q]] using gpi
ψ: Pattern
wfψ: well_formed ψ
Hsz: size' ψ ≤ S sz
EvS: EVarSet
SvS: SVarSet
i':= ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ p q wfψ wfp wfq): ProofInfo
pile: ProofInfoLe i' gpi
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
E_in_EvS: E ∈ EvS
ψ_sub_EvS: free_evars ψ ⊆ EvS
p_sub_SvS: free_svars p ⊆ SvS
q_sub_SvS: free_svars q ⊆ SvS
ψ_sub_SvS: free_svars ψ ⊆ SvS
HEnotinψ: E ∉ free_evars ψ

(ψ^[[evar:E↦p]] <---> ψ^[[evar:E↦q]]) =
Σ: Signature
sz: nat
Γ: Theory
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
E: evar
exdepth, mudepth: nat
gpi: ProofInfo
pf: Γ ⊢i p <---> q using gpi
IHsz: (ψ : Pattern) (wfψ : well_formed ψ), size' ψ ≤ sz → (EvS : EVarSet) (SvS : SVarSet), ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ p q wfψ wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ ⊆ SvS → Γ ⊢i ψ^[[evar:E↦p]] <---> ψ^[[evar:E↦q]] using gpi
ψ: Pattern
wfψ: well_formed ψ
Hsz: size' ψ ≤ S sz
EvS: EVarSet
SvS: SVarSet
i':= ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ p q wfψ wfp wfq): ProofInfo
pile: ProofInfoLe i' gpi
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
E_in_EvS: E ∈ EvS
ψ_sub_EvS: free_evars ψ ⊆ EvS
p_sub_SvS: free_svars p ⊆ SvS
q_sub_SvS: free_svars q ⊆ SvS
ψ_sub_SvS: free_svars ψ ⊆ SvS
HEnotinψ: E ∉ free_evars ψ
Γ ⊢i using gpi
Σ: Signature
sz: nat
Γ: Theory
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
E: evar
exdepth, mudepth: nat
gpi: ProofInfo
pf: Γ ⊢i p <---> q using gpi
IHsz: (ψ : Pattern) (wfψ : well_formed ψ), size' ψ ≤ sz → (EvS : EVarSet) (SvS : SVarSet), ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ p q wfψ wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ ⊆ SvS → Γ ⊢i ψ^[[evar:E↦p]] <---> ψ^[[evar:E↦q]] using gpi
ψ: Pattern
wfψ: well_formed ψ
Hsz: size' ψ ≤ S sz
EvS: EVarSet
SvS: SVarSet
i':= ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ p q wfψ wfp wfq): ProofInfo
pile: ProofInfoLe i' gpi
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
E_in_EvS: E ∈ EvS
ψ_sub_EvS: free_evars ψ ⊆ EvS
p_sub_SvS: free_svars p ⊆ SvS
q_sub_SvS: free_svars q ⊆ SvS
ψ_sub_SvS: free_svars ψ ⊆ SvS
HEnotinψ: E ∉ free_evars ψ

(ψ^[[evar:E↦p]] <---> ψ^[[evar:E↦q]]) =
Σ: Signature
sz: nat
Γ: Theory
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
E: evar
exdepth, mudepth: nat
gpi: ProofInfo
pf: Γ ⊢i p <---> q using gpi
IHsz: (ψ : Pattern) (wfψ : well_formed ψ), size' ψ ≤ sz → (EvS : EVarSet) (SvS : SVarSet), ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ p q wfψ wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ ⊆ SvS → Γ ⊢i ψ^[[evar:E↦p]] <---> ψ^[[evar:E↦q]] using gpi
ψ: Pattern
wfψ: well_formed ψ
Hsz: size' ψ ≤ S sz
EvS: EVarSet
SvS: SVarSet
i':= ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ p q wfψ wfp wfq): ProofInfo
pile: ProofInfoLe i' gpi
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
E_in_EvS: E ∈ EvS
ψ_sub_EvS: free_evars ψ ⊆ EvS
p_sub_SvS: free_svars p ⊆ SvS
q_sub_SvS: free_svars q ⊆ SvS
ψ_sub_SvS: free_svars ψ ⊆ SvS
HEnotinψ: E ∉ free_evars ψ

count_evar_occurrences E ψ = 0
Σ: Signature
sz: nat
Γ: Theory
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
E: evar
exdepth, mudepth: nat
gpi: ProofInfo
pf: Γ ⊢i p <---> q using gpi
IHsz: (ψ : Pattern) (wfψ : well_formed ψ), size' ψ ≤ sz → (EvS : EVarSet) (SvS : SVarSet), ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ p q wfψ wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ ⊆ SvS → Γ ⊢i ψ^[[evar:E↦p]] <---> ψ^[[evar:E↦q]] using gpi
ψ: Pattern
wfψ: well_formed ψ
Hsz: size' ψ ≤ S sz
EvS: EVarSet
SvS: SVarSet
i':= ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ p q wfψ wfp wfq): ProofInfo
pile: ProofInfoLe i' gpi
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
E_in_EvS: E ∈ EvS
ψ_sub_EvS: free_evars ψ ⊆ EvS
p_sub_SvS: free_svars p ⊆ SvS
q_sub_SvS: free_svars q ⊆ SvS
ψ_sub_SvS: free_svars ψ ⊆ SvS
HEnotinψ: E ∉ free_evars ψ
(ψ <---> ψ^[[evar:E↦q]]) =
Σ: Signature
sz: nat
Γ: Theory
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
E: evar
exdepth, mudepth: nat
gpi: ProofInfo
pf: Γ ⊢i p <---> q using gpi
IHsz: (ψ : Pattern) (wfψ : well_formed ψ), size' ψ ≤ sz → (EvS : EVarSet) (SvS : SVarSet), ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ p q wfψ wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ ⊆ SvS → Γ ⊢i ψ^[[evar:E↦p]] <---> ψ^[[evar:E↦q]] using gpi
ψ: Pattern
wfψ: well_formed ψ
Hsz: size' ψ ≤ S sz
EvS: EVarSet
SvS: SVarSet
i':= ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ p q wfψ wfp wfq): ProofInfo
pile: ProofInfoLe i' gpi
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
E_in_EvS: E ∈ EvS
ψ_sub_EvS: free_evars ψ ⊆ EvS
p_sub_SvS: free_svars p ⊆ SvS
q_sub_SvS: free_svars q ⊆ SvS
ψ_sub_SvS: free_svars ψ ⊆ SvS
HEnotinψ: E ∉ free_evars ψ

count_evar_occurrences E ψ = 0
Σ: Signature
sz: nat
Γ: Theory
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
E: evar
exdepth, mudepth: nat
gpi: ProofInfo
pf: Γ ⊢i p <---> q using gpi
IHsz: (ψ : Pattern) (wfψ : well_formed ψ), size' ψ ≤ sz → (EvS : EVarSet) (SvS : SVarSet), ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ p q wfψ wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ ⊆ SvS → Γ ⊢i ψ^[[evar:E↦p]] <---> ψ^[[evar:E↦q]] using gpi
ψ: Pattern
wfψ: well_formed ψ
Hsz: size' ψ ≤ S sz
EvS: EVarSet
SvS: SVarSet
i':= ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ p q wfψ wfp wfq): ProofInfo
pile: ProofInfoLe i' gpi
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
E_in_EvS: E ∈ EvS
ψ_sub_EvS: free_evars ψ ⊆ EvS
p_sub_SvS: free_svars p ⊆ SvS
q_sub_SvS: free_svars q ⊆ SvS
ψ_sub_SvS: free_svars ψ ⊆ SvS
HEnotinψ: E ∉ free_evars ψ

E ∉ free_evars ψ
assumption.
Σ: Signature
sz: nat
Γ: Theory
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
E: evar
exdepth, mudepth: nat
gpi: ProofInfo
pf: Γ ⊢i p <---> q using gpi
IHsz: (ψ : Pattern) (wfψ : well_formed ψ), size' ψ ≤ sz → (EvS : EVarSet) (SvS : SVarSet), ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ p q wfψ wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ ⊆ SvS → Γ ⊢i ψ^[[evar:E↦p]] <---> ψ^[[evar:E↦q]] using gpi
ψ: Pattern
wfψ: well_formed ψ
Hsz: size' ψ ≤ S sz
EvS: EVarSet
SvS: SVarSet
i':= ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ p q wfψ wfp wfq): ProofInfo
pile: ProofInfoLe i' gpi
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
E_in_EvS: E ∈ EvS
ψ_sub_EvS: free_evars ψ ⊆ EvS
p_sub_SvS: free_svars p ⊆ SvS
q_sub_SvS: free_svars q ⊆ SvS
ψ_sub_SvS: free_svars ψ ⊆ SvS
HEnotinψ: E ∉ free_evars ψ

(ψ <---> ψ^[[evar:E↦q]]) =
Σ: Signature
sz: nat
Γ: Theory
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
E: evar
exdepth, mudepth: nat
gpi: ProofInfo
pf: Γ ⊢i p <---> q using gpi
IHsz: (ψ : Pattern) (wfψ : well_formed ψ), size' ψ ≤ sz → (EvS : EVarSet) (SvS : SVarSet), ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ p q wfψ wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ ⊆ SvS → Γ ⊢i ψ^[[evar:E↦p]] <---> ψ^[[evar:E↦q]] using gpi
ψ: Pattern
wfψ: well_formed ψ
Hsz: size' ψ ≤ S sz
EvS: EVarSet
SvS: SVarSet
i':= ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ p q wfψ wfp wfq): ProofInfo
pile: ProofInfoLe i' gpi
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
E_in_EvS: E ∈ EvS
ψ_sub_EvS: free_evars ψ ⊆ EvS
p_sub_SvS: free_svars p ⊆ SvS
q_sub_SvS: free_svars q ⊆ SvS
ψ_sub_SvS: free_svars ψ ⊆ SvS
HEnotinψ: E ∉ free_evars ψ

count_evar_occurrences E ψ = 0
Σ: Signature
sz: nat
Γ: Theory
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
E: evar
exdepth, mudepth: nat
gpi: ProofInfo
pf: Γ ⊢i p <---> q using gpi
IHsz: (ψ : Pattern) (wfψ : well_formed ψ), size' ψ ≤ sz → (EvS : EVarSet) (SvS : SVarSet), ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ p q wfψ wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ ⊆ SvS → Γ ⊢i ψ^[[evar:E↦p]] <---> ψ^[[evar:E↦q]] using gpi
ψ: Pattern
wfψ: well_formed ψ
Hsz: size' ψ ≤ S sz
EvS: EVarSet
SvS: SVarSet
i':= ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ p q wfψ wfp wfq): ProofInfo
pile: ProofInfoLe i' gpi
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
E_in_EvS: E ∈ EvS
ψ_sub_EvS: free_evars ψ ⊆ EvS
p_sub_SvS: free_svars p ⊆ SvS
q_sub_SvS: free_svars q ⊆ SvS
ψ_sub_SvS: free_svars ψ ⊆ SvS
HEnotinψ: E ∉ free_evars ψ
(ψ <---> ψ) =
Σ: Signature
sz: nat
Γ: Theory
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
E: evar
exdepth, mudepth: nat
gpi: ProofInfo
pf: Γ ⊢i p <---> q using gpi
IHsz: (ψ : Pattern) (wfψ : well_formed ψ), size' ψ ≤ sz → (EvS : EVarSet) (SvS : SVarSet), ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ p q wfψ wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ ⊆ SvS → Γ ⊢i ψ^[[evar:E↦p]] <---> ψ^[[evar:E↦q]] using gpi
ψ: Pattern
wfψ: well_formed ψ
Hsz: size' ψ ≤ S sz
EvS: EVarSet
SvS: SVarSet
i':= ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ p q wfψ wfp wfq): ProofInfo
pile: ProofInfoLe i' gpi
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
E_in_EvS: E ∈ EvS
ψ_sub_EvS: free_evars ψ ⊆ EvS
p_sub_SvS: free_svars p ⊆ SvS
q_sub_SvS: free_svars q ⊆ SvS
ψ_sub_SvS: free_svars ψ ⊆ SvS
HEnotinψ: E ∉ free_evars ψ

count_evar_occurrences E ψ = 0
Σ: Signature
sz: nat
Γ: Theory
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
E: evar
exdepth, mudepth: nat
gpi: ProofInfo
pf: Γ ⊢i p <---> q using gpi
IHsz: (ψ : Pattern) (wfψ : well_formed ψ), size' ψ ≤ sz → (EvS : EVarSet) (SvS : SVarSet), ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ p q wfψ wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ ⊆ SvS → Γ ⊢i ψ^[[evar:E↦p]] <---> ψ^[[evar:E↦q]] using gpi
ψ: Pattern
wfψ: well_formed ψ
Hsz: size' ψ ≤ S sz
EvS: EVarSet
SvS: SVarSet
i':= ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ p q wfψ wfp wfq): ProofInfo
pile: ProofInfoLe i' gpi
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
E_in_EvS: E ∈ EvS
ψ_sub_EvS: free_evars ψ ⊆ EvS
p_sub_SvS: free_svars p ⊆ SvS
q_sub_SvS: free_svars q ⊆ SvS
ψ_sub_SvS: free_svars ψ ⊆ SvS
HEnotinψ: E ∉ free_evars ψ

E ∉ free_evars ψ
assumption.
Σ: Signature
sz: nat
Γ: Theory
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
E: evar
exdepth, mudepth: nat
gpi: ProofInfo
pf: Γ ⊢i p <---> q using gpi
IHsz: (ψ : Pattern) (wfψ : well_formed ψ), size' ψ ≤ sz → (EvS : EVarSet) (SvS : SVarSet), ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ p q wfψ wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ ⊆ SvS → Γ ⊢i ψ^[[evar:E↦p]] <---> ψ^[[evar:E↦q]] using gpi
ψ: Pattern
wfψ: well_formed ψ
Hsz: size' ψ ≤ S sz
EvS: EVarSet
SvS: SVarSet
i':= ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ p q wfψ wfp wfq): ProofInfo
pile: ProofInfoLe i' gpi
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
E_in_EvS: E ∈ EvS
ψ_sub_EvS: free_evars ψ ⊆ EvS
p_sub_SvS: free_svars p ⊆ SvS
q_sub_SvS: free_svars q ⊆ SvS
ψ_sub_SvS: free_svars ψ ⊆ SvS
HEnotinψ: E ∉ free_evars ψ

(ψ <---> ψ) =
reflexivity.
Σ: Signature
sz: nat
Γ: Theory
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
E: evar
exdepth, mudepth: nat
gpi: ProofInfo
pf: Γ ⊢i p <---> q using gpi
IHsz: (ψ : Pattern) (wfψ : well_formed ψ), size' ψ ≤ sz → (EvS : EVarSet) (SvS : SVarSet), ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ p q wfψ wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ ⊆ SvS → Γ ⊢i ψ^[[evar:E↦p]] <---> ψ^[[evar:E↦q]] using gpi
ψ: Pattern
wfψ: well_formed ψ
Hsz: size' ψ ≤ S sz
EvS: EVarSet
SvS: SVarSet
i':= ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ p q wfψ wfp wfq): ProofInfo
pile: ProofInfoLe i' gpi
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
E_in_EvS: E ∈ EvS
ψ_sub_EvS: free_evars ψ ⊆ EvS
p_sub_SvS: free_svars p ⊆ SvS
q_sub_SvS: free_svars q ⊆ SvS
ψ_sub_SvS: free_svars ψ ⊆ SvS
HEnotinψ: E ∉ free_evars ψ

Γ ⊢i ψ <---> ψ using gpi
Σ: Signature
sz: nat
Γ: Theory
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
E: evar
exdepth, mudepth: nat
gpi: ProofInfo
pf: Γ ⊢i p <---> q using gpi
IHsz: (ψ : Pattern) (wfψ : well_formed ψ), size' ψ ≤ sz → (EvS : EVarSet) (SvS : SVarSet), ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ p q wfψ wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ ⊆ SvS → Γ ⊢i ψ^[[evar:E↦p]] <---> ψ^[[evar:E↦q]] using gpi
ψ: Pattern
wfψ: well_formed ψ
Hsz: size' ψ ≤ S sz
EvS: EVarSet
SvS: SVarSet
i':= ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ p q wfψ wfp wfq): ProofInfo
pile: ProofInfoLe i' gpi
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
E_in_EvS: E ∈ EvS
ψ_sub_EvS: free_evars ψ ⊆ EvS
p_sub_SvS: free_svars p ⊆ SvS
q_sub_SvS: free_svars q ⊆ SvS
ψ_sub_SvS: free_svars ψ ⊆ SvS
HEnotinψ: E ∉ free_evars ψ

Γ ⊢i ψ <---> ψ using BasicReasoning
Σ: Signature
sz: nat
Γ: Theory
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
E: evar
exdepth, mudepth: nat
gpi: ProofInfo
pf: Γ ⊢i p <---> q using gpi
IHsz: (ψ : Pattern) (wfψ : well_formed ψ), size' ψ ≤ sz → (EvS : EVarSet) (SvS : SVarSet), ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ p q wfψ wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ ⊆ SvS → Γ ⊢i ψ^[[evar:E↦p]] <---> ψ^[[evar:E↦q]] using gpi
ψ: Pattern
wfψ: well_formed ψ
Hsz: size' ψ ≤ S sz
EvS: EVarSet
SvS: SVarSet
i':= ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ p q wfψ wfp wfq): ProofInfo
pile: ProofInfoLe i' gpi
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
E_in_EvS: E ∈ EvS
ψ_sub_EvS: free_evars ψ ⊆ EvS
p_sub_SvS: free_svars p ⊆ SvS
q_sub_SvS: free_svars q ⊆ SvS
ψ_sub_SvS: free_svars ψ ⊆ SvS
HEnotinψ: E ∉ free_evars ψ

well_formed ψ
Σ: Signature
sz: nat
Γ: Theory
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
E: evar
exdepth, mudepth: nat
gpi: ProofInfo
pf: Γ ⊢i p <---> q using gpi
IHsz: (ψ : Pattern) (wfψ : well_formed ψ), size' ψ ≤ sz → (EvS : EVarSet) (SvS : SVarSet), ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ p q wfψ wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ ⊆ SvS → Γ ⊢i ψ^[[evar:E↦p]] <---> ψ^[[evar:E↦q]] using gpi
ψ: Pattern
wfψ: well_formed ψ
Hsz: size' ψ ≤ S sz
EvS: EVarSet
SvS: SVarSet
i':= ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ p q wfψ wfp wfq): ProofInfo
pile: ProofInfoLe i' gpi
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
E_in_EvS: E ∈ EvS
ψ_sub_EvS: free_evars ψ ⊆ EvS
p_sub_SvS: free_svars p ⊆ SvS
q_sub_SvS: free_svars q ⊆ SvS
ψ_sub_SvS: free_svars ψ ⊆ SvS
HEnotinψ: E ∉ free_evars ψ

well_formed ψ
abstract (wf_auto2). }
Σ: Signature
sz: nat
Γ: Theory
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
E: evar
exdepth, mudepth: nat
gpi: ProofInfo
pf: Γ ⊢i p <---> q using gpi
IHsz: (ψ : Pattern) (wfψ : well_formed ψ), size' ψ ≤ sz → (EvS : EVarSet) (SvS : SVarSet), ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ p q wfψ wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ ⊆ SvS → Γ ⊢i ψ^[[evar:E↦p]] <---> ψ^[[evar:E↦q]] using gpi
ψ: Pattern
wfψ: well_formed ψ
Hsz: size' ψ ≤ S sz
EvS: EVarSet
SvS: SVarSet
i':= ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ p q wfψ wfp wfq): ProofInfo
pile: ProofInfoLe i' gpi
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
E_in_EvS: E ∈ EvS
ψ_sub_EvS: free_evars ψ ⊆ EvS
p_sub_SvS: free_svars p ⊆ SvS
q_sub_SvS: free_svars q ⊆ SvS
ψ_sub_SvS: free_svars ψ ⊆ SvS
HEinψ: E ∈ free_evars ψ

Γ ⊢i ψ^[[evar:E↦p]] <---> ψ^[[evar:E↦q]] using gpi
Σ: Signature
sz: nat
Γ: Theory
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
E: evar
exdepth, mudepth: nat
gpi: ProofInfo
pf: Γ ⊢i p <---> q using gpi
IHsz: (ψ : Pattern) (wfψ : well_formed ψ), size' ψ ≤ sz → (EvS : EVarSet) (SvS : SVarSet), ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ p q wfψ wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ ⊆ SvS → Γ ⊢i ψ^[[evar:E↦p]] <---> ψ^[[evar:E↦q]] using gpi
x: evar
wfψ: well_formed (patt_free_evar x)
Hsz: 1 ≤ S sz
EvS: EVarSet
SvS: SVarSet
i':= ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (patt_free_evar x))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (patt_free_evar x))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (patt_free_evar x)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E (patt_free_evar x) p q wfψ wfp wfq): ProofInfo
pile: ProofInfoLe i' gpi
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
E_in_EvS: E ∈ EvS
ψ_sub_EvS: free_evars (patt_free_evar x) ⊆ EvS
p_sub_SvS: free_svars p ⊆ SvS
q_sub_SvS: free_svars q ⊆ SvS
ψ_sub_SvS: free_svars (patt_free_evar x) ⊆ SvS
HEinψ: E ∈ free_evars (patt_free_evar x)

Γ ⊢i (if decide (E = x) then p else patt_free_evar x) <---> (if decide (E = x) then q else patt_free_evar x) using gpi
Σ: Signature
sz: nat
Γ: Theory
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
E: evar
exdepth, mudepth: nat
gpi: ProofInfo
pf: Γ ⊢i p <---> q using gpi
IHsz: (ψ : Pattern) (wfψ : well_formed ψ), size' ψ ≤ sz → (EvS : EVarSet) (SvS : SVarSet), ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ p q wfψ wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ ⊆ SvS → Γ ⊢i ψ^[[evar:E↦p]] <---> ψ^[[evar:E↦q]] using gpi
x: svar
wfψ: well_formed (patt_free_svar x)
Hsz: 1 ≤ S sz
EvS: EVarSet
SvS: SVarSet
i':= ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (patt_free_svar x))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (patt_free_svar x))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (patt_free_svar x)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E (patt_free_svar x) p q wfψ wfp wfq): ProofInfo
pile: ProofInfoLe i' gpi
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
E_in_EvS: E ∈ EvS
ψ_sub_EvS: free_evars (patt_free_svar x) ⊆ EvS
p_sub_SvS: free_svars p ⊆ SvS
q_sub_SvS: free_svars q ⊆ SvS
ψ_sub_SvS: free_svars (patt_free_svar x) ⊆ SvS
HEinψ: E ∈ free_evars (patt_free_svar x)
Γ ⊢i patt_free_svar x <---> patt_free_svar x using gpi
Σ: Signature
sz: nat
Γ: Theory
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
E: evar
exdepth, mudepth: nat
gpi: ProofInfo
pf: Γ ⊢i p <---> q using gpi
IHsz: (ψ : Pattern) (wfψ : well_formed ψ), size' ψ ≤ sz → (EvS : EVarSet) (SvS : SVarSet), ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ p q wfψ wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ ⊆ SvS → Γ ⊢i ψ^[[evar:E↦p]] <---> ψ^[[evar:E↦q]] using gpi
n: db_index
wfψ: well_formed (patt_bound_evar n)
Hsz: 1 ≤ S sz
EvS: EVarSet
SvS: SVarSet
i':= ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (patt_bound_evar n))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (patt_bound_evar n))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (patt_bound_evar n)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E (patt_bound_evar n) p q wfψ wfp wfq): ProofInfo
pile: ProofInfoLe i' gpi
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
E_in_EvS: E ∈ EvS
ψ_sub_EvS: free_evars (patt_bound_evar n) ⊆ EvS
p_sub_SvS: free_svars p ⊆ SvS
q_sub_SvS: free_svars q ⊆ SvS
ψ_sub_SvS: free_svars (patt_bound_evar n) ⊆ SvS
HEinψ: E ∈ free_evars (patt_bound_evar n)
Γ ⊢i patt_bound_evar n <---> patt_bound_evar n using gpi
Σ: Signature
sz: nat
Γ: Theory
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
E: evar
exdepth, mudepth: nat
gpi: ProofInfo
pf: Γ ⊢i p <---> q using gpi
IHsz: (ψ : Pattern) (wfψ : well_formed ψ), size' ψ ≤ sz → (EvS : EVarSet) (SvS : SVarSet), ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ p q wfψ wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ ⊆ SvS → Γ ⊢i ψ^[[evar:E↦p]] <---> ψ^[[evar:E↦q]] using gpi
n: db_index
wfψ: well_formed (patt_bound_svar n)
Hsz: 1 ≤ S sz
EvS: EVarSet
SvS: SVarSet
i':= ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (patt_bound_svar n))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (patt_bound_svar n))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (patt_bound_svar n)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E (patt_bound_svar n) p q wfψ wfp wfq): ProofInfo
pile: ProofInfoLe i' gpi
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
E_in_EvS: E ∈ EvS
ψ_sub_EvS: free_evars (patt_bound_svar n) ⊆ EvS
p_sub_SvS: free_svars p ⊆ SvS
q_sub_SvS: free_svars q ⊆ SvS
ψ_sub_SvS: free_svars (patt_bound_svar n) ⊆ SvS
HEinψ: E ∈ free_evars (patt_bound_svar n)
Γ ⊢i patt_bound_svar n <---> patt_bound_svar n using gpi
Σ: Signature
sz: nat
Γ: Theory
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
E: evar
exdepth, mudepth: nat
gpi: ProofInfo
pf: Γ ⊢i p <---> q using gpi
IHsz: (ψ : Pattern) (wfψ : well_formed ψ), size' ψ ≤ sz → (EvS : EVarSet) (SvS : SVarSet), ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ p q wfψ wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ ⊆ SvS → Γ ⊢i ψ^[[evar:E↦p]] <---> ψ^[[evar:E↦q]] using gpi
sigma: symbols
wfψ: well_formed (patt_sym sigma)
Hsz: 1 ≤ S sz
EvS: EVarSet
SvS: SVarSet
i':= ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (patt_sym sigma))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (patt_sym sigma))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (patt_sym sigma)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E (patt_sym sigma) p q wfψ wfp wfq): ProofInfo
pile: ProofInfoLe i' gpi
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
E_in_EvS: E ∈ EvS
ψ_sub_EvS: free_evars (patt_sym sigma) ⊆ EvS
p_sub_SvS: free_svars p ⊆ SvS
q_sub_SvS: free_svars q ⊆ SvS
ψ_sub_SvS: free_svars (patt_sym sigma) ⊆ SvS
HEinψ: E ∈ free_evars (patt_sym sigma)
Γ ⊢i patt_sym sigma <---> patt_sym sigma using gpi
Σ: Signature
sz: nat
Γ: Theory
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
E: evar
exdepth, mudepth: nat
gpi: ProofInfo
pf: Γ ⊢i p <---> q using gpi
IHsz: (ψ : Pattern) (wfψ : well_formed ψ), size' ψ ≤ sz → (EvS : EVarSet) (SvS : SVarSet), ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ p q wfψ wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ ⊆ SvS → Γ ⊢i ψ^[[evar:E↦p]] <---> ψ^[[evar:E↦q]] using gpi
ψ1, ψ2: Pattern
wfψ: well_formed (ψ1 $ ψ2)
Hsz: S (size' ψ1 + size' ψ2) ≤ S sz
EvS: EVarSet
SvS: SVarSet
i':= ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (ψ1 $ ψ2))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (ψ1 $ ψ2))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (ψ1 $ ψ2)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E (ψ1 $ ψ2) p q wfψ wfp wfq): ProofInfo
pile: ProofInfoLe i' gpi
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
E_in_EvS: E ∈ EvS
ψ_sub_EvS: free_evars (ψ1 $ ψ2) ⊆ EvS
p_sub_SvS: free_svars p ⊆ SvS
q_sub_SvS: free_svars q ⊆ SvS
ψ_sub_SvS: free_svars (ψ1 $ ψ2) ⊆ SvS
HEinψ: E ∈ free_evars (ψ1 $ ψ2)
Γ ⊢i ψ1^[[evar:E↦p]] $ ψ2^[[evar:E↦p]] <---> ψ1^[[evar:E↦q]] $ ψ2^[[evar:E↦q]] using gpi
Σ: Signature
sz: nat
Γ: Theory
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
E: evar
exdepth, mudepth: nat
gpi: ProofInfo
pf: Γ ⊢i p <---> q using gpi
IHsz: (ψ : Pattern) (wfψ : well_formed ψ), size' ψ ≤ sz → (EvS : EVarSet) (SvS : SVarSet), ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ p q wfψ wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ ⊆ SvS → Γ ⊢i ψ^[[evar:E↦p]] <---> ψ^[[evar:E↦q]] using gpi
wfψ: well_formed ⊥
Hsz: 1 ≤ S sz
EvS: EVarSet
SvS: SVarSet
i':= ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ⊥)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ⊥)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ⊥) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ⊥ p q wfψ wfp wfq): ProofInfo
pile: ProofInfoLe i' gpi
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
E_in_EvS: E ∈ EvS
ψ_sub_EvS: free_evars ⊥ ⊆ EvS
p_sub_SvS: free_svars p ⊆ SvS
q_sub_SvS: free_svars q ⊆ SvS
ψ_sub_SvS: free_svars ⊥ ⊆ SvS
HEinψ: E ∈ free_evars ⊥
Γ ⊢i ⊥ <---> ⊥ using gpi
Σ: Signature
sz: nat
Γ: Theory
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
E: evar
exdepth, mudepth: nat
gpi: ProofInfo
pf: Γ ⊢i p <---> q using gpi
IHsz: (ψ : Pattern) (wfψ : well_formed ψ), size' ψ ≤ sz → (EvS : EVarSet) (SvS : SVarSet), ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ p q wfψ wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ ⊆ SvS → Γ ⊢i ψ^[[evar:E↦p]] <---> ψ^[[evar:E↦q]] using gpi
ψ1, ψ2: Pattern
wfψ: well_formed (ψ1 ---> ψ2)
Hsz: S (size' ψ1 + size' ψ2) ≤ S sz
EvS: EVarSet
SvS: SVarSet
i':= ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (ψ1 ---> ψ2))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (ψ1 ---> ψ2))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (ψ1 ---> ψ2)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E (ψ1 ---> ψ2) p q wfψ wfp wfq): ProofInfo
pile: ProofInfoLe i' gpi
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
E_in_EvS: E ∈ EvS
ψ_sub_EvS: free_evars (ψ1 ---> ψ2) ⊆ EvS
p_sub_SvS: free_svars p ⊆ SvS
q_sub_SvS: free_svars q ⊆ SvS
ψ_sub_SvS: free_svars (ψ1 ---> ψ2) ⊆ SvS
HEinψ: E ∈ free_evars (ψ1 ---> ψ2)
Γ ⊢i (ψ1^[[evar:E↦p]] ---> ψ2^[[evar:E↦p]]) <---> (ψ1^[[evar:E↦q]] ---> ψ2^[[evar:E↦q]]) using gpi
Σ: Signature
sz: nat
Γ: Theory
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
E: evar
exdepth, mudepth: nat
gpi: ProofInfo
pf: Γ ⊢i p <---> q using gpi
IHsz: (ψ : Pattern) (wfψ : well_formed ψ), size' ψ ≤ sz → (EvS : EVarSet) (SvS : SVarSet), ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ p q wfψ wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ ⊆ SvS → Γ ⊢i ψ^[[evar:E↦p]] <---> ψ^[[evar:E↦q]] using gpi
ψ: Pattern
wfψ: well_formed (ex , ψ)
Hsz: S (size' ψ) ≤ S sz
EvS: EVarSet
SvS: SVarSet
i':= ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (ex , ψ))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (ex , ψ))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (ex , ψ)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E (ex , ψ) p q wfψ wfp wfq): ProofInfo
pile: ProofInfoLe i' gpi
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
E_in_EvS: E ∈ EvS
ψ_sub_EvS: free_evars (ex , ψ) ⊆ EvS
p_sub_SvS: free_svars p ⊆ SvS
q_sub_SvS: free_svars q ⊆ SvS
ψ_sub_SvS: free_svars (ex , ψ) ⊆ SvS
HEinψ: E ∈ free_evars (ex , ψ)
Γ ⊢i (ex , ψ^[[evar:E↦p]]) <---> (ex , ψ^[[evar:E↦q]]) using gpi
Σ: Signature
sz: nat
Γ: Theory
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
E: evar
exdepth, mudepth: nat
gpi: ProofInfo
pf: Γ ⊢i p <---> q using gpi
IHsz: (ψ : Pattern) (wfψ : well_formed ψ), size' ψ ≤ sz → (EvS : EVarSet) (SvS : SVarSet), ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ p q wfψ wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ ⊆ SvS → Γ ⊢i ψ^[[evar:E↦p]] <---> ψ^[[evar:E↦q]] using gpi
ψ: Pattern
wfψ: well_formed (mu , ψ)
Hsz: S (size' ψ) ≤ S sz
EvS: EVarSet
SvS: SVarSet
i':= ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (mu , ψ))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (mu , ψ))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (mu , ψ)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E (mu , ψ) p q wfψ wfp wfq): ProofInfo
pile: ProofInfoLe i' gpi
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
E_in_EvS: E ∈ EvS
ψ_sub_EvS: free_evars (mu , ψ) ⊆ EvS
p_sub_SvS: free_svars p ⊆ SvS
q_sub_SvS: free_svars q ⊆ SvS
ψ_sub_SvS: free_svars (mu , ψ) ⊆ SvS
HEinψ: E ∈ free_evars (mu , ψ)
Γ ⊢i (mu , ψ^[[evar:E↦p]]) <---> (mu , ψ^[[evar:E↦q]]) using gpi
Σ: Signature
sz: nat
Γ: Theory
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
E: evar
exdepth, mudepth: nat
gpi: ProofInfo
pf: Γ ⊢i p <---> q using gpi
IHsz: (ψ : Pattern) (wfψ : well_formed ψ), size' ψ ≤ sz → (EvS : EVarSet) (SvS : SVarSet), ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ p q wfψ wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ ⊆ SvS → Γ ⊢i ψ^[[evar:E↦p]] <---> ψ^[[evar:E↦q]] using gpi
x: evar
wfψ: well_formed (patt_free_evar x)
Hsz: 1 ≤ S sz
EvS: EVarSet
SvS: SVarSet
i':= ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (patt_free_evar x))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (patt_free_evar x))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (patt_free_evar x)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E (patt_free_evar x) p q wfψ wfp wfq): ProofInfo
pile: ProofInfoLe i' gpi
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
E_in_EvS: E ∈ EvS
ψ_sub_EvS: free_evars (patt_free_evar x) ⊆ EvS
p_sub_SvS: free_svars p ⊆ SvS
q_sub_SvS: free_svars q ⊆ SvS
ψ_sub_SvS: free_svars (patt_free_evar x) ⊆ SvS
HEinψ: E ∈ free_evars (patt_free_evar x)

Γ ⊢i (if decide (E = x) then p else patt_free_evar x) <---> (if decide (E = x) then q else patt_free_evar x) using gpi
Σ: Signature
sz: nat
Γ: Theory
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
E: evar
exdepth, mudepth: nat
gpi: ProofInfo
pf: Γ ⊢i p <---> q using gpi
IHsz: (ψ : Pattern) (wfψ : well_formed ψ), size' ψ ≤ sz → (EvS : EVarSet) (SvS : SVarSet), ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ p q wfψ wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ ⊆ SvS → Γ ⊢i ψ^[[evar:E↦p]] <---> ψ^[[evar:E↦q]] using gpi
x: evar
wfψ: well_formed (patt_free_evar x)
Hsz: 1 ≤ S sz
EvS: EVarSet
SvS: SVarSet
i':= ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (patt_free_evar x))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (patt_free_evar x))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (patt_free_evar x)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E (patt_free_evar x) p q wfψ wfp wfq): ProofInfo
pile: ProofInfoLe i' gpi
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
E_in_EvS: E ∈ EvS
ψ_sub_EvS: free_evars (patt_free_evar x) ⊆ EvS
p_sub_SvS: free_svars p ⊆ SvS
q_sub_SvS: free_svars q ⊆ SvS
ψ_sub_SvS: free_svars (patt_free_evar x) ⊆ SvS
HEinψ: E ∈ free_evars (patt_free_evar x)
e: E = x

Γ ⊢i p <---> q using gpi
Σ: Signature
sz: nat
Γ: Theory
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
E: evar
exdepth, mudepth: nat
gpi: ProofInfo
pf: Γ ⊢i p <---> q using gpi
IHsz: (ψ : Pattern) (wfψ : well_formed ψ), size' ψ ≤ sz → (EvS : EVarSet) (SvS : SVarSet), ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ p q wfψ wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ ⊆ SvS → Γ ⊢i ψ^[[evar:E↦p]] <---> ψ^[[evar:E↦q]] using gpi
x: evar
wfψ: well_formed (patt_free_evar x)
Hsz: 1 ≤ S sz
EvS: EVarSet
SvS: SVarSet
i':= ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (patt_free_evar x))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (patt_free_evar x))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (patt_free_evar x)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E (patt_free_evar x) p q wfψ wfp wfq): ProofInfo
pile: ProofInfoLe i' gpi
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
E_in_EvS: E ∈ EvS
ψ_sub_EvS: free_evars (patt_free_evar x) ⊆ EvS
p_sub_SvS: free_svars p ⊆ SvS
q_sub_SvS: free_svars q ⊆ SvS
ψ_sub_SvS: free_svars (patt_free_evar x) ⊆ SvS
HEinψ: E ∈ free_evars (patt_free_evar x)
n: E ≠ x
Γ ⊢i patt_free_evar x <---> patt_free_evar x using gpi
Σ: Signature
sz: nat
Γ: Theory
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
E: evar
exdepth, mudepth: nat
gpi: ProofInfo
pf: Γ ⊢i p <---> q using gpi
IHsz: (ψ : Pattern) (wfψ : well_formed ψ), size' ψ ≤ sz → (EvS : EVarSet) (SvS : SVarSet), ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ p q wfψ wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ ⊆ SvS → Γ ⊢i ψ^[[evar:E↦p]] <---> ψ^[[evar:E↦q]] using gpi
x: evar
wfψ: well_formed (patt_free_evar x)
Hsz: 1 ≤ S sz
EvS: EVarSet
SvS: SVarSet
i':= ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (patt_free_evar x))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (patt_free_evar x))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (patt_free_evar x)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E (patt_free_evar x) p q wfψ wfp wfq): ProofInfo
pile: ProofInfoLe i' gpi
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
E_in_EvS: E ∈ EvS
ψ_sub_EvS: free_evars (patt_free_evar x) ⊆ EvS
p_sub_SvS: free_svars p ⊆ SvS
q_sub_SvS: free_svars q ⊆ SvS
ψ_sub_SvS: free_svars (patt_free_evar x) ⊆ SvS
HEinψ: E ∈ free_evars (patt_free_evar x)
e: E = x

Γ ⊢i p <---> q using gpi
exact pf.
Σ: Signature
sz: nat
Γ: Theory
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
E: evar
exdepth, mudepth: nat
gpi: ProofInfo
pf: Γ ⊢i p <---> q using gpi
IHsz: (ψ : Pattern) (wfψ : well_formed ψ), size' ψ ≤ sz → (EvS : EVarSet) (SvS : SVarSet), ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ p q wfψ wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ ⊆ SvS → Γ ⊢i ψ^[[evar:E↦p]] <---> ψ^[[evar:E↦q]] using gpi
x: evar
wfψ: well_formed (patt_free_evar x)
Hsz: 1 ≤ S sz
EvS: EVarSet
SvS: SVarSet
i':= ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (patt_free_evar x))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (patt_free_evar x))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (patt_free_evar x)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E (patt_free_evar x) p q wfψ wfp wfq): ProofInfo
pile: ProofInfoLe i' gpi
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
E_in_EvS: E ∈ EvS
ψ_sub_EvS: free_evars (patt_free_evar x) ⊆ EvS
p_sub_SvS: free_svars p ⊆ SvS
q_sub_SvS: free_svars q ⊆ SvS
ψ_sub_SvS: free_svars (patt_free_evar x) ⊆ SvS
HEinψ: E ∈ free_evars (patt_free_evar x)
n: E ≠ x

Γ ⊢i patt_free_evar x <---> patt_free_evar x using gpi
Σ: Signature
sz: nat
Γ: Theory
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
E: evar
exdepth, mudepth: nat
gpi: ProofInfo
pf: Γ ⊢i p <---> q using gpi
IHsz: (ψ : Pattern) (wfψ : well_formed ψ), size' ψ ≤ sz → (EvS : EVarSet) (SvS : SVarSet), ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ p q wfψ wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ ⊆ SvS → Γ ⊢i ψ^[[evar:E↦p]] <---> ψ^[[evar:E↦q]] using gpi
x: evar
wfψ: well_formed (patt_free_evar x)
Hsz: 1 ≤ S sz
EvS: EVarSet
SvS: SVarSet
i':= ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (patt_free_evar x))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (patt_free_evar x))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (patt_free_evar x)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E (patt_free_evar x) p q wfψ wfp wfq): ProofInfo
pile: ProofInfoLe i' gpi
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
E_in_EvS: E ∈ EvS
ψ_sub_EvS: free_evars (patt_free_evar x) ⊆ EvS
p_sub_SvS: free_svars p ⊆ SvS
q_sub_SvS: free_svars q ⊆ SvS
ψ_sub_SvS: free_svars (patt_free_evar x) ⊆ SvS
HEinψ: E ∈ free_evars (patt_free_evar x)
n: E ≠ x

Γ ⊢i patt_free_evar x <---> patt_free_evar x using gpi
Σ: Signature
sz: nat
Γ: Theory
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
E: evar
exdepth, mudepth: nat
gpi: ProofInfo
pf: Γ ⊢i p <---> q using gpi
IHsz: (ψ : Pattern) (wfψ : well_formed ψ), size' ψ ≤ sz → (EvS : EVarSet) (SvS : SVarSet), ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ p q wfψ wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ ⊆ SvS → Γ ⊢i ψ^[[evar:E↦p]] <---> ψ^[[evar:E↦q]] using gpi
x: evar
wfψ: well_formed (patt_free_evar x)
Hsz: 1 ≤ S sz
EvS: EVarSet
SvS: SVarSet
i':= ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (patt_free_evar x))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (patt_free_evar x))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (patt_free_evar x)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E (patt_free_evar x) p q wfψ wfp wfq): ProofInfo
pile: ProofInfoLe i' gpi
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
E_in_EvS: E ∈ EvS
ψ_sub_EvS: free_evars (patt_free_evar x) ⊆ EvS
p_sub_SvS: free_svars p ⊆ SvS
q_sub_SvS: free_svars q ⊆ SvS
ψ_sub_SvS: free_svars (patt_free_evar x) ⊆ SvS
HEinψ: E ∈ free_evars (patt_free_evar x)
n: E ≠ x

Γ ⊢i patt_free_evar x <---> patt_free_evar x using BasicReasoning
Σ: Signature
sz: nat
Γ: Theory
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
E: evar
exdepth, mudepth: nat
gpi: ProofInfo
pf: Γ ⊢i p <---> q using gpi
IHsz: (ψ : Pattern) (wfψ : well_formed ψ), size' ψ ≤ sz → (EvS : EVarSet) (SvS : SVarSet), ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ p q wfψ wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ ⊆ SvS → Γ ⊢i ψ^[[evar:E↦p]] <---> ψ^[[evar:E↦q]] using gpi
x: evar
wfψ: well_formed (patt_free_evar x)
Hsz: 1 ≤ S sz
EvS: EVarSet
SvS: SVarSet
i':= ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (patt_free_evar x))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (patt_free_evar x))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (patt_free_evar x)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E (patt_free_evar x) p q wfψ wfp wfq): ProofInfo
pile: ProofInfoLe i' gpi
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
E_in_EvS: E ∈ EvS
ψ_sub_EvS: free_evars (patt_free_evar x) ⊆ EvS
p_sub_SvS: free_svars p ⊆ SvS
q_sub_SvS: free_svars q ⊆ SvS
ψ_sub_SvS: free_svars (patt_free_evar x) ⊆ SvS
HEinψ: E ∈ free_evars (patt_free_evar x)
n: E ≠ x

well_formed (patt_free_evar x)
abstract (wf_auto2). }
Σ: Signature
sz: nat
Γ: Theory
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
E: evar
exdepth, mudepth: nat
gpi: ProofInfo
pf: Γ ⊢i p <---> q using gpi
IHsz: (ψ : Pattern) (wfψ : well_formed ψ), size' ψ ≤ sz → (EvS : EVarSet) (SvS : SVarSet), ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ p q wfψ wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ ⊆ SvS → Γ ⊢i ψ^[[evar:E↦p]] <---> ψ^[[evar:E↦q]] using gpi
x: svar
wfψ: well_formed (patt_free_svar x)
Hsz: 1 ≤ S sz
EvS: EVarSet
SvS: SVarSet
i':= ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (patt_free_svar x))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (patt_free_svar x))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (patt_free_svar x)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E (patt_free_svar x) p q wfψ wfp wfq): ProofInfo
pile: ProofInfoLe i' gpi
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
E_in_EvS: E ∈ EvS
ψ_sub_EvS: free_evars (patt_free_svar x) ⊆ EvS
p_sub_SvS: free_svars p ⊆ SvS
q_sub_SvS: free_svars q ⊆ SvS
ψ_sub_SvS: free_svars (patt_free_svar x) ⊆ SvS
HEinψ: E ∈ free_evars (patt_free_svar x)

Γ ⊢i patt_free_svar x <---> patt_free_svar x using gpi
Σ: Signature
sz: nat
Γ: Theory
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
E: evar
exdepth, mudepth: nat
gpi: ProofInfo
pf: Γ ⊢i p <---> q using gpi
IHsz: (ψ : Pattern) (wfψ : well_formed ψ), size' ψ ≤ sz → (EvS : EVarSet) (SvS : SVarSet), ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ p q wfψ wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ ⊆ SvS → Γ ⊢i ψ^[[evar:E↦p]] <---> ψ^[[evar:E↦q]] using gpi
n: db_index
wfψ: well_formed (patt_bound_evar n)
Hsz: 1 ≤ S sz
EvS: EVarSet
SvS: SVarSet
i':= ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (patt_bound_evar n))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (patt_bound_evar n))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (patt_bound_evar n)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E (patt_bound_evar n) p q wfψ wfp wfq): ProofInfo
pile: ProofInfoLe i' gpi
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
E_in_EvS: E ∈ EvS
ψ_sub_EvS: free_evars (patt_bound_evar n) ⊆ EvS
p_sub_SvS: free_svars p ⊆ SvS
q_sub_SvS: free_svars q ⊆ SvS
ψ_sub_SvS: free_svars (patt_bound_evar n) ⊆ SvS
HEinψ: E ∈ free_evars (patt_bound_evar n)
Γ ⊢i patt_bound_evar n <---> patt_bound_evar n using gpi
Σ: Signature
sz: nat
Γ: Theory
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
E: evar
exdepth, mudepth: nat
gpi: ProofInfo
pf: Γ ⊢i p <---> q using gpi
IHsz: (ψ : Pattern) (wfψ : well_formed ψ), size' ψ ≤ sz → (EvS : EVarSet) (SvS : SVarSet), ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ p q wfψ wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ ⊆ SvS → Γ ⊢i ψ^[[evar:E↦p]] <---> ψ^[[evar:E↦q]] using gpi
n: db_index
wfψ: well_formed (patt_bound_svar n)
Hsz: 1 ≤ S sz
EvS: EVarSet
SvS: SVarSet
i':= ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (patt_bound_svar n))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (patt_bound_svar n))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (patt_bound_svar n)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E (patt_bound_svar n) p q wfψ wfp wfq): ProofInfo
pile: ProofInfoLe i' gpi
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
E_in_EvS: E ∈ EvS
ψ_sub_EvS: free_evars (patt_bound_svar n) ⊆ EvS
p_sub_SvS: free_svars p ⊆ SvS
q_sub_SvS: free_svars q ⊆ SvS
ψ_sub_SvS: free_svars (patt_bound_svar n) ⊆ SvS
HEinψ: E ∈ free_evars (patt_bound_svar n)
Γ ⊢i patt_bound_svar n <---> patt_bound_svar n using gpi
Σ: Signature
sz: nat
Γ: Theory
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
E: evar
exdepth, mudepth: nat
gpi: ProofInfo
pf: Γ ⊢i p <---> q using gpi
IHsz: (ψ : Pattern) (wfψ : well_formed ψ), size' ψ ≤ sz → (EvS : EVarSet) (SvS : SVarSet), ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ p q wfψ wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ ⊆ SvS → Γ ⊢i ψ^[[evar:E↦p]] <---> ψ^[[evar:E↦q]] using gpi
sigma: symbols
wfψ: well_formed (patt_sym sigma)
Hsz: 1 ≤ S sz
EvS: EVarSet
SvS: SVarSet
i':= ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (patt_sym sigma))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (patt_sym sigma))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (patt_sym sigma)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E (patt_sym sigma) p q wfψ wfp wfq): ProofInfo
pile: ProofInfoLe i' gpi
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
E_in_EvS: E ∈ EvS
ψ_sub_EvS: free_evars (patt_sym sigma) ⊆ EvS
p_sub_SvS: free_svars p ⊆ SvS
q_sub_SvS: free_svars q ⊆ SvS
ψ_sub_SvS: free_svars (patt_sym sigma) ⊆ SvS
HEinψ: E ∈ free_evars (patt_sym sigma)
Γ ⊢i patt_sym sigma <---> patt_sym sigma using gpi
Σ: Signature
sz: nat
Γ: Theory
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
E: evar
exdepth, mudepth: nat
gpi: ProofInfo
pf: Γ ⊢i p <---> q using gpi
IHsz: (ψ : Pattern) (wfψ : well_formed ψ), size' ψ ≤ sz → (EvS : EVarSet) (SvS : SVarSet), ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ p q wfψ wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ ⊆ SvS → Γ ⊢i ψ^[[evar:E↦p]] <---> ψ^[[evar:E↦q]] using gpi
ψ1, ψ2: Pattern
wfψ: well_formed (ψ1 $ ψ2)
Hsz: S (size' ψ1 + size' ψ2) ≤ S sz
EvS: EVarSet
SvS: SVarSet
i':= ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (ψ1 $ ψ2))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (ψ1 $ ψ2))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (ψ1 $ ψ2)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E (ψ1 $ ψ2) p q wfψ wfp wfq): ProofInfo
pile: ProofInfoLe i' gpi
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
E_in_EvS: E ∈ EvS
ψ_sub_EvS: free_evars (ψ1 $ ψ2) ⊆ EvS
p_sub_SvS: free_svars p ⊆ SvS
q_sub_SvS: free_svars q ⊆ SvS
ψ_sub_SvS: free_svars (ψ1 $ ψ2) ⊆ SvS
HEinψ: E ∈ free_evars (ψ1 $ ψ2)
Γ ⊢i ψ1^[[evar:E↦p]] $ ψ2^[[evar:E↦p]] <---> ψ1^[[evar:E↦q]] $ ψ2^[[evar:E↦q]] using gpi
Σ: Signature
sz: nat
Γ: Theory
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
E: evar
exdepth, mudepth: nat
gpi: ProofInfo
pf: Γ ⊢i p <---> q using gpi
IHsz: (ψ : Pattern) (wfψ : well_formed ψ), size' ψ ≤ sz → (EvS : EVarSet) (SvS : SVarSet), ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ p q wfψ wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ ⊆ SvS → Γ ⊢i ψ^[[evar:E↦p]] <---> ψ^[[evar:E↦q]] using gpi
wfψ: well_formed ⊥
Hsz: 1 ≤ S sz
EvS: EVarSet
SvS: SVarSet
i':= ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ⊥)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ⊥)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ⊥) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ⊥ p q wfψ wfp wfq): ProofInfo
pile: ProofInfoLe i' gpi
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
E_in_EvS: E ∈ EvS
ψ_sub_EvS: free_evars ⊥ ⊆ EvS
p_sub_SvS: free_svars p ⊆ SvS
q_sub_SvS: free_svars q ⊆ SvS
ψ_sub_SvS: free_svars ⊥ ⊆ SvS
HEinψ: E ∈ free_evars ⊥
Γ ⊢i ⊥ <---> ⊥ using gpi
Σ: Signature
sz: nat
Γ: Theory
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
E: evar
exdepth, mudepth: nat
gpi: ProofInfo
pf: Γ ⊢i p <---> q using gpi
IHsz: (ψ : Pattern) (wfψ : well_formed ψ), size' ψ ≤ sz → (EvS : EVarSet) (SvS : SVarSet), ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ p q wfψ wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ ⊆ SvS → Γ ⊢i ψ^[[evar:E↦p]] <---> ψ^[[evar:E↦q]] using gpi
ψ1, ψ2: Pattern
wfψ: well_formed (ψ1 ---> ψ2)
Hsz: S (size' ψ1 + size' ψ2) ≤ S sz
EvS: EVarSet
SvS: SVarSet
i':= ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (ψ1 ---> ψ2))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (ψ1 ---> ψ2))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (ψ1 ---> ψ2)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E (ψ1 ---> ψ2) p q wfψ wfp wfq): ProofInfo
pile: ProofInfoLe i' gpi
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
E_in_EvS: E ∈ EvS
ψ_sub_EvS: free_evars (ψ1 ---> ψ2) ⊆ EvS
p_sub_SvS: free_svars p ⊆ SvS
q_sub_SvS: free_svars q ⊆ SvS
ψ_sub_SvS: free_svars (ψ1 ---> ψ2) ⊆ SvS
HEinψ: E ∈ free_evars (ψ1 ---> ψ2)
Γ ⊢i (ψ1^[[evar:E↦p]] ---> ψ2^[[evar:E↦p]]) <---> (ψ1^[[evar:E↦q]] ---> ψ2^[[evar:E↦q]]) using gpi
Σ: Signature
sz: nat
Γ: Theory
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
E: evar
exdepth, mudepth: nat
gpi: ProofInfo
pf: Γ ⊢i p <---> q using gpi
IHsz: (ψ : Pattern) (wfψ : well_formed ψ), size' ψ ≤ sz → (EvS : EVarSet) (SvS : SVarSet), ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ p q wfψ wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ ⊆ SvS → Γ ⊢i ψ^[[evar:E↦p]] <---> ψ^[[evar:E↦q]] using gpi
ψ: Pattern
wfψ: well_formed (ex , ψ)
Hsz: S (size' ψ) ≤ S sz
EvS: EVarSet
SvS: SVarSet
i':= ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (ex , ψ))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (ex , ψ))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (ex , ψ)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E (ex , ψ) p q wfψ wfp wfq): ProofInfo
pile: ProofInfoLe i' gpi
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
E_in_EvS: E ∈ EvS
ψ_sub_EvS: free_evars (ex , ψ) ⊆ EvS
p_sub_SvS: free_svars p ⊆ SvS
q_sub_SvS: free_svars q ⊆ SvS
ψ_sub_SvS: free_svars (ex , ψ) ⊆ SvS
HEinψ: E ∈ free_evars (ex , ψ)
Γ ⊢i (ex , ψ^[[evar:E↦p]]) <---> (ex , ψ^[[evar:E↦q]]) using gpi
Σ: Signature
sz: nat
Γ: Theory
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
E: evar
exdepth, mudepth: nat
gpi: ProofInfo
pf: Γ ⊢i p <---> q using gpi
IHsz: (ψ : Pattern) (wfψ : well_formed ψ), size' ψ ≤ sz → (EvS : EVarSet) (SvS : SVarSet), ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ p q wfψ wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ ⊆ SvS → Γ ⊢i ψ^[[evar:E↦p]] <---> ψ^[[evar:E↦q]] using gpi
ψ: Pattern
wfψ: well_formed (mu , ψ)
Hsz: S (size' ψ) ≤ S sz
EvS: EVarSet
SvS: SVarSet
i':= ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (mu , ψ))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (mu , ψ))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (mu , ψ)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E (mu , ψ) p q wfψ wfp wfq): ProofInfo
pile: ProofInfoLe i' gpi
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
E_in_EvS: E ∈ EvS
ψ_sub_EvS: free_evars (mu , ψ) ⊆ EvS
p_sub_SvS: free_svars p ⊆ SvS
q_sub_SvS: free_svars q ⊆ SvS
ψ_sub_SvS: free_svars (mu , ψ) ⊆ SvS
HEinψ: E ∈ free_evars (mu , ψ)
Γ ⊢i (mu , ψ^[[evar:E↦p]]) <---> (mu , ψ^[[evar:E↦q]]) using gpi
Σ: Signature
sz: nat
Γ: Theory
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
E: evar
exdepth, mudepth: nat
gpi: ProofInfo
pf: Γ ⊢i p <---> q using gpi
IHsz: (ψ : Pattern) (wfψ : well_formed ψ), size' ψ ≤ sz → (EvS : EVarSet) (SvS : SVarSet), ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ p q wfψ wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ ⊆ SvS → Γ ⊢i ψ^[[evar:E↦p]] <---> ψ^[[evar:E↦q]] using gpi
x: svar
wfψ: well_formed (patt_free_svar x)
Hsz: 1 ≤ S sz
EvS: EVarSet
SvS: SVarSet
i':= ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (patt_free_svar x))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (patt_free_svar x))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (patt_free_svar x)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E (patt_free_svar x) p q wfψ wfp wfq): ProofInfo
pile: ProofInfoLe i' gpi
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
E_in_EvS: E ∈ EvS
ψ_sub_EvS: free_evars (patt_free_svar x) ⊆ EvS
p_sub_SvS: free_svars p ⊆ SvS
q_sub_SvS: free_svars q ⊆ SvS
ψ_sub_SvS: free_svars (patt_free_svar x) ⊆ SvS
HEinψ: E ∈ free_evars (patt_free_svar x)

Γ ⊢i patt_free_svar x <---> patt_free_svar x using gpi
Σ: Signature
sz: nat
Γ: Theory
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
E: evar
exdepth, mudepth: nat
gpi: ProofInfo
pf: Γ ⊢i p <---> q using gpi
IHsz: (ψ : Pattern) (wfψ : well_formed ψ), size' ψ ≤ sz → (EvS : EVarSet) (SvS : SVarSet), ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ p q wfψ wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ ⊆ SvS → Γ ⊢i ψ^[[evar:E↦p]] <---> ψ^[[evar:E↦q]] using gpi
x: svar
wfψ: well_formed (patt_free_svar x)
Hsz: 1 ≤ S sz
EvS: EVarSet
SvS: SVarSet
i':= ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (patt_free_svar x))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (patt_free_svar x))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (patt_free_svar x)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E (patt_free_svar x) p q wfψ wfp wfq): ProofInfo
pile: ProofInfoLe i' gpi
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
E_in_EvS: E ∈ EvS
ψ_sub_EvS: free_evars (patt_free_svar x) ⊆ EvS
p_sub_SvS: free_svars p ⊆ SvS
q_sub_SvS: free_svars q ⊆ SvS
ψ_sub_SvS: free_svars (patt_free_svar x) ⊆ SvS
HEinψ: E ∈ free_evars (patt_free_svar x)

Γ ⊢i patt_free_svar x <---> patt_free_svar x using BasicReasoning
Σ: Signature
sz: nat
Γ: Theory
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
E: evar
exdepth, mudepth: nat
gpi: ProofInfo
pf: Γ ⊢i p <---> q using gpi
IHsz: (ψ : Pattern) (wfψ : well_formed ψ), size' ψ ≤ sz → (EvS : EVarSet) (SvS : SVarSet), ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ p q wfψ wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ ⊆ SvS → Γ ⊢i ψ^[[evar:E↦p]] <---> ψ^[[evar:E↦q]] using gpi
x: svar
wfψ: well_formed (patt_free_svar x)
Hsz: 1 ≤ S sz
EvS: EVarSet
SvS: SVarSet
i':= ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (patt_free_svar x))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (patt_free_svar x))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (patt_free_svar x)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E (patt_free_svar x) p q wfψ wfp wfq): ProofInfo
pile: ProofInfoLe i' gpi
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
E_in_EvS: E ∈ EvS
ψ_sub_EvS: free_evars (patt_free_svar x) ⊆ EvS
p_sub_SvS: free_svars p ⊆ SvS
q_sub_SvS: free_svars q ⊆ SvS
ψ_sub_SvS: free_svars (patt_free_svar x) ⊆ SvS
HEinψ: E ∈ free_evars (patt_free_svar x)

well_formed (patt_free_svar x)
abstract (wf_auto2).
Σ: Signature
sz: nat
Γ: Theory
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
E: evar
exdepth, mudepth: nat
gpi: ProofInfo
pf: Γ ⊢i p <---> q using gpi
IHsz: (ψ : Pattern) (wfψ : well_formed ψ), size' ψ ≤ sz → (EvS : EVarSet) (SvS : SVarSet), ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ p q wfψ wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ ⊆ SvS → Γ ⊢i ψ^[[evar:E↦p]] <---> ψ^[[evar:E↦q]] using gpi
n: db_index
wfψ: well_formed (patt_bound_evar n)
Hsz: 1 ≤ S sz
EvS: EVarSet
SvS: SVarSet
i':= ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (patt_bound_evar n))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (patt_bound_evar n))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (patt_bound_evar n)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E (patt_bound_evar n) p q wfψ wfp wfq): ProofInfo
pile: ProofInfoLe i' gpi
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
E_in_EvS: E ∈ EvS
ψ_sub_EvS: free_evars (patt_bound_evar n) ⊆ EvS
p_sub_SvS: free_svars p ⊆ SvS
q_sub_SvS: free_svars q ⊆ SvS
ψ_sub_SvS: free_svars (patt_bound_evar n) ⊆ SvS
HEinψ: E ∈ free_evars (patt_bound_evar n)

Γ ⊢i patt_bound_evar n <---> patt_bound_evar n using gpi
Σ: Signature
sz: nat
Γ: Theory
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
E: evar
exdepth, mudepth: nat
gpi: ProofInfo
pf: Γ ⊢i p <---> q using gpi
IHsz: (ψ : Pattern) (wfψ : well_formed ψ), size' ψ ≤ sz → (EvS : EVarSet) (SvS : SVarSet), ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ p q wfψ wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ ⊆ SvS → Γ ⊢i ψ^[[evar:E↦p]] <---> ψ^[[evar:E↦q]] using gpi
n: db_index
wfψ: well_formed (patt_bound_svar n)
Hsz: 1 ≤ S sz
EvS: EVarSet
SvS: SVarSet
i':= ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (patt_bound_svar n))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (patt_bound_svar n))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (patt_bound_svar n)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E (patt_bound_svar n) p q wfψ wfp wfq): ProofInfo
pile: ProofInfoLe i' gpi
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
E_in_EvS: E ∈ EvS
ψ_sub_EvS: free_evars (patt_bound_svar n) ⊆ EvS
p_sub_SvS: free_svars p ⊆ SvS
q_sub_SvS: free_svars q ⊆ SvS
ψ_sub_SvS: free_svars (patt_bound_svar n) ⊆ SvS
HEinψ: E ∈ free_evars (patt_bound_svar n)
Γ ⊢i patt_bound_svar n <---> patt_bound_svar n using gpi
Σ: Signature
sz: nat
Γ: Theory
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
E: evar
exdepth, mudepth: nat
gpi: ProofInfo
pf: Γ ⊢i p <---> q using gpi
IHsz: (ψ : Pattern) (wfψ : well_formed ψ), size' ψ ≤ sz → (EvS : EVarSet) (SvS : SVarSet), ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ p q wfψ wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ ⊆ SvS → Γ ⊢i ψ^[[evar:E↦p]] <---> ψ^[[evar:E↦q]] using gpi
sigma: symbols
wfψ: well_formed (patt_sym sigma)
Hsz: 1 ≤ S sz
EvS: EVarSet
SvS: SVarSet
i':= ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (patt_sym sigma))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (patt_sym sigma))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (patt_sym sigma)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E (patt_sym sigma) p q wfψ wfp wfq): ProofInfo
pile: ProofInfoLe i' gpi
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
E_in_EvS: E ∈ EvS
ψ_sub_EvS: free_evars (patt_sym sigma) ⊆ EvS
p_sub_SvS: free_svars p ⊆ SvS
q_sub_SvS: free_svars q ⊆ SvS
ψ_sub_SvS: free_svars (patt_sym sigma) ⊆ SvS
HEinψ: E ∈ free_evars (patt_sym sigma)
Γ ⊢i patt_sym sigma <---> patt_sym sigma using gpi
Σ: Signature
sz: nat
Γ: Theory
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
E: evar
exdepth, mudepth: nat
gpi: ProofInfo
pf: Γ ⊢i p <---> q using gpi
IHsz: (ψ : Pattern) (wfψ : well_formed ψ), size' ψ ≤ sz → (EvS : EVarSet) (SvS : SVarSet), ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ p q wfψ wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ ⊆ SvS → Γ ⊢i ψ^[[evar:E↦p]] <---> ψ^[[evar:E↦q]] using gpi
ψ1, ψ2: Pattern
wfψ: well_formed (ψ1 $ ψ2)
Hsz: S (size' ψ1 + size' ψ2) ≤ S sz
EvS: EVarSet
SvS: SVarSet
i':= ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (ψ1 $ ψ2))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (ψ1 $ ψ2))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (ψ1 $ ψ2)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E (ψ1 $ ψ2) p q wfψ wfp wfq): ProofInfo
pile: ProofInfoLe i' gpi
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
E_in_EvS: E ∈ EvS
ψ_sub_EvS: free_evars (ψ1 $ ψ2) ⊆ EvS
p_sub_SvS: free_svars p ⊆ SvS
q_sub_SvS: free_svars q ⊆ SvS
ψ_sub_SvS: free_svars (ψ1 $ ψ2) ⊆ SvS
HEinψ: E ∈ free_evars (ψ1 $ ψ2)
Γ ⊢i ψ1^[[evar:E↦p]] $ ψ2^[[evar:E↦p]] <---> ψ1^[[evar:E↦q]] $ ψ2^[[evar:E↦q]] using gpi
Σ: Signature
sz: nat
Γ: Theory
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
E: evar
exdepth, mudepth: nat
gpi: ProofInfo
pf: Γ ⊢i p <---> q using gpi
IHsz: (ψ : Pattern) (wfψ : well_formed ψ), size' ψ ≤ sz → (EvS : EVarSet) (SvS : SVarSet), ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ p q wfψ wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ ⊆ SvS → Γ ⊢i ψ^[[evar:E↦p]] <---> ψ^[[evar:E↦q]] using gpi
wfψ: well_formed ⊥
Hsz: 1 ≤ S sz
EvS: EVarSet
SvS: SVarSet
i':= ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ⊥)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ⊥)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ⊥) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ⊥ p q wfψ wfp wfq): ProofInfo
pile: ProofInfoLe i' gpi
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
E_in_EvS: E ∈ EvS
ψ_sub_EvS: free_evars ⊥ ⊆ EvS
p_sub_SvS: free_svars p ⊆ SvS
q_sub_SvS: free_svars q ⊆ SvS
ψ_sub_SvS: free_svars ⊥ ⊆ SvS
HEinψ: E ∈ free_evars ⊥
Γ ⊢i ⊥ <---> ⊥ using gpi
Σ: Signature
sz: nat
Γ: Theory
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
E: evar
exdepth, mudepth: nat
gpi: ProofInfo
pf: Γ ⊢i p <---> q using gpi
IHsz: (ψ : Pattern) (wfψ : well_formed ψ), size' ψ ≤ sz → (EvS : EVarSet) (SvS : SVarSet), ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ p q wfψ wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ ⊆ SvS → Γ ⊢i ψ^[[evar:E↦p]] <---> ψ^[[evar:E↦q]] using gpi
ψ1, ψ2: Pattern
wfψ: well_formed (ψ1 ---> ψ2)
Hsz: S (size' ψ1 + size' ψ2) ≤ S sz
EvS: EVarSet
SvS: SVarSet
i':= ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (ψ1 ---> ψ2))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (ψ1 ---> ψ2))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (ψ1 ---> ψ2)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E (ψ1 ---> ψ2) p q wfψ wfp wfq): ProofInfo
pile: ProofInfoLe i' gpi
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
E_in_EvS: E ∈ EvS
ψ_sub_EvS: free_evars (ψ1 ---> ψ2) ⊆ EvS
p_sub_SvS: free_svars p ⊆ SvS
q_sub_SvS: free_svars q ⊆ SvS
ψ_sub_SvS: free_svars (ψ1 ---> ψ2) ⊆ SvS
HEinψ: E ∈ free_evars (ψ1 ---> ψ2)
Γ ⊢i (ψ1^[[evar:E↦p]] ---> ψ2^[[evar:E↦p]]) <---> (ψ1^[[evar:E↦q]] ---> ψ2^[[evar:E↦q]]) using gpi
Σ: Signature
sz: nat
Γ: Theory
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
E: evar
exdepth, mudepth: nat
gpi: ProofInfo
pf: Γ ⊢i p <---> q using gpi
IHsz: (ψ : Pattern) (wfψ : well_formed ψ), size' ψ ≤ sz → (EvS : EVarSet) (SvS : SVarSet), ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ p q wfψ wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ ⊆ SvS → Γ ⊢i ψ^[[evar:E↦p]] <---> ψ^[[evar:E↦q]] using gpi
ψ: Pattern
wfψ: well_formed (ex , ψ)
Hsz: S (size' ψ) ≤ S sz
EvS: EVarSet
SvS: SVarSet
i':= ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (ex , ψ))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (ex , ψ))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (ex , ψ)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E (ex , ψ) p q wfψ wfp wfq): ProofInfo
pile: ProofInfoLe i' gpi
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
E_in_EvS: E ∈ EvS
ψ_sub_EvS: free_evars (ex , ψ) ⊆ EvS
p_sub_SvS: free_svars p ⊆ SvS
q_sub_SvS: free_svars q ⊆ SvS
ψ_sub_SvS: free_svars (ex , ψ) ⊆ SvS
HEinψ: E ∈ free_evars (ex , ψ)
Γ ⊢i (ex , ψ^[[evar:E↦p]]) <---> (ex , ψ^[[evar:E↦q]]) using gpi
Σ: Signature
sz: nat
Γ: Theory
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
E: evar
exdepth, mudepth: nat
gpi: ProofInfo
pf: Γ ⊢i p <---> q using gpi
IHsz: (ψ : Pattern) (wfψ : well_formed ψ), size' ψ ≤ sz → (EvS : EVarSet) (SvS : SVarSet), ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ p q wfψ wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ ⊆ SvS → Γ ⊢i ψ^[[evar:E↦p]] <---> ψ^[[evar:E↦q]] using gpi
ψ: Pattern
wfψ: well_formed (mu , ψ)
Hsz: S (size' ψ) ≤ S sz
EvS: EVarSet
SvS: SVarSet
i':= ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (mu , ψ))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (mu , ψ))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (mu , ψ)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E (mu , ψ) p q wfψ wfp wfq): ProofInfo
pile: ProofInfoLe i' gpi
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
E_in_EvS: E ∈ EvS
ψ_sub_EvS: free_evars (mu , ψ) ⊆ EvS
p_sub_SvS: free_svars p ⊆ SvS
q_sub_SvS: free_svars q ⊆ SvS
ψ_sub_SvS: free_svars (mu , ψ) ⊆ SvS
HEinψ: E ∈ free_evars (mu , ψ)
Γ ⊢i (mu , ψ^[[evar:E↦p]]) <---> (mu , ψ^[[evar:E↦q]]) using gpi
Σ: Signature
sz: nat
Γ: Theory
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
E: evar
exdepth, mudepth: nat
gpi: ProofInfo
pf: Γ ⊢i p <---> q using gpi
IHsz: (ψ : Pattern) (wfψ : well_formed ψ), size' ψ ≤ sz → (EvS : EVarSet) (SvS : SVarSet), ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ p q wfψ wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ ⊆ SvS → Γ ⊢i ψ^[[evar:E↦p]] <---> ψ^[[evar:E↦q]] using gpi
n: db_index
wfψ: well_formed (patt_bound_evar n)
Hsz: 1 ≤ S sz
EvS: EVarSet
SvS: SVarSet
i':= ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (patt_bound_evar n))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (patt_bound_evar n))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (patt_bound_evar n)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E (patt_bound_evar n) p q wfψ wfp wfq): ProofInfo
pile: ProofInfoLe i' gpi
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
E_in_EvS: E ∈ EvS
ψ_sub_EvS: free_evars (patt_bound_evar n) ⊆ EvS
p_sub_SvS: free_svars p ⊆ SvS
q_sub_SvS: free_svars q ⊆ SvS
ψ_sub_SvS: free_svars (patt_bound_evar n) ⊆ SvS
HEinψ: E ∈ free_evars (patt_bound_evar n)

Γ ⊢i patt_bound_evar n <---> patt_bound_evar n using gpi
Σ: Signature
sz: nat
Γ: Theory
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
E: evar
exdepth, mudepth: nat
gpi: ProofInfo
pf: Γ ⊢i p <---> q using gpi
IHsz: (ψ : Pattern) (wfψ : well_formed ψ), size' ψ ≤ sz → (EvS : EVarSet) (SvS : SVarSet), ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ p q wfψ wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ ⊆ SvS → Γ ⊢i ψ^[[evar:E↦p]] <---> ψ^[[evar:E↦q]] using gpi
n: db_index
wfψ: well_formed (patt_bound_evar n)
Hsz: 1 ≤ S sz
EvS: EVarSet
SvS: SVarSet
i':= ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (patt_bound_evar n))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (patt_bound_evar n))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (patt_bound_evar n)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E (patt_bound_evar n) p q wfψ wfp wfq): ProofInfo
pile: ProofInfoLe i' gpi
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
E_in_EvS: E ∈ EvS
ψ_sub_EvS: free_evars (patt_bound_evar n) ⊆ EvS
p_sub_SvS: free_svars p ⊆ SvS
q_sub_SvS: free_svars q ⊆ SvS
ψ_sub_SvS: free_svars (patt_bound_evar n) ⊆ SvS
HEinψ: E ∈ free_evars (patt_bound_evar n)

Γ ⊢i patt_bound_evar n <---> patt_bound_evar n using BasicReasoning
Σ: Signature
sz: nat
Γ: Theory
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
E: evar
exdepth, mudepth: nat
gpi: ProofInfo
pf: Γ ⊢i p <---> q using gpi
IHsz: (ψ : Pattern) (wfψ : well_formed ψ), size' ψ ≤ sz → (EvS : EVarSet) (SvS : SVarSet), ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ p q wfψ wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ ⊆ SvS → Γ ⊢i ψ^[[evar:E↦p]] <---> ψ^[[evar:E↦q]] using gpi
n: db_index
wfψ: well_formed (patt_bound_evar n)
Hsz: 1 ≤ S sz
EvS: EVarSet
SvS: SVarSet
i':= ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (patt_bound_evar n))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (patt_bound_evar n))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (patt_bound_evar n)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E (patt_bound_evar n) p q wfψ wfp wfq): ProofInfo
pile: ProofInfoLe i' gpi
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
E_in_EvS: E ∈ EvS
ψ_sub_EvS: free_evars (patt_bound_evar n) ⊆ EvS
p_sub_SvS: free_svars p ⊆ SvS
q_sub_SvS: free_svars q ⊆ SvS
ψ_sub_SvS: free_svars (patt_bound_evar n) ⊆ SvS
HEinψ: E ∈ free_evars (patt_bound_evar n)

well_formed (patt_bound_evar n)
abstract (wf_auto2).
Σ: Signature
sz: nat
Γ: Theory
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
E: evar
exdepth, mudepth: nat
gpi: ProofInfo
pf: Γ ⊢i p <---> q using gpi
IHsz: (ψ : Pattern) (wfψ : well_formed ψ), size' ψ ≤ sz → (EvS : EVarSet) (SvS : SVarSet), ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ p q wfψ wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ ⊆ SvS → Γ ⊢i ψ^[[evar:E↦p]] <---> ψ^[[evar:E↦q]] using gpi
n: db_index
wfψ: well_formed (patt_bound_svar n)
Hsz: 1 ≤ S sz
EvS: EVarSet
SvS: SVarSet
i':= ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (patt_bound_svar n))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (patt_bound_svar n))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (patt_bound_svar n)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E (patt_bound_svar n) p q wfψ wfp wfq): ProofInfo
pile: ProofInfoLe i' gpi
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
E_in_EvS: E ∈ EvS
ψ_sub_EvS: free_evars (patt_bound_svar n) ⊆ EvS
p_sub_SvS: free_svars p ⊆ SvS
q_sub_SvS: free_svars q ⊆ SvS
ψ_sub_SvS: free_svars (patt_bound_svar n) ⊆ SvS
HEinψ: E ∈ free_evars (patt_bound_svar n)

Γ ⊢i patt_bound_svar n <---> patt_bound_svar n using gpi
Σ: Signature
sz: nat
Γ: Theory
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
E: evar
exdepth, mudepth: nat
gpi: ProofInfo
pf: Γ ⊢i p <---> q using gpi
IHsz: (ψ : Pattern) (wfψ : well_formed ψ), size' ψ ≤ sz → (EvS : EVarSet) (SvS : SVarSet), ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ p q wfψ wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ ⊆ SvS → Γ ⊢i ψ^[[evar:E↦p]] <---> ψ^[[evar:E↦q]] using gpi
sigma: symbols
wfψ: well_formed (patt_sym sigma)
Hsz: 1 ≤ S sz
EvS: EVarSet
SvS: SVarSet
i':= ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (patt_sym sigma))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (patt_sym sigma))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (patt_sym sigma)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E (patt_sym sigma) p q wfψ wfp wfq): ProofInfo
pile: ProofInfoLe i' gpi
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
E_in_EvS: E ∈ EvS
ψ_sub_EvS: free_evars (patt_sym sigma) ⊆ EvS
p_sub_SvS: free_svars p ⊆ SvS
q_sub_SvS: free_svars q ⊆ SvS
ψ_sub_SvS: free_svars (patt_sym sigma) ⊆ SvS
HEinψ: E ∈ free_evars (patt_sym sigma)
Γ ⊢i patt_sym sigma <---> patt_sym sigma using gpi
Σ: Signature
sz: nat
Γ: Theory
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
E: evar
exdepth, mudepth: nat
gpi: ProofInfo
pf: Γ ⊢i p <---> q using gpi
IHsz: (ψ : Pattern) (wfψ : well_formed ψ), size' ψ ≤ sz → (EvS : EVarSet) (SvS : SVarSet), ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ p q wfψ wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ ⊆ SvS → Γ ⊢i ψ^[[evar:E↦p]] <---> ψ^[[evar:E↦q]] using gpi
ψ1, ψ2: Pattern
wfψ: well_formed (ψ1 $ ψ2)
Hsz: S (size' ψ1 + size' ψ2) ≤ S sz
EvS: EVarSet
SvS: SVarSet
i':= ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (ψ1 $ ψ2))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (ψ1 $ ψ2))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (ψ1 $ ψ2)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E (ψ1 $ ψ2) p q wfψ wfp wfq): ProofInfo
pile: ProofInfoLe i' gpi
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
E_in_EvS: E ∈ EvS
ψ_sub_EvS: free_evars (ψ1 $ ψ2) ⊆ EvS
p_sub_SvS: free_svars p ⊆ SvS
q_sub_SvS: free_svars q ⊆ SvS
ψ_sub_SvS: free_svars (ψ1 $ ψ2) ⊆ SvS
HEinψ: E ∈ free_evars (ψ1 $ ψ2)
Γ ⊢i ψ1^[[evar:E↦p]] $ ψ2^[[evar:E↦p]] <---> ψ1^[[evar:E↦q]] $ ψ2^[[evar:E↦q]] using gpi
Σ: Signature
sz: nat
Γ: Theory
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
E: evar
exdepth, mudepth: nat
gpi: ProofInfo
pf: Γ ⊢i p <---> q using gpi
IHsz: (ψ : Pattern) (wfψ : well_formed ψ), size' ψ ≤ sz → (EvS : EVarSet) (SvS : SVarSet), ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ p q wfψ wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ ⊆ SvS → Γ ⊢i ψ^[[evar:E↦p]] <---> ψ^[[evar:E↦q]] using gpi
wfψ: well_formed ⊥
Hsz: 1 ≤ S sz
EvS: EVarSet
SvS: SVarSet
i':= ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ⊥)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ⊥)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ⊥) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ⊥ p q wfψ wfp wfq): ProofInfo
pile: ProofInfoLe i' gpi
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
E_in_EvS: E ∈ EvS
ψ_sub_EvS: free_evars ⊥ ⊆ EvS
p_sub_SvS: free_svars p ⊆ SvS
q_sub_SvS: free_svars q ⊆ SvS
ψ_sub_SvS: free_svars ⊥ ⊆ SvS
HEinψ: E ∈ free_evars ⊥
Γ ⊢i ⊥ <---> ⊥ using gpi
Σ: Signature
sz: nat
Γ: Theory
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
E: evar
exdepth, mudepth: nat
gpi: ProofInfo
pf: Γ ⊢i p <---> q using gpi
IHsz: (ψ : Pattern) (wfψ : well_formed ψ), size' ψ ≤ sz → (EvS : EVarSet) (SvS : SVarSet), ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ p q wfψ wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ ⊆ SvS → Γ ⊢i ψ^[[evar:E↦p]] <---> ψ^[[evar:E↦q]] using gpi
ψ1, ψ2: Pattern
wfψ: well_formed (ψ1 ---> ψ2)
Hsz: S (size' ψ1 + size' ψ2) ≤ S sz
EvS: EVarSet
SvS: SVarSet
i':= ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (ψ1 ---> ψ2))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (ψ1 ---> ψ2))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (ψ1 ---> ψ2)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E (ψ1 ---> ψ2) p q wfψ wfp wfq): ProofInfo
pile: ProofInfoLe i' gpi
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
E_in_EvS: E ∈ EvS
ψ_sub_EvS: free_evars (ψ1 ---> ψ2) ⊆ EvS
p_sub_SvS: free_svars p ⊆ SvS
q_sub_SvS: free_svars q ⊆ SvS
ψ_sub_SvS: free_svars (ψ1 ---> ψ2) ⊆ SvS
HEinψ: E ∈ free_evars (ψ1 ---> ψ2)
Γ ⊢i (ψ1^[[evar:E↦p]] ---> ψ2^[[evar:E↦p]]) <---> (ψ1^[[evar:E↦q]] ---> ψ2^[[evar:E↦q]]) using gpi
Σ: Signature
sz: nat
Γ: Theory
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
E: evar
exdepth, mudepth: nat
gpi: ProofInfo
pf: Γ ⊢i p <---> q using gpi
IHsz: (ψ : Pattern) (wfψ : well_formed ψ), size' ψ ≤ sz → (EvS : EVarSet) (SvS : SVarSet), ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ p q wfψ wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ ⊆ SvS → Γ ⊢i ψ^[[evar:E↦p]] <---> ψ^[[evar:E↦q]] using gpi
ψ: Pattern
wfψ: well_formed (ex , ψ)
Hsz: S (size' ψ) ≤ S sz
EvS: EVarSet
SvS: SVarSet
i':= ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (ex , ψ))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (ex , ψ))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (ex , ψ)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E (ex , ψ) p q wfψ wfp wfq): ProofInfo
pile: ProofInfoLe i' gpi
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
E_in_EvS: E ∈ EvS
ψ_sub_EvS: free_evars (ex , ψ) ⊆ EvS
p_sub_SvS: free_svars p ⊆ SvS
q_sub_SvS: free_svars q ⊆ SvS
ψ_sub_SvS: free_svars (ex , ψ) ⊆ SvS
HEinψ: E ∈ free_evars (ex , ψ)
Γ ⊢i (ex , ψ^[[evar:E↦p]]) <---> (ex , ψ^[[evar:E↦q]]) using gpi
Σ: Signature
sz: nat
Γ: Theory
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
E: evar
exdepth, mudepth: nat
gpi: ProofInfo
pf: Γ ⊢i p <---> q using gpi
IHsz: (ψ : Pattern) (wfψ : well_formed ψ), size' ψ ≤ sz → (EvS : EVarSet) (SvS : SVarSet), ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ p q wfψ wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ ⊆ SvS → Γ ⊢i ψ^[[evar:E↦p]] <---> ψ^[[evar:E↦q]] using gpi
ψ: Pattern
wfψ: well_formed (mu , ψ)
Hsz: S (size' ψ) ≤ S sz
EvS: EVarSet
SvS: SVarSet
i':= ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (mu , ψ))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (mu , ψ))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (mu , ψ)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E (mu , ψ) p q wfψ wfp wfq): ProofInfo
pile: ProofInfoLe i' gpi
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
E_in_EvS: E ∈ EvS
ψ_sub_EvS: free_evars (mu , ψ) ⊆ EvS
p_sub_SvS: free_svars p ⊆ SvS
q_sub_SvS: free_svars q ⊆ SvS
ψ_sub_SvS: free_svars (mu , ψ) ⊆ SvS
HEinψ: E ∈ free_evars (mu , ψ)
Γ ⊢i (mu , ψ^[[evar:E↦p]]) <---> (mu , ψ^[[evar:E↦q]]) using gpi
Σ: Signature
sz: nat
Γ: Theory
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
E: evar
exdepth, mudepth: nat
gpi: ProofInfo
pf: Γ ⊢i p <---> q using gpi
IHsz: (ψ : Pattern) (wfψ : well_formed ψ), size' ψ ≤ sz → (EvS : EVarSet) (SvS : SVarSet), ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ p q wfψ wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ ⊆ SvS → Γ ⊢i ψ^[[evar:E↦p]] <---> ψ^[[evar:E↦q]] using gpi
n: db_index
wfψ: well_formed (patt_bound_svar n)
Hsz: 1 ≤ S sz
EvS: EVarSet
SvS: SVarSet
i':= ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (patt_bound_svar n))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (patt_bound_svar n))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (patt_bound_svar n)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E (patt_bound_svar n) p q wfψ wfp wfq): ProofInfo
pile: ProofInfoLe i' gpi
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
E_in_EvS: E ∈ EvS
ψ_sub_EvS: free_evars (patt_bound_svar n) ⊆ EvS
p_sub_SvS: free_svars p ⊆ SvS
q_sub_SvS: free_svars q ⊆ SvS
ψ_sub_SvS: free_svars (patt_bound_svar n) ⊆ SvS
HEinψ: E ∈ free_evars (patt_bound_svar n)

Γ ⊢i patt_bound_svar n <---> patt_bound_svar n using gpi
Σ: Signature
sz: nat
Γ: Theory
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
E: evar
exdepth, mudepth: nat
gpi: ProofInfo
pf: Γ ⊢i p <---> q using gpi
IHsz: (ψ : Pattern) (wfψ : well_formed ψ), size' ψ ≤ sz → (EvS : EVarSet) (SvS : SVarSet), ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ p q wfψ wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ ⊆ SvS → Γ ⊢i ψ^[[evar:E↦p]] <---> ψ^[[evar:E↦q]] using gpi
n: db_index
wfψ: well_formed (patt_bound_svar n)
Hsz: 1 ≤ S sz
EvS: EVarSet
SvS: SVarSet
i':= ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (patt_bound_svar n))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (patt_bound_svar n))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (patt_bound_svar n)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E (patt_bound_svar n) p q wfψ wfp wfq): ProofInfo
pile: ProofInfoLe i' gpi
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
E_in_EvS: E ∈ EvS
ψ_sub_EvS: free_evars (patt_bound_svar n) ⊆ EvS
p_sub_SvS: free_svars p ⊆ SvS
q_sub_SvS: free_svars q ⊆ SvS
ψ_sub_SvS: free_svars (patt_bound_svar n) ⊆ SvS
HEinψ: E ∈ free_evars (patt_bound_svar n)

Γ ⊢i patt_bound_svar n <---> patt_bound_svar n using BasicReasoning
Σ: Signature
sz: nat
Γ: Theory
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
E: evar
exdepth, mudepth: nat
gpi: ProofInfo
pf: Γ ⊢i p <---> q using gpi
IHsz: (ψ : Pattern) (wfψ : well_formed ψ), size' ψ ≤ sz → (EvS : EVarSet) (SvS : SVarSet), ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ p q wfψ wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ ⊆ SvS → Γ ⊢i ψ^[[evar:E↦p]] <---> ψ^[[evar:E↦q]] using gpi
n: db_index
wfψ: well_formed (patt_bound_svar n)
Hsz: 1 ≤ S sz
EvS: EVarSet
SvS: SVarSet
i':= ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (patt_bound_svar n))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (patt_bound_svar n))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (patt_bound_svar n)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E (patt_bound_svar n) p q wfψ wfp wfq): ProofInfo
pile: ProofInfoLe i' gpi
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
E_in_EvS: E ∈ EvS
ψ_sub_EvS: free_evars (patt_bound_svar n) ⊆ EvS
p_sub_SvS: free_svars p ⊆ SvS
q_sub_SvS: free_svars q ⊆ SvS
ψ_sub_SvS: free_svars (patt_bound_svar n) ⊆ SvS
HEinψ: E ∈ free_evars (patt_bound_svar n)

well_formed (patt_bound_svar n)
abstract (wf_auto2).
Σ: Signature
sz: nat
Γ: Theory
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
E: evar
exdepth, mudepth: nat
gpi: ProofInfo
pf: Γ ⊢i p <---> q using gpi
IHsz: (ψ : Pattern) (wfψ : well_formed ψ), size' ψ ≤ sz → (EvS : EVarSet) (SvS : SVarSet), ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ p q wfψ wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ ⊆ SvS → Γ ⊢i ψ^[[evar:E↦p]] <---> ψ^[[evar:E↦q]] using gpi
sigma: symbols
wfψ: well_formed (patt_sym sigma)
Hsz: 1 ≤ S sz
EvS: EVarSet
SvS: SVarSet
i':= ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (patt_sym sigma))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (patt_sym sigma))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (patt_sym sigma)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E (patt_sym sigma) p q wfψ wfp wfq): ProofInfo
pile: ProofInfoLe i' gpi
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
E_in_EvS: E ∈ EvS
ψ_sub_EvS: free_evars (patt_sym sigma) ⊆ EvS
p_sub_SvS: free_svars p ⊆ SvS
q_sub_SvS: free_svars q ⊆ SvS
ψ_sub_SvS: free_svars (patt_sym sigma) ⊆ SvS
HEinψ: E ∈ free_evars (patt_sym sigma)

Γ ⊢i patt_sym sigma <---> patt_sym sigma using gpi
Σ: Signature
sz: nat
Γ: Theory
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
E: evar
exdepth, mudepth: nat
gpi: ProofInfo
pf: Γ ⊢i p <---> q using gpi
IHsz: (ψ : Pattern) (wfψ : well_formed ψ), size' ψ ≤ sz → (EvS : EVarSet) (SvS : SVarSet), ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ p q wfψ wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ ⊆ SvS → Γ ⊢i ψ^[[evar:E↦p]] <---> ψ^[[evar:E↦q]] using gpi
ψ1, ψ2: Pattern
wfψ: well_formed (ψ1 $ ψ2)
Hsz: S (size' ψ1 + size' ψ2) ≤ S sz
EvS: EVarSet
SvS: SVarSet
i':= ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (ψ1 $ ψ2))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (ψ1 $ ψ2))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (ψ1 $ ψ2)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E (ψ1 $ ψ2) p q wfψ wfp wfq): ProofInfo
pile: ProofInfoLe i' gpi
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
E_in_EvS: E ∈ EvS
ψ_sub_EvS: free_evars (ψ1 $ ψ2) ⊆ EvS
p_sub_SvS: free_svars p ⊆ SvS
q_sub_SvS: free_svars q ⊆ SvS
ψ_sub_SvS: free_svars (ψ1 $ ψ2) ⊆ SvS
HEinψ: E ∈ free_evars (ψ1 $ ψ2)
Γ ⊢i ψ1^[[evar:E↦p]] $ ψ2^[[evar:E↦p]] <---> ψ1^[[evar:E↦q]] $ ψ2^[[evar:E↦q]] using gpi
Σ: Signature
sz: nat
Γ: Theory
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
E: evar
exdepth, mudepth: nat
gpi: ProofInfo
pf: Γ ⊢i p <---> q using gpi
IHsz: (ψ : Pattern) (wfψ : well_formed ψ), size' ψ ≤ sz → (EvS : EVarSet) (SvS : SVarSet), ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ p q wfψ wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ ⊆ SvS → Γ ⊢i ψ^[[evar:E↦p]] <---> ψ^[[evar:E↦q]] using gpi
wfψ: well_formed ⊥
Hsz: 1 ≤ S sz
EvS: EVarSet
SvS: SVarSet
i':= ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ⊥)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ⊥)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ⊥) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ⊥ p q wfψ wfp wfq): ProofInfo
pile: ProofInfoLe i' gpi
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
E_in_EvS: E ∈ EvS
ψ_sub_EvS: free_evars ⊥ ⊆ EvS
p_sub_SvS: free_svars p ⊆ SvS
q_sub_SvS: free_svars q ⊆ SvS
ψ_sub_SvS: free_svars ⊥ ⊆ SvS
HEinψ: E ∈ free_evars ⊥
Γ ⊢i ⊥ <---> ⊥ using gpi
Σ: Signature
sz: nat
Γ: Theory
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
E: evar
exdepth, mudepth: nat
gpi: ProofInfo
pf: Γ ⊢i p <---> q using gpi
IHsz: (ψ : Pattern) (wfψ : well_formed ψ), size' ψ ≤ sz → (EvS : EVarSet) (SvS : SVarSet), ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ p q wfψ wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ ⊆ SvS → Γ ⊢i ψ^[[evar:E↦p]] <---> ψ^[[evar:E↦q]] using gpi
ψ1, ψ2: Pattern
wfψ: well_formed (ψ1 ---> ψ2)
Hsz: S (size' ψ1 + size' ψ2) ≤ S sz
EvS: EVarSet
SvS: SVarSet
i':= ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (ψ1 ---> ψ2))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (ψ1 ---> ψ2))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (ψ1 ---> ψ2)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E (ψ1 ---> ψ2) p q wfψ wfp wfq): ProofInfo
pile: ProofInfoLe i' gpi
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
E_in_EvS: E ∈ EvS
ψ_sub_EvS: free_evars (ψ1 ---> ψ2) ⊆ EvS
p_sub_SvS: free_svars p ⊆ SvS
q_sub_SvS: free_svars q ⊆ SvS
ψ_sub_SvS: free_svars (ψ1 ---> ψ2) ⊆ SvS
HEinψ: E ∈ free_evars (ψ1 ---> ψ2)
Γ ⊢i (ψ1^[[evar:E↦p]] ---> ψ2^[[evar:E↦p]]) <---> (ψ1^[[evar:E↦q]] ---> ψ2^[[evar:E↦q]]) using gpi
Σ: Signature
sz: nat
Γ: Theory
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
E: evar
exdepth, mudepth: nat
gpi: ProofInfo
pf: Γ ⊢i p <---> q using gpi
IHsz: (ψ : Pattern) (wfψ : well_formed ψ), size' ψ ≤ sz → (EvS : EVarSet) (SvS : SVarSet), ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ p q wfψ wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ ⊆ SvS → Γ ⊢i ψ^[[evar:E↦p]] <---> ψ^[[evar:E↦q]] using gpi
ψ: Pattern
wfψ: well_formed (ex , ψ)
Hsz: S (size' ψ) ≤ S sz
EvS: EVarSet
SvS: SVarSet
i':= ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (ex , ψ))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (ex , ψ))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (ex , ψ)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E (ex , ψ) p q wfψ wfp wfq): ProofInfo
pile: ProofInfoLe i' gpi
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
E_in_EvS: E ∈ EvS
ψ_sub_EvS: free_evars (ex , ψ) ⊆ EvS
p_sub_SvS: free_svars p ⊆ SvS
q_sub_SvS: free_svars q ⊆ SvS
ψ_sub_SvS: free_svars (ex , ψ) ⊆ SvS
HEinψ: E ∈ free_evars (ex , ψ)
Γ ⊢i (ex , ψ^[[evar:E↦p]]) <---> (ex , ψ^[[evar:E↦q]]) using gpi
Σ: Signature
sz: nat
Γ: Theory
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
E: evar
exdepth, mudepth: nat
gpi: ProofInfo
pf: Γ ⊢i p <---> q using gpi
IHsz: (ψ : Pattern) (wfψ : well_formed ψ), size' ψ ≤ sz → (EvS : EVarSet) (SvS : SVarSet), ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ p q wfψ wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ ⊆ SvS → Γ ⊢i ψ^[[evar:E↦p]] <---> ψ^[[evar:E↦q]] using gpi
ψ: Pattern
wfψ: well_formed (mu , ψ)
Hsz: S (size' ψ) ≤ S sz
EvS: EVarSet
SvS: SVarSet
i':= ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (mu , ψ))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (mu , ψ))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (mu , ψ)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E (mu , ψ) p q wfψ wfp wfq): ProofInfo
pile: ProofInfoLe i' gpi
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
E_in_EvS: E ∈ EvS
ψ_sub_EvS: free_evars (mu , ψ) ⊆ EvS
p_sub_SvS: free_svars p ⊆ SvS
q_sub_SvS: free_svars q ⊆ SvS
ψ_sub_SvS: free_svars (mu , ψ) ⊆ SvS
HEinψ: E ∈ free_evars (mu , ψ)
Γ ⊢i (mu , ψ^[[evar:E↦p]]) <---> (mu , ψ^[[evar:E↦q]]) using gpi
Σ: Signature
sz: nat
Γ: Theory
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
E: evar
exdepth, mudepth: nat
gpi: ProofInfo
pf: Γ ⊢i p <---> q using gpi
IHsz: (ψ : Pattern) (wfψ : well_formed ψ), size' ψ ≤ sz → (EvS : EVarSet) (SvS : SVarSet), ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ p q wfψ wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ ⊆ SvS → Γ ⊢i ψ^[[evar:E↦p]] <---> ψ^[[evar:E↦q]] using gpi
sigma: symbols
wfψ: well_formed (patt_sym sigma)
Hsz: 1 ≤ S sz
EvS: EVarSet
SvS: SVarSet
i':= ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (patt_sym sigma))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (patt_sym sigma))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (patt_sym sigma)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E (patt_sym sigma) p q wfψ wfp wfq): ProofInfo
pile: ProofInfoLe i' gpi
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
E_in_EvS: E ∈ EvS
ψ_sub_EvS: free_evars (patt_sym sigma) ⊆ EvS
p_sub_SvS: free_svars p ⊆ SvS
q_sub_SvS: free_svars q ⊆ SvS
ψ_sub_SvS: free_svars (patt_sym sigma) ⊆ SvS
HEinψ: E ∈ free_evars (patt_sym sigma)

Γ ⊢i patt_sym sigma <---> patt_sym sigma using gpi
Σ: Signature
sz: nat
Γ: Theory
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
E: evar
exdepth, mudepth: nat
gpi: ProofInfo
pf: Γ ⊢i p <---> q using gpi
IHsz: (ψ : Pattern) (wfψ : well_formed ψ), size' ψ ≤ sz → (EvS : EVarSet) (SvS : SVarSet), ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ p q wfψ wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ ⊆ SvS → Γ ⊢i ψ^[[evar:E↦p]] <---> ψ^[[evar:E↦q]] using gpi
sigma: symbols
wfψ: well_formed (patt_sym sigma)
Hsz: 1 ≤ S sz
EvS: EVarSet
SvS: SVarSet
i':= ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (patt_sym sigma))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (patt_sym sigma))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (patt_sym sigma)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E (patt_sym sigma) p q wfψ wfp wfq): ProofInfo
pile: ProofInfoLe i' gpi
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
E_in_EvS: E ∈ EvS
ψ_sub_EvS: free_evars (patt_sym sigma) ⊆ EvS
p_sub_SvS: free_svars p ⊆ SvS
q_sub_SvS: free_svars q ⊆ SvS
ψ_sub_SvS: free_svars (patt_sym sigma) ⊆ SvS
HEinψ: E ∈ free_evars (patt_sym sigma)

Γ ⊢i patt_sym sigma <---> patt_sym sigma using BasicReasoning
Σ: Signature
sz: nat
Γ: Theory
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
E: evar
exdepth, mudepth: nat
gpi: ProofInfo
pf: Γ ⊢i p <---> q using gpi
IHsz: (ψ : Pattern) (wfψ : well_formed ψ), size' ψ ≤ sz → (EvS : EVarSet) (SvS : SVarSet), ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ p q wfψ wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ ⊆ SvS → Γ ⊢i ψ^[[evar:E↦p]] <---> ψ^[[evar:E↦q]] using gpi
sigma: symbols
wfψ: well_formed (patt_sym sigma)
Hsz: 1 ≤ S sz
EvS: EVarSet
SvS: SVarSet
i':= ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (patt_sym sigma))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (patt_sym sigma))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (patt_sym sigma)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E (patt_sym sigma) p q wfψ wfp wfq): ProofInfo
pile: ProofInfoLe i' gpi
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
E_in_EvS: E ∈ EvS
ψ_sub_EvS: free_evars (patt_sym sigma) ⊆ EvS
p_sub_SvS: free_svars p ⊆ SvS
q_sub_SvS: free_svars q ⊆ SvS
ψ_sub_SvS: free_svars (patt_sym sigma) ⊆ SvS
HEinψ: E ∈ free_evars (patt_sym sigma)

well_formed (patt_sym sigma)
abstract (wf_auto2).
Σ: Signature
sz: nat
Γ: Theory
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
E: evar
exdepth, mudepth: nat
gpi: ProofInfo
pf: Γ ⊢i p <---> q using gpi
IHsz: (ψ : Pattern) (wfψ : well_formed ψ), size' ψ ≤ sz → (EvS : EVarSet) (SvS : SVarSet), ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ p q wfψ wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ ⊆ SvS → Γ ⊢i ψ^[[evar:E↦p]] <---> ψ^[[evar:E↦q]] using gpi
ψ1, ψ2: Pattern
wfψ: well_formed (ψ1 $ ψ2)
Hsz: S (size' ψ1 + size' ψ2) ≤ S sz
EvS: EVarSet
SvS: SVarSet
i':= ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (ψ1 $ ψ2))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (ψ1 $ ψ2))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (ψ1 $ ψ2)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E (ψ1 $ ψ2) p q wfψ wfp wfq): ProofInfo
pile: ProofInfoLe i' gpi
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
E_in_EvS: E ∈ EvS
ψ_sub_EvS: free_evars (ψ1 $ ψ2) ⊆ EvS
p_sub_SvS: free_svars p ⊆ SvS
q_sub_SvS: free_svars q ⊆ SvS
ψ_sub_SvS: free_svars (ψ1 $ ψ2) ⊆ SvS
HEinψ: E ∈ free_evars (ψ1 $ ψ2)

Γ ⊢i ψ1^[[evar:E↦p]] $ ψ2^[[evar:E↦p]] <---> ψ1^[[evar:E↦q]] $ ψ2^[[evar:E↦q]] using gpi
Σ: Signature
sz: nat
Γ: Theory
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
E: evar
exdepth, mudepth: nat
gpi: ProofInfo
pf: Γ ⊢i p <---> q using gpi
IHsz: (ψ : Pattern) (wfψ : well_formed ψ), size' ψ ≤ sz → (EvS : EVarSet) (SvS : SVarSet), ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ p q wfψ wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ ⊆ SvS → Γ ⊢i ψ^[[evar:E↦p]] <---> ψ^[[evar:E↦q]] using gpi
wfψ: well_formed ⊥
Hsz: 1 ≤ S sz
EvS: EVarSet
SvS: SVarSet
i':= ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ⊥)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ⊥)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ⊥) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ⊥ p q wfψ wfp wfq): ProofInfo
pile: ProofInfoLe i' gpi
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
E_in_EvS: E ∈ EvS
ψ_sub_EvS: free_evars ⊥ ⊆ EvS
p_sub_SvS: free_svars p ⊆ SvS
q_sub_SvS: free_svars q ⊆ SvS
ψ_sub_SvS: free_svars ⊥ ⊆ SvS
HEinψ: E ∈ free_evars ⊥
Γ ⊢i ⊥ <---> ⊥ using gpi
Σ: Signature
sz: nat
Γ: Theory
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
E: evar
exdepth, mudepth: nat
gpi: ProofInfo
pf: Γ ⊢i p <---> q using gpi
IHsz: (ψ : Pattern) (wfψ : well_formed ψ), size' ψ ≤ sz → (EvS : EVarSet) (SvS : SVarSet), ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ p q wfψ wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ ⊆ SvS → Γ ⊢i ψ^[[evar:E↦p]] <---> ψ^[[evar:E↦q]] using gpi
ψ1, ψ2: Pattern
wfψ: well_formed (ψ1 ---> ψ2)
Hsz: S (size' ψ1 + size' ψ2) ≤ S sz
EvS: EVarSet
SvS: SVarSet
i':= ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (ψ1 ---> ψ2))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (ψ1 ---> ψ2))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (ψ1 ---> ψ2)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E (ψ1 ---> ψ2) p q wfψ wfp wfq): ProofInfo
pile: ProofInfoLe i' gpi
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
E_in_EvS: E ∈ EvS
ψ_sub_EvS: free_evars (ψ1 ---> ψ2) ⊆ EvS
p_sub_SvS: free_svars p ⊆ SvS
q_sub_SvS: free_svars q ⊆ SvS
ψ_sub_SvS: free_svars (ψ1 ---> ψ2) ⊆ SvS
HEinψ: E ∈ free_evars (ψ1 ---> ψ2)
Γ ⊢i (ψ1^[[evar:E↦p]] ---> ψ2^[[evar:E↦p]]) <---> (ψ1^[[evar:E↦q]] ---> ψ2^[[evar:E↦q]]) using gpi
Σ: Signature
sz: nat
Γ: Theory
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
E: evar
exdepth, mudepth: nat
gpi: ProofInfo
pf: Γ ⊢i p <---> q using gpi
IHsz: (ψ : Pattern) (wfψ : well_formed ψ), size' ψ ≤ sz → (EvS : EVarSet) (SvS : SVarSet), ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ p q wfψ wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ ⊆ SvS → Γ ⊢i ψ^[[evar:E↦p]] <---> ψ^[[evar:E↦q]] using gpi
ψ: Pattern
wfψ: well_formed (ex , ψ)
Hsz: S (size' ψ) ≤ S sz
EvS: EVarSet
SvS: SVarSet
i':= ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (ex , ψ))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (ex , ψ))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (ex , ψ)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E (ex , ψ) p q wfψ wfp wfq): ProofInfo
pile: ProofInfoLe i' gpi
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
E_in_EvS: E ∈ EvS
ψ_sub_EvS: free_evars (ex , ψ) ⊆ EvS
p_sub_SvS: free_svars p ⊆ SvS
q_sub_SvS: free_svars q ⊆ SvS
ψ_sub_SvS: free_svars (ex , ψ) ⊆ SvS
HEinψ: E ∈ free_evars (ex , ψ)
Γ ⊢i (ex , ψ^[[evar:E↦p]]) <---> (ex , ψ^[[evar:E↦q]]) using gpi
Σ: Signature
sz: nat
Γ: Theory
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
E: evar
exdepth, mudepth: nat
gpi: ProofInfo
pf: Γ ⊢i p <---> q using gpi
IHsz: (ψ : Pattern) (wfψ : well_formed ψ), size' ψ ≤ sz → (EvS : EVarSet) (SvS : SVarSet), ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ p q wfψ wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ ⊆ SvS → Γ ⊢i ψ^[[evar:E↦p]] <---> ψ^[[evar:E↦q]] using gpi
ψ: Pattern
wfψ: well_formed (mu , ψ)
Hsz: S (size' ψ) ≤ S sz
EvS: EVarSet
SvS: SVarSet
i':= ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (mu , ψ))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (mu , ψ))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (mu , ψ)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E (mu , ψ) p q wfψ wfp wfq): ProofInfo
pile: ProofInfoLe i' gpi
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
E_in_EvS: E ∈ EvS
ψ_sub_EvS: free_evars (mu , ψ) ⊆ EvS
p_sub_SvS: free_svars p ⊆ SvS
q_sub_SvS: free_svars q ⊆ SvS
ψ_sub_SvS: free_svars (mu , ψ) ⊆ SvS
HEinψ: E ∈ free_evars (mu , ψ)
Γ ⊢i (mu , ψ^[[evar:E↦p]]) <---> (mu , ψ^[[evar:E↦q]]) using gpi
Σ: Signature
sz: nat
Γ: Theory
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
E: evar
exdepth, mudepth: nat
gpi: ProofInfo
pf: Γ ⊢i p <---> q using gpi
IHsz: (ψ : Pattern) (wfψ : well_formed ψ), size' ψ ≤ sz → (EvS : EVarSet) (SvS : SVarSet), ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ p q wfψ wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ ⊆ SvS → Γ ⊢i ψ^[[evar:E↦p]] <---> ψ^[[evar:E↦q]] using gpi
ψ1, ψ2: Pattern
wfψ: well_formed (ψ1 $ ψ2)
Hsz: S (size' ψ1 + size' ψ2) ≤ S sz
EvS: EVarSet
SvS: SVarSet
i':= ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (ψ1 $ ψ2))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (ψ1 $ ψ2))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (ψ1 $ ψ2)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E (ψ1 $ ψ2) p q wfψ wfp wfq): ProofInfo
pile: ProofInfoLe i' gpi
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
E_in_EvS: E ∈ EvS
ψ_sub_EvS: free_evars (ψ1 $ ψ2) ⊆ EvS
p_sub_SvS: free_svars p ⊆ SvS
q_sub_SvS: free_svars q ⊆ SvS
ψ_sub_SvS: free_svars (ψ1 $ ψ2) ⊆ SvS
HEinψ: E ∈ free_evars (ψ1 $ ψ2)

Γ ⊢i ψ1^[[evar:E↦p]] $ ψ2^[[evar:E↦p]] <---> ψ1^[[evar:E↦q]] $ ψ2^[[evar:E↦q]] using gpi
Σ: Signature
sz: nat
Γ: Theory
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
E: evar
exdepth, mudepth: nat
gpi: ProofInfo
pf: Γ ⊢i p <---> q using gpi
IHsz: (ψ : Pattern) (wfψ : well_formed ψ), size' ψ ≤ sz → (EvS : EVarSet) (SvS : SVarSet), ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ p q wfψ wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ ⊆ SvS → Γ ⊢i ψ^[[evar:E↦p]] <---> ψ^[[evar:E↦q]] using gpi
ψ1, ψ2: Pattern
wfψ: well_formed (ψ1 $ ψ2)
Hsz: S (size' ψ1 + size' ψ2) ≤ S sz
EvS: EVarSet
SvS: SVarSet
i':= ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (ψ1 $ ψ2))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (ψ1 $ ψ2))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (ψ1 $ ψ2)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E (ψ1 $ ψ2) p q wfψ wfp wfq): ProofInfo
pile: ProofInfoLe i' gpi
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
E_in_EvS: E ∈ EvS
ψ_sub_EvS: free_evars (ψ1 $ ψ2) ⊆ EvS
p_sub_SvS: free_svars p ⊆ SvS
q_sub_SvS: free_svars q ⊆ SvS
ψ_sub_SvS: free_svars (ψ1 $ ψ2) ⊆ SvS
HEinψ: E ∈ free_evars (ψ1 $ ψ2)

well_formed ψ1 = true
Σ: Signature
sz: nat
Γ: Theory
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
E: evar
exdepth, mudepth: nat
gpi: ProofInfo
pf: Γ ⊢i p <---> q using gpi
IHsz: (ψ : Pattern) (wfψ : well_formed ψ), size' ψ ≤ sz → (EvS : EVarSet) (SvS : SVarSet), ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ p q wfψ wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ ⊆ SvS → Γ ⊢i ψ^[[evar:E↦p]] <---> ψ^[[evar:E↦q]] using gpi
ψ1, ψ2: Pattern
wfψ: well_formed (ψ1 $ ψ2)
Hsz: S (size' ψ1 + size' ψ2) ≤ S sz
EvS: EVarSet
SvS: SVarSet
i':= ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (ψ1 $ ψ2))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (ψ1 $ ψ2))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (ψ1 $ ψ2)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E (ψ1 $ ψ2) p q wfψ wfp wfq): ProofInfo
pile: ProofInfoLe i' gpi
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
E_in_EvS: E ∈ EvS
ψ_sub_EvS: free_evars (ψ1 $ ψ2) ⊆ EvS
p_sub_SvS: free_svars p ⊆ SvS
q_sub_SvS: free_svars q ⊆ SvS
ψ_sub_SvS: free_svars (ψ1 $ ψ2) ⊆ SvS
HEinψ: E ∈ free_evars (ψ1 $ ψ2)
wfψ1: well_formed ψ1 = true
Γ ⊢i ψ1^[[evar:E↦p]] $ ψ2^[[evar:E↦p]] <---> ψ1^[[evar:E↦q]] $ ψ2^[[evar:E↦q]] using gpi
Σ: Signature
sz: nat
Γ: Theory
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
E: evar
exdepth, mudepth: nat
gpi: ProofInfo
pf: Γ ⊢i p <---> q using gpi
IHsz: (ψ : Pattern) (wfψ : well_formed ψ), size' ψ ≤ sz → (EvS : EVarSet) (SvS : SVarSet), ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ p q wfψ wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ ⊆ SvS → Γ ⊢i ψ^[[evar:E↦p]] <---> ψ^[[evar:E↦q]] using gpi
ψ1, ψ2: Pattern
wfψ: well_formed (ψ1 $ ψ2)
Hsz: S (size' ψ1 + size' ψ2) ≤ S sz
EvS: EVarSet
SvS: SVarSet
i':= ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (ψ1 $ ψ2))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (ψ1 $ ψ2))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (ψ1 $ ψ2)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E (ψ1 $ ψ2) p q wfψ wfp wfq): ProofInfo
pile: ProofInfoLe i' gpi
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
E_in_EvS: E ∈ EvS
ψ_sub_EvS: free_evars (ψ1 $ ψ2) ⊆ EvS
p_sub_SvS: free_svars p ⊆ SvS
q_sub_SvS: free_svars q ⊆ SvS
ψ_sub_SvS: free_svars (ψ1 $ ψ2) ⊆ SvS
HEinψ: E ∈ free_evars (ψ1 $ ψ2)

well_formed ψ1 = true
Σ: Signature
ψ1, ψ2: Pattern
wfψ: well_formed (ψ1 $ ψ2)

well_formed ψ1 = true
abstract (wf_auto2).
Σ: Signature
sz: nat
Γ: Theory
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
E: evar
exdepth, mudepth: nat
gpi: ProofInfo
pf: Γ ⊢i p <---> q using gpi
IHsz: (ψ : Pattern) (wfψ : well_formed ψ), size' ψ ≤ sz → (EvS : EVarSet) (SvS : SVarSet), ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ p q wfψ wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ ⊆ SvS → Γ ⊢i ψ^[[evar:E↦p]] <---> ψ^[[evar:E↦q]] using gpi
ψ1, ψ2: Pattern
wfψ: well_formed (ψ1 $ ψ2)
Hsz: S (size' ψ1 + size' ψ2) ≤ S sz
EvS: EVarSet
SvS: SVarSet
i':= ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (ψ1 $ ψ2))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (ψ1 $ ψ2))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (ψ1 $ ψ2)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E (ψ1 $ ψ2) p q wfψ wfp wfq): ProofInfo
pile: ProofInfoLe i' gpi
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
E_in_EvS: E ∈ EvS
ψ_sub_EvS: free_evars (ψ1 $ ψ2) ⊆ EvS
p_sub_SvS: free_svars p ⊆ SvS
q_sub_SvS: free_svars q ⊆ SvS
ψ_sub_SvS: free_svars (ψ1 $ ψ2) ⊆ SvS
HEinψ: E ∈ free_evars (ψ1 $ ψ2)
wfψ1: well_formed ψ1 = true

Γ ⊢i ψ1^[[evar:E↦p]] $ ψ2^[[evar:E↦p]] <---> ψ1^[[evar:E↦q]] $ ψ2^[[evar:E↦q]] using gpi
Σ: Signature
sz: nat
Γ: Theory
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
E: evar
exdepth, mudepth: nat
gpi: ProofInfo
pf: Γ ⊢i p <---> q using gpi
IHsz: (ψ : Pattern) (wfψ : well_formed ψ), size' ψ ≤ sz → (EvS : EVarSet) (SvS : SVarSet), ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ p q wfψ wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ ⊆ SvS → Γ ⊢i ψ^[[evar:E↦p]] <---> ψ^[[evar:E↦q]] using gpi
ψ1, ψ2: Pattern
wfψ: well_formed (ψ1 $ ψ2)
Hsz: S (size' ψ1 + size' ψ2) ≤ S sz
EvS: EVarSet
SvS: SVarSet
i':= ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (ψ1 $ ψ2))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (ψ1 $ ψ2))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (ψ1 $ ψ2)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E (ψ1 $ ψ2) p q wfψ wfp wfq): ProofInfo
pile: ProofInfoLe i' gpi
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
E_in_EvS: E ∈ EvS
ψ_sub_EvS: free_evars (ψ1 $ ψ2) ⊆ EvS
p_sub_SvS: free_svars p ⊆ SvS
q_sub_SvS: free_svars q ⊆ SvS
ψ_sub_SvS: free_svars (ψ1 $ ψ2) ⊆ SvS
HEinψ: E ∈ free_evars (ψ1 $ ψ2)
wfψ1: well_formed ψ1 = true
H: size' ψ1 ≤ sz

Γ ⊢i ψ1^[[evar:E↦p]] $ ψ2^[[evar:E↦p]] <---> ψ1^[[evar:E↦q]] $ ψ2^[[evar:E↦q]] using gpi
Σ: Signature
sz: nat
Γ: Theory
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
E: evar
exdepth, mudepth: nat
gpi: ProofInfo
pf: Γ ⊢i p <---> q using gpi
IHsz: (ψ : Pattern) (wfψ : well_formed ψ), size' ψ ≤ sz → (EvS : EVarSet) (SvS : SVarSet), ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ p q wfψ wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ ⊆ SvS → Γ ⊢i ψ^[[evar:E↦p]] <---> ψ^[[evar:E↦q]] using gpi
ψ1, ψ2: Pattern
wfψ: well_formed (ψ1 $ ψ2)
Hsz: S (size' ψ1 + size' ψ2) ≤ S sz
EvS: EVarSet
SvS: SVarSet
i':= ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (ψ1 $ ψ2))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (ψ1 $ ψ2))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (ψ1 $ ψ2)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E (ψ1 $ ψ2) p q wfψ wfp wfq): ProofInfo
pile: ProofInfoLe i' gpi
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
E_in_EvS: E ∈ EvS
ψ_sub_EvS: free_evars (ψ1 $ ψ2) ⊆ EvS
p_sub_SvS: free_svars p ⊆ SvS
q_sub_SvS: free_svars q ⊆ SvS
ψ_sub_SvS: free_svars (ψ1 $ ψ2) ⊆ SvS
HEinψ: E ∈ free_evars (ψ1 $ ψ2)
wfψ1: well_formed ψ1 = true
H: size' ψ1 ≤ sz

well_formed ψ2 = true
Σ: Signature
sz: nat
Γ: Theory
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
E: evar
exdepth, mudepth: nat
gpi: ProofInfo
pf: Γ ⊢i p <---> q using gpi
IHsz: (ψ : Pattern) (wfψ : well_formed ψ), size' ψ ≤ sz → (EvS : EVarSet) (SvS : SVarSet), ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ p q wfψ wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ ⊆ SvS → Γ ⊢i ψ^[[evar:E↦p]] <---> ψ^[[evar:E↦q]] using gpi
ψ1, ψ2: Pattern
wfψ: well_formed (ψ1 $ ψ2)
Hsz: S (size' ψ1 + size' ψ2) ≤ S sz
EvS: EVarSet
SvS: SVarSet
i':= ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (ψ1 $ ψ2))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (ψ1 $ ψ2))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (ψ1 $ ψ2)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E (ψ1 $ ψ2) p q wfψ wfp wfq): ProofInfo
pile: ProofInfoLe i' gpi
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
E_in_EvS: E ∈ EvS
ψ_sub_EvS: free_evars (ψ1 $ ψ2) ⊆ EvS
p_sub_SvS: free_svars p ⊆ SvS
q_sub_SvS: free_svars q ⊆ SvS
ψ_sub_SvS: free_svars (ψ1 $ ψ2) ⊆ SvS
HEinψ: E ∈ free_evars (ψ1 $ ψ2)
wfψ1: well_formed ψ1 = true
H: size' ψ1 ≤ sz
wfψ2: well_formed ψ2 = true
Γ ⊢i ψ1^[[evar:E↦p]] $ ψ2^[[evar:E↦p]] <---> ψ1^[[evar:E↦q]] $ ψ2^[[evar:E↦q]] using gpi
Σ: Signature
sz: nat
Γ: Theory
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
E: evar
exdepth, mudepth: nat
gpi: ProofInfo
pf: Γ ⊢i p <---> q using gpi
IHsz: (ψ : Pattern) (wfψ : well_formed ψ), size' ψ ≤ sz → (EvS : EVarSet) (SvS : SVarSet), ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ p q wfψ wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ ⊆ SvS → Γ ⊢i ψ^[[evar:E↦p]] <---> ψ^[[evar:E↦q]] using gpi
ψ1, ψ2: Pattern
wfψ: well_formed (ψ1 $ ψ2)
Hsz: S (size' ψ1 + size' ψ2) ≤ S sz
EvS: EVarSet
SvS: SVarSet
i':= ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (ψ1 $ ψ2))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (ψ1 $ ψ2))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (ψ1 $ ψ2)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E (ψ1 $ ψ2) p q wfψ wfp wfq): ProofInfo
pile: ProofInfoLe i' gpi
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
E_in_EvS: E ∈ EvS
ψ_sub_EvS: free_evars (ψ1 $ ψ2) ⊆ EvS
p_sub_SvS: free_svars p ⊆ SvS
q_sub_SvS: free_svars q ⊆ SvS
ψ_sub_SvS: free_svars (ψ1 $ ψ2) ⊆ SvS
HEinψ: E ∈ free_evars (ψ1 $ ψ2)
wfψ1: well_formed ψ1 = true
H: size' ψ1 ≤ sz

well_formed ψ2 = true
Σ: Signature
ψ1, ψ2: Pattern
wfψ: well_formed (ψ1 $ ψ2)

well_formed ψ2 = true
abstract (wf_auto2).
Σ: Signature
sz: nat
Γ: Theory
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
E: evar
exdepth, mudepth: nat
gpi: ProofInfo
pf: Γ ⊢i p <---> q using gpi
IHsz: (ψ : Pattern) (wfψ : well_formed ψ), size' ψ ≤ sz → (EvS : EVarSet) (SvS : SVarSet), ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ p q wfψ wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ ⊆ SvS → Γ ⊢i ψ^[[evar:E↦p]] <---> ψ^[[evar:E↦q]] using gpi
ψ1, ψ2: Pattern
wfψ: well_formed (ψ1 $ ψ2)
Hsz: S (size' ψ1 + size' ψ2) ≤ S sz
EvS: EVarSet
SvS: SVarSet
i':= ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (ψ1 $ ψ2))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (ψ1 $ ψ2))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (ψ1 $ ψ2)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E (ψ1 $ ψ2) p q wfψ wfp wfq): ProofInfo
pile: ProofInfoLe i' gpi
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
E_in_EvS: E ∈ EvS
ψ_sub_EvS: free_evars (ψ1 $ ψ2) ⊆ EvS
p_sub_SvS: free_svars p ⊆ SvS
q_sub_SvS: free_svars q ⊆ SvS
ψ_sub_SvS: free_svars (ψ1 $ ψ2) ⊆ SvS
HEinψ: E ∈ free_evars (ψ1 $ ψ2)
wfψ1: well_formed ψ1 = true
H: size' ψ1 ≤ sz
wfψ2: well_formed ψ2 = true

Γ ⊢i ψ1^[[evar:E↦p]] $ ψ2^[[evar:E↦p]] <---> ψ1^[[evar:E↦q]] $ ψ2^[[evar:E↦q]] using gpi
Σ: Signature
sz: nat
Γ: Theory
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
E: evar
exdepth, mudepth: nat
gpi: ProofInfo
pf: Γ ⊢i p <---> q using gpi
IHsz: (ψ : Pattern) (wfψ : well_formed ψ), size' ψ ≤ sz → (EvS : EVarSet) (SvS : SVarSet), ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ p q wfψ wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ ⊆ SvS → Γ ⊢i ψ^[[evar:E↦p]] <---> ψ^[[evar:E↦q]] using gpi
ψ1, ψ2: Pattern
wfψ: well_formed (ψ1 $ ψ2)
Hsz: S (size' ψ1 + size' ψ2) ≤ S sz
EvS: EVarSet
SvS: SVarSet
i':= ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (ψ1 $ ψ2))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (ψ1 $ ψ2))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (ψ1 $ ψ2)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E (ψ1 $ ψ2) p q wfψ wfp wfq): ProofInfo
pile: ProofInfoLe i' gpi
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
E_in_EvS: E ∈ EvS
ψ_sub_EvS: free_evars (ψ1 $ ψ2) ⊆ EvS
p_sub_SvS: free_svars p ⊆ SvS
q_sub_SvS: free_svars q ⊆ SvS
ψ_sub_SvS: free_svars (ψ1 $ ψ2) ⊆ SvS
HEinψ: E ∈ free_evars (ψ1 $ ψ2)
wfψ1: well_formed ψ1 = true
H: size' ψ1 ≤ sz
wfψ2: well_formed ψ2 = true
H0: size' ψ2 ≤ sz

Γ ⊢i ψ1^[[evar:E↦p]] $ ψ2^[[evar:E↦p]] <---> ψ1^[[evar:E↦q]] $ ψ2^[[evar:E↦q]] using gpi
Σ: Signature
sz: nat
Γ: Theory
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
E: evar
exdepth, mudepth: nat
gpi: ProofInfo
pf: Γ ⊢i p <---> q using gpi
IHsz: (ψ : Pattern) (wfψ : well_formed ψ), size' ψ ≤ sz → (EvS : EVarSet) (SvS : SVarSet), ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ p q wfψ wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ ⊆ SvS → Γ ⊢i ψ^[[evar:E↦p]] <---> ψ^[[evar:E↦q]] using gpi
ψ1, ψ2: Pattern
wfψ: well_formed (ψ1 $ ψ2)
Hsz: S (size' ψ1 + size' ψ2) ≤ S sz
EvS: EVarSet
SvS: SVarSet
i':= ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (ψ1 $ ψ2))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (ψ1 $ ψ2))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (ψ1 $ ψ2)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E (ψ1 $ ψ2) p q wfψ wfp wfq): ProofInfo
pile: ProofInfoLe i' gpi
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
E_in_EvS: E ∈ EvS
ψ_sub_EvS: free_evars (ψ1 $ ψ2) ⊆ EvS
p_sub_SvS: free_svars p ⊆ SvS
q_sub_SvS: free_svars q ⊆ SvS
ψ_sub_SvS: free_svars (ψ1 $ ψ2) ⊆ SvS
HEinψ: E ∈ free_evars (ψ1 $ ψ2)
wfψ1: well_formed ψ1 = true
H: size' ψ1 ≤ sz
wfψ2: well_formed ψ2 = true
H0: size' ψ2 ≤ sz
pf₁: (EvS : EVarSet) (SvS : SVarSet), ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ1)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ1)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ1) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ1 p q wfψ1 wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ1 ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ1 ⊆ SvS → Γ ⊢i ψ1^[[evar:E↦p]] <---> ψ1^[[evar:E↦q]] using gpi

Γ ⊢i ψ1^[[evar:E↦p]] $ ψ2^[[evar:E↦p]] <---> ψ1^[[evar:E↦q]] $ ψ2^[[evar:E↦q]] using gpi
Σ: Signature
sz: nat
Γ: Theory
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
E: evar
exdepth, mudepth: nat
gpi: ProofInfo
pf: Γ ⊢i p <---> q using gpi
IHsz: (ψ : Pattern) (wfψ : well_formed ψ), size' ψ ≤ sz → (EvS : EVarSet) (SvS : SVarSet), ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ p q wfψ wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ ⊆ SvS → Γ ⊢i ψ^[[evar:E↦p]] <---> ψ^[[evar:E↦q]] using gpi
ψ1, ψ2: Pattern
wfψ: well_formed (ψ1 $ ψ2)
Hsz: S (size' ψ1 + size' ψ2) ≤ S sz
EvS: EVarSet
SvS: SVarSet
i':= ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (ψ1 $ ψ2))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (ψ1 $ ψ2))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (ψ1 $ ψ2)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E (ψ1 $ ψ2) p q wfψ wfp wfq): ProofInfo
pile: ProofInfoLe i' gpi
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
E_in_EvS: E ∈ EvS
ψ_sub_EvS: free_evars (ψ1 $ ψ2) ⊆ EvS
p_sub_SvS: free_svars p ⊆ SvS
q_sub_SvS: free_svars q ⊆ SvS
ψ_sub_SvS: free_svars (ψ1 $ ψ2) ⊆ SvS
HEinψ: E ∈ free_evars (ψ1 $ ψ2)
wfψ1: well_formed ψ1 = true
H: size' ψ1 ≤ sz
wfψ2: well_formed ψ2 = true
H0: size' ψ2 ≤ sz
pf₁: ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ1)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ1)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ1) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ1 p q wfψ1 wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ1 ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ1 ⊆ SvS → Γ ⊢i ψ1^[[evar:E↦p]] <---> ψ1^[[evar:E↦q]] using gpi

Γ ⊢i ψ1^[[evar:E↦p]] $ ψ2^[[evar:E↦p]] <---> ψ1^[[evar:E↦q]] $ ψ2^[[evar:E↦q]] using gpi
Σ: Signature
sz: nat
Γ: Theory
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
E: evar
exdepth, mudepth: nat
gpi: ProofInfo
pf: Γ ⊢i p <---> q using gpi
IHsz: (ψ : Pattern) (wfψ : well_formed ψ), size' ψ ≤ sz → (EvS : EVarSet) (SvS : SVarSet), ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ p q wfψ wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ ⊆ SvS → Γ ⊢i ψ^[[evar:E↦p]] <---> ψ^[[evar:E↦q]] using gpi
ψ1, ψ2: Pattern
wfψ: well_formed (ψ1 $ ψ2)
Hsz: S (size' ψ1 + size' ψ2) ≤ S sz
EvS: EVarSet
SvS: SVarSet
i':= ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (ψ1 $ ψ2))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (ψ1 $ ψ2))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (ψ1 $ ψ2)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E (ψ1 $ ψ2) p q wfψ wfp wfq): ProofInfo
pile: ProofInfoLe i' gpi
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
E_in_EvS: E ∈ EvS
ψ_sub_EvS: free_evars (ψ1 $ ψ2) ⊆ EvS
p_sub_SvS: free_svars p ⊆ SvS
q_sub_SvS: free_svars q ⊆ SvS
ψ_sub_SvS: free_svars (ψ1 $ ψ2) ⊆ SvS
HEinψ: E ∈ free_evars (ψ1 $ ψ2)
wfψ1: well_formed ψ1 = true
H: size' ψ1 ≤ sz
wfψ2: well_formed ψ2 = true
H0: size' ψ2 ≤ sz
pf₁: ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ1)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ1)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ1) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ1 p q wfψ1 wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ1 ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ1 ⊆ SvS → Γ ⊢i ψ1^[[evar:E↦p]] <---> ψ1^[[evar:E↦q]] using gpi

ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ1)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ1)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ1) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ1 p q wfψ1 wfp wfq)) gpi
Σ: Signature
sz: nat
Γ: Theory
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
E: evar
exdepth, mudepth: nat
gpi: ProofInfo
pf: Γ ⊢i p <---> q using gpi
IHsz: (ψ : Pattern) (wfψ : well_formed ψ), size' ψ ≤ sz → (EvS : EVarSet) (SvS : SVarSet), ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ p q wfψ wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ ⊆ SvS → Γ ⊢i ψ^[[evar:E↦p]] <---> ψ^[[evar:E↦q]] using gpi
ψ1, ψ2: Pattern
wfψ: well_formed (ψ1 $ ψ2)
Hsz: S (size' ψ1 + size' ψ2) ≤ S sz
EvS: EVarSet
SvS: SVarSet
i':= ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (ψ1 $ ψ2))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (ψ1 $ ψ2))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (ψ1 $ ψ2)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E (ψ1 $ ψ2) p q wfψ wfp wfq): ProofInfo
pile: ProofInfoLe i' gpi
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
E_in_EvS: E ∈ EvS
ψ_sub_EvS: free_evars (ψ1 $ ψ2) ⊆ EvS
p_sub_SvS: free_svars p ⊆ SvS
q_sub_SvS: free_svars q ⊆ SvS
ψ_sub_SvS: free_svars (ψ1 $ ψ2) ⊆ SvS
HEinψ: E ∈ free_evars (ψ1 $ ψ2)
wfψ1: well_formed ψ1 = true
H: size' ψ1 ≤ sz
wfψ2: well_formed ψ2 = true
H0: size' ψ2 ≤ sz
pf₁: ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ1)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ1)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ1) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ1 p q wfψ1 wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ1 ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ1 ⊆ SvS → Γ ⊢i ψ1^[[evar:E↦p]] <---> ψ1^[[evar:E↦q]] using gpi
free_evars p ⊆ EvS
Σ: Signature
sz: nat
Γ: Theory
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
E: evar
exdepth, mudepth: nat
gpi: ProofInfo
pf: Γ ⊢i p <---> q using gpi
IHsz: (ψ : Pattern) (wfψ : well_formed ψ), size' ψ ≤ sz → (EvS : EVarSet) (SvS : SVarSet), ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ p q wfψ wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ ⊆ SvS → Γ ⊢i ψ^[[evar:E↦p]] <---> ψ^[[evar:E↦q]] using gpi
ψ1, ψ2: Pattern
wfψ: well_formed (ψ1 $ ψ2)
Hsz: S (size' ψ1 + size' ψ2) ≤ S sz
EvS: EVarSet
SvS: SVarSet
i':= ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (ψ1 $ ψ2))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (ψ1 $ ψ2))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (ψ1 $ ψ2)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E (ψ1 $ ψ2) p q wfψ wfp wfq): ProofInfo
pile: ProofInfoLe i' gpi
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
E_in_EvS: E ∈ EvS
ψ_sub_EvS: free_evars (ψ1 $ ψ2) ⊆ EvS
p_sub_SvS: free_svars p ⊆ SvS
q_sub_SvS: free_svars q ⊆ SvS
ψ_sub_SvS: free_svars (ψ1 $ ψ2) ⊆ SvS
HEinψ: E ∈ free_evars (ψ1 $ ψ2)
wfψ1: well_formed ψ1 = true
H: size' ψ1 ≤ sz
wfψ2: well_formed ψ2 = true
H0: size' ψ2 ≤ sz
pf₁: ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ1)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ1)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ1) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ1 p q wfψ1 wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ1 ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ1 ⊆ SvS → Γ ⊢i ψ1^[[evar:E↦p]] <---> ψ1^[[evar:E↦q]] using gpi
free_evars q ⊆ EvS
Σ: Signature
sz: nat
Γ: Theory
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
E: evar
exdepth, mudepth: nat
gpi: ProofInfo
pf: Γ ⊢i p <---> q using gpi
IHsz: (ψ : Pattern) (wfψ : well_formed ψ), size' ψ ≤ sz → (EvS : EVarSet) (SvS : SVarSet), ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ p q wfψ wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ ⊆ SvS → Γ ⊢i ψ^[[evar:E↦p]] <---> ψ^[[evar:E↦q]] using gpi
ψ1, ψ2: Pattern
wfψ: well_formed (ψ1 $ ψ2)
Hsz: S (size' ψ1 + size' ψ2) ≤ S sz
EvS: EVarSet
SvS: SVarSet
i':= ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (ψ1 $ ψ2))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (ψ1 $ ψ2))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (ψ1 $ ψ2)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E (ψ1 $ ψ2) p q wfψ wfp wfq): ProofInfo
pile: ProofInfoLe i' gpi
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
E_in_EvS: E ∈ EvS
ψ_sub_EvS: free_evars (ψ1 $ ψ2) ⊆ EvS
p_sub_SvS: free_svars p ⊆ SvS
q_sub_SvS: free_svars q ⊆ SvS
ψ_sub_SvS: free_svars (ψ1 $ ψ2) ⊆ SvS
HEinψ: E ∈ free_evars (ψ1 $ ψ2)
wfψ1: well_formed ψ1 = true
H: size' ψ1 ≤ sz
wfψ2: well_formed ψ2 = true
H0: size' ψ2 ≤ sz
pf₁: ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ1)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ1)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ1) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ1 p q wfψ1 wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ1 ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ1 ⊆ SvS → Γ ⊢i ψ1^[[evar:E↦p]] <---> ψ1^[[evar:E↦q]] using gpi
E ∈ EvS
Σ: Signature
sz: nat
Γ: Theory
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
E: evar
exdepth, mudepth: nat
gpi: ProofInfo
pf: Γ ⊢i p <---> q using gpi
IHsz: (ψ : Pattern) (wfψ : well_formed ψ), size' ψ ≤ sz → (EvS : EVarSet) (SvS : SVarSet), ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ p q wfψ wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ ⊆ SvS → Γ ⊢i ψ^[[evar:E↦p]] <---> ψ^[[evar:E↦q]] using gpi
ψ1, ψ2: Pattern
wfψ: well_formed (ψ1 $ ψ2)
Hsz: S (size' ψ1 + size' ψ2) ≤ S sz
EvS: EVarSet
SvS: SVarSet
i':= ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (ψ1 $ ψ2))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (ψ1 $ ψ2))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (ψ1 $ ψ2)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E (ψ1 $ ψ2) p q wfψ wfp wfq): ProofInfo
pile: ProofInfoLe i' gpi
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
E_in_EvS: E ∈ EvS
ψ_sub_EvS: free_evars (ψ1 $ ψ2) ⊆ EvS
p_sub_SvS: free_svars p ⊆ SvS
q_sub_SvS: free_svars q ⊆ SvS
ψ_sub_SvS: free_svars (ψ1 $ ψ2) ⊆ SvS
HEinψ: E ∈ free_evars (ψ1 $ ψ2)
wfψ1: well_formed ψ1 = true
H: size' ψ1 ≤ sz
wfψ2: well_formed ψ2 = true
H0: size' ψ2 ≤ sz
pf₁: ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ1)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ1)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ1) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ1 p q wfψ1 wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ1 ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ1 ⊆ SvS → Γ ⊢i ψ1^[[evar:E↦p]] <---> ψ1^[[evar:E↦q]] using gpi
free_evars ψ1 ⊆ EvS
Σ: Signature
sz: nat
Γ: Theory
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
E: evar
exdepth, mudepth: nat
gpi: ProofInfo
pf: Γ ⊢i p <---> q using gpi
IHsz: (ψ : Pattern) (wfψ : well_formed ψ), size' ψ ≤ sz → (EvS : EVarSet) (SvS : SVarSet), ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ p q wfψ wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ ⊆ SvS → Γ ⊢i ψ^[[evar:E↦p]] <---> ψ^[[evar:E↦q]] using gpi
ψ1, ψ2: Pattern
wfψ: well_formed (ψ1 $ ψ2)
Hsz: S (size' ψ1 + size' ψ2) ≤ S sz
EvS: EVarSet
SvS: SVarSet
i':= ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (ψ1 $ ψ2))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (ψ1 $ ψ2))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (ψ1 $ ψ2)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E (ψ1 $ ψ2) p q wfψ wfp wfq): ProofInfo
pile: ProofInfoLe i' gpi
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
E_in_EvS: E ∈ EvS
ψ_sub_EvS: free_evars (ψ1 $ ψ2) ⊆ EvS
p_sub_SvS: free_svars p ⊆ SvS
q_sub_SvS: free_svars q ⊆ SvS
ψ_sub_SvS: free_svars (ψ1 $ ψ2) ⊆ SvS
HEinψ: E ∈ free_evars (ψ1 $ ψ2)
wfψ1: well_formed ψ1 = true
H: size' ψ1 ≤ sz
wfψ2: well_formed ψ2 = true
H0: size' ψ2 ≤ sz
pf₁: ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ1)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ1)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ1) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ1 p q wfψ1 wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ1 ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ1 ⊆ SvS → Γ ⊢i ψ1^[[evar:E↦p]] <---> ψ1^[[evar:E↦q]] using gpi
free_svars p ⊆ SvS
Σ: Signature
sz: nat
Γ: Theory
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
E: evar
exdepth, mudepth: nat
gpi: ProofInfo
pf: Γ ⊢i p <---> q using gpi
IHsz: (ψ : Pattern) (wfψ : well_formed ψ), size' ψ ≤ sz → (EvS : EVarSet) (SvS : SVarSet), ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ p q wfψ wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ ⊆ SvS → Γ ⊢i ψ^[[evar:E↦p]] <---> ψ^[[evar:E↦q]] using gpi
ψ1, ψ2: Pattern
wfψ: well_formed (ψ1 $ ψ2)
Hsz: S (size' ψ1 + size' ψ2) ≤ S sz
EvS: EVarSet
SvS: SVarSet
i':= ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (ψ1 $ ψ2))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (ψ1 $ ψ2))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (ψ1 $ ψ2)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E (ψ1 $ ψ2) p q wfψ wfp wfq): ProofInfo
pile: ProofInfoLe i' gpi
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
E_in_EvS: E ∈ EvS
ψ_sub_EvS: free_evars (ψ1 $ ψ2) ⊆ EvS
p_sub_SvS: free_svars p ⊆ SvS
q_sub_SvS: free_svars q ⊆ SvS
ψ_sub_SvS: free_svars (ψ1 $ ψ2) ⊆ SvS
HEinψ: E ∈ free_evars (ψ1 $ ψ2)
wfψ1: well_formed ψ1 = true
H: size' ψ1 ≤ sz
wfψ2: well_formed ψ2 = true
H0: size' ψ2 ≤ sz
pf₁: ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ1)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ1)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ1) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ1 p q wfψ1 wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ1 ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ1 ⊆ SvS → Γ ⊢i ψ1^[[evar:E↦p]] <---> ψ1^[[evar:E↦q]] using gpi
free_svars q ⊆ SvS
Σ: Signature
sz: nat
Γ: Theory
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
E: evar
exdepth, mudepth: nat
gpi: ProofInfo
pf: Γ ⊢i p <---> q using gpi
IHsz: (ψ : Pattern) (wfψ : well_formed ψ), size' ψ ≤ sz → (EvS : EVarSet) (SvS : SVarSet), ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ p q wfψ wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ ⊆ SvS → Γ ⊢i ψ^[[evar:E↦p]] <---> ψ^[[evar:E↦q]] using gpi
ψ1, ψ2: Pattern
wfψ: well_formed (ψ1 $ ψ2)
Hsz: S (size' ψ1 + size' ψ2) ≤ S sz
EvS: EVarSet
SvS: SVarSet
i':= ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (ψ1 $ ψ2))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (ψ1 $ ψ2))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (ψ1 $ ψ2)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E (ψ1 $ ψ2) p q wfψ wfp wfq): ProofInfo
pile: ProofInfoLe i' gpi
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
E_in_EvS: E ∈ EvS
ψ_sub_EvS: free_evars (ψ1 $ ψ2) ⊆ EvS
p_sub_SvS: free_svars p ⊆ SvS
q_sub_SvS: free_svars q ⊆ SvS
ψ_sub_SvS: free_svars (ψ1 $ ψ2) ⊆ SvS
HEinψ: E ∈ free_evars (ψ1 $ ψ2)
wfψ1: well_formed ψ1 = true
H: size' ψ1 ≤ sz
wfψ2: well_formed ψ2 = true
H0: size' ψ2 ≤ sz
pf₁: ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ1)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ1)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ1) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ1 p q wfψ1 wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ1 ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ1 ⊆ SvS → Γ ⊢i ψ1^[[evar:E↦p]] <---> ψ1^[[evar:E↦q]] using gpi
free_svars ψ1 ⊆ SvS
Σ: Signature
sz: nat
Γ: Theory
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
E: evar
exdepth, mudepth: nat
gpi: ProofInfo
pf: Γ ⊢i p <---> q using gpi
IHsz: (ψ : Pattern) (wfψ : well_formed ψ), size' ψ ≤ sz → (EvS : EVarSet) (SvS : SVarSet), ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ p q wfψ wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ ⊆ SvS → Γ ⊢i ψ^[[evar:E↦p]] <---> ψ^[[evar:E↦q]] using gpi
ψ1, ψ2: Pattern
wfψ: well_formed (ψ1 $ ψ2)
Hsz: S (size' ψ1 + size' ψ2) ≤ S sz
EvS: EVarSet
SvS: SVarSet
i':= ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (ψ1 $ ψ2))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (ψ1 $ ψ2))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (ψ1 $ ψ2)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E (ψ1 $ ψ2) p q wfψ wfp wfq): ProofInfo
pile: ProofInfoLe i' gpi
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
E_in_EvS: E ∈ EvS
ψ_sub_EvS: free_evars (ψ1 $ ψ2) ⊆ EvS
p_sub_SvS: free_svars p ⊆ SvS
q_sub_SvS: free_svars q ⊆ SvS
ψ_sub_SvS: free_svars (ψ1 $ ψ2) ⊆ SvS
HEinψ: E ∈ free_evars (ψ1 $ ψ2)
wfψ1: well_formed ψ1 = true
H: size' ψ1 ≤ sz
wfψ2: well_formed ψ2 = true
H0: size' ψ2 ≤ sz
pf₁: Γ ⊢i ψ1^[[evar:E↦p]] <---> ψ1^[[evar:E↦q]] using gpi
Γ ⊢i ψ1^[[evar:E↦p]] $ ψ2^[[evar:E↦p]] <---> ψ1^[[evar:E↦q]] $ ψ2^[[evar:E↦q]] using gpi
Σ: Signature
sz: nat
Γ: Theory
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
E: evar
exdepth, mudepth: nat
gpi: ProofInfo
pf: Γ ⊢i p <---> q using gpi
IHsz: (ψ : Pattern) (wfψ : well_formed ψ), size' ψ ≤ sz → (EvS : EVarSet) (SvS : SVarSet), ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ p q wfψ wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ ⊆ SvS → Γ ⊢i ψ^[[evar:E↦p]] <---> ψ^[[evar:E↦q]] using gpi
ψ1, ψ2: Pattern
wfψ: well_formed (ψ1 $ ψ2)
Hsz: S (size' ψ1 + size' ψ2) ≤ S sz
EvS: EVarSet
SvS: SVarSet
i':= ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (ψ1 $ ψ2))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (ψ1 $ ψ2))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (ψ1 $ ψ2)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E (ψ1 $ ψ2) p q wfψ wfp wfq): ProofInfo
pile: ProofInfoLe i' gpi
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
E_in_EvS: E ∈ EvS
ψ_sub_EvS: free_evars (ψ1 $ ψ2) ⊆ EvS
p_sub_SvS: free_svars p ⊆ SvS
q_sub_SvS: free_svars q ⊆ SvS
ψ_sub_SvS: free_svars (ψ1 $ ψ2) ⊆ SvS
HEinψ: E ∈ free_evars (ψ1 $ ψ2)
wfψ1: well_formed ψ1 = true
H: size' ψ1 ≤ sz
wfψ2: well_formed ψ2 = true
H0: size' ψ2 ≤ sz
pf₁: ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ1)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ1)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ1) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ1 p q wfψ1 wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ1 ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ1 ⊆ SvS → Γ ⊢i ψ1^[[evar:E↦p]] <---> ψ1^[[evar:E↦q]] using gpi

ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ1)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ1)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ1) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ1 p q wfψ1 wfp wfq)) gpi
abstract ( eapply pile_trans;[|apply pile]; subst i'; apply pile_evs_svs_kt; [ ( simpl; clear; pose proof (Htmp := evar_fresh_seq_max); set_solver )| ( simpl; clear; pose proof (Htmp := svar_fresh_seq_max); set_solver )| ( simpl; clear pf₁; repeat case_match; simpl; try reflexivity; lia )|(simpl; apply frames_on_the_way_to_hole'_app_1) ]).
Σ: Signature
sz: nat
Γ: Theory
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
E: evar
exdepth, mudepth: nat
gpi: ProofInfo
pf: Γ ⊢i p <---> q using gpi
IHsz: (ψ : Pattern) (wfψ : well_formed ψ), size' ψ ≤ sz → (EvS : EVarSet) (SvS : SVarSet), ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ p q wfψ wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ ⊆ SvS → Γ ⊢i ψ^[[evar:E↦p]] <---> ψ^[[evar:E↦q]] using gpi
ψ1, ψ2: Pattern
wfψ: well_formed (ψ1 $ ψ2)
Hsz: S (size' ψ1 + size' ψ2) ≤ S sz
EvS: EVarSet
SvS: SVarSet
i':= ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (ψ1 $ ψ2))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (ψ1 $ ψ2))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (ψ1 $ ψ2)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E (ψ1 $ ψ2) p q wfψ wfp wfq): ProofInfo
pile: ProofInfoLe i' gpi
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
E_in_EvS: E ∈ EvS
ψ_sub_EvS: free_evars (ψ1 $ ψ2) ⊆ EvS
p_sub_SvS: free_svars p ⊆ SvS
q_sub_SvS: free_svars q ⊆ SvS
ψ_sub_SvS: free_svars (ψ1 $ ψ2) ⊆ SvS
HEinψ: E ∈ free_evars (ψ1 $ ψ2)
wfψ1: well_formed ψ1 = true
H: size' ψ1 ≤ sz
wfψ2: well_formed ψ2 = true
H0: size' ψ2 ≤ sz
pf₁: ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ1)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ1)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ1) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ1 p q wfψ1 wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ1 ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ1 ⊆ SvS → Γ ⊢i ψ1^[[evar:E↦p]] <---> ψ1^[[evar:E↦q]] using gpi

free_evars p ⊆ EvS
Σ: Signature
sz: nat
Γ: Theory
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
E: evar
exdepth, mudepth: nat
gpi: ProofInfo
pf: Γ ⊢i p <---> q using gpi
IHsz: (ψ : Pattern) (wfψ : well_formed ψ), size' ψ ≤ sz → (EvS : EVarSet) (SvS : SVarSet), ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ p q wfψ wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ ⊆ SvS → Γ ⊢i ψ^[[evar:E↦p]] <---> ψ^[[evar:E↦q]] using gpi
ψ1, ψ2: Pattern
wfψ: well_formed (ψ1 $ ψ2)
Hsz: S (size' ψ1 + size' ψ2) ≤ S sz
EvS: EVarSet
SvS: SVarSet
i':= ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (ψ1 $ ψ2))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (ψ1 $ ψ2))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (ψ1 $ ψ2)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E (ψ1 $ ψ2) p q wfψ wfp wfq): ProofInfo
pile: ProofInfoLe i' gpi
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
E_in_EvS: E ∈ EvS
ψ_sub_EvS: free_evars (ψ1 $ ψ2) ⊆ EvS
p_sub_SvS: free_svars p ⊆ SvS
q_sub_SvS: free_svars q ⊆ SvS
ψ_sub_SvS: free_svars (ψ1 $ ψ2) ⊆ SvS
HEinψ: E ∈ free_evars (ψ1 $ ψ2)
wfψ1: well_formed ψ1 = true
H: size' ψ1 ≤ sz
wfψ2: well_formed ψ2 = true
H0: size' ψ2 ≤ sz
pf₁: ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ1)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ1)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ1) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ1 p q wfψ1 wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ1 ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ1 ⊆ SvS → Γ ⊢i ψ1^[[evar:E↦p]] <---> ψ1^[[evar:E↦q]] using gpi
free_evars q ⊆ EvS
Σ: Signature
sz: nat
Γ: Theory
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
E: evar
exdepth, mudepth: nat
gpi: ProofInfo
pf: Γ ⊢i p <---> q using gpi
IHsz: (ψ : Pattern) (wfψ : well_formed ψ), size' ψ ≤ sz → (EvS : EVarSet) (SvS : SVarSet), ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ p q wfψ wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ ⊆ SvS → Γ ⊢i ψ^[[evar:E↦p]] <---> ψ^[[evar:E↦q]] using gpi
ψ1, ψ2: Pattern
wfψ: well_formed (ψ1 $ ψ2)
Hsz: S (size' ψ1 + size' ψ2) ≤ S sz
EvS: EVarSet
SvS: SVarSet
i':= ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (ψ1 $ ψ2))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (ψ1 $ ψ2))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (ψ1 $ ψ2)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E (ψ1 $ ψ2) p q wfψ wfp wfq): ProofInfo
pile: ProofInfoLe i' gpi
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
E_in_EvS: E ∈ EvS
ψ_sub_EvS: free_evars (ψ1 $ ψ2) ⊆ EvS
p_sub_SvS: free_svars p ⊆ SvS
q_sub_SvS: free_svars q ⊆ SvS
ψ_sub_SvS: free_svars (ψ1 $ ψ2) ⊆ SvS
HEinψ: E ∈ free_evars (ψ1 $ ψ2)
wfψ1: well_formed ψ1 = true
H: size' ψ1 ≤ sz
wfψ2: well_formed ψ2 = true
H0: size' ψ2 ≤ sz
pf₁: ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ1)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ1)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ1) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ1 p q wfψ1 wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ1 ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ1 ⊆ SvS → Γ ⊢i ψ1^[[evar:E↦p]] <---> ψ1^[[evar:E↦q]] using gpi
E ∈ EvS
Σ: Signature
sz: nat
Γ: Theory
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
E: evar
exdepth, mudepth: nat
gpi: ProofInfo
pf: Γ ⊢i p <---> q using gpi
IHsz: (ψ : Pattern) (wfψ : well_formed ψ), size' ψ ≤ sz → (EvS : EVarSet) (SvS : SVarSet), ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ p q wfψ wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ ⊆ SvS → Γ ⊢i ψ^[[evar:E↦p]] <---> ψ^[[evar:E↦q]] using gpi
ψ1, ψ2: Pattern
wfψ: well_formed (ψ1 $ ψ2)
Hsz: S (size' ψ1 + size' ψ2) ≤ S sz
EvS: EVarSet
SvS: SVarSet
i':= ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (ψ1 $ ψ2))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (ψ1 $ ψ2))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (ψ1 $ ψ2)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E (ψ1 $ ψ2) p q wfψ wfp wfq): ProofInfo
pile: ProofInfoLe i' gpi
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
E_in_EvS: E ∈ EvS
ψ_sub_EvS: free_evars (ψ1 $ ψ2) ⊆ EvS
p_sub_SvS: free_svars p ⊆ SvS
q_sub_SvS: free_svars q ⊆ SvS
ψ_sub_SvS: free_svars (ψ1 $ ψ2) ⊆ SvS
HEinψ: E ∈ free_evars (ψ1 $ ψ2)
wfψ1: well_formed ψ1 = true
H: size' ψ1 ≤ sz
wfψ2: well_formed ψ2 = true
H0: size' ψ2 ≤ sz
pf₁: ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ1)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ1)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ1) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ1 p q wfψ1 wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ1 ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ1 ⊆ SvS → Γ ⊢i ψ1^[[evar:E↦p]] <---> ψ1^[[evar:E↦q]] using gpi
free_evars ψ1 ⊆ EvS
Σ: Signature
sz: nat
Γ: Theory
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
E: evar
exdepth, mudepth: nat
gpi: ProofInfo
pf: Γ ⊢i p <---> q using gpi
IHsz: (ψ : Pattern) (wfψ : well_formed ψ), size' ψ ≤ sz → (EvS : EVarSet) (SvS : SVarSet), ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ p q wfψ wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ ⊆ SvS → Γ ⊢i ψ^[[evar:E↦p]] <---> ψ^[[evar:E↦q]] using gpi
ψ1, ψ2: Pattern
wfψ: well_formed (ψ1 $ ψ2)
Hsz: S (size' ψ1 + size' ψ2) ≤ S sz
EvS: EVarSet
SvS: SVarSet
i':= ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (ψ1 $ ψ2))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (ψ1 $ ψ2))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (ψ1 $ ψ2)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E (ψ1 $ ψ2) p q wfψ wfp wfq): ProofInfo
pile: ProofInfoLe i' gpi
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
E_in_EvS: E ∈ EvS
ψ_sub_EvS: free_evars (ψ1 $ ψ2) ⊆ EvS
p_sub_SvS: free_svars p ⊆ SvS
q_sub_SvS: free_svars q ⊆ SvS
ψ_sub_SvS: free_svars (ψ1 $ ψ2) ⊆ SvS
HEinψ: E ∈ free_evars (ψ1 $ ψ2)
wfψ1: well_formed ψ1 = true
H: size' ψ1 ≤ sz
wfψ2: well_formed ψ2 = true
H0: size' ψ2 ≤ sz
pf₁: ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ1)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ1)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ1) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ1 p q wfψ1 wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ1 ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ1 ⊆ SvS → Γ ⊢i ψ1^[[evar:E↦p]] <---> ψ1^[[evar:E↦q]] using gpi
free_svars p ⊆ SvS
Σ: Signature
sz: nat
Γ: Theory
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
E: evar
exdepth, mudepth: nat
gpi: ProofInfo
pf: Γ ⊢i p <---> q using gpi
IHsz: (ψ : Pattern) (wfψ : well_formed ψ), size' ψ ≤ sz → (EvS : EVarSet) (SvS : SVarSet), ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ p q wfψ wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ ⊆ SvS → Γ ⊢i ψ^[[evar:E↦p]] <---> ψ^[[evar:E↦q]] using gpi
ψ1, ψ2: Pattern
wfψ: well_formed (ψ1 $ ψ2)
Hsz: S (size' ψ1 + size' ψ2) ≤ S sz
EvS: EVarSet
SvS: SVarSet
i':= ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (ψ1 $ ψ2))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (ψ1 $ ψ2))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (ψ1 $ ψ2)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E (ψ1 $ ψ2) p q wfψ wfp wfq): ProofInfo
pile: ProofInfoLe i' gpi
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
E_in_EvS: E ∈ EvS
ψ_sub_EvS: free_evars (ψ1 $ ψ2) ⊆ EvS
p_sub_SvS: free_svars p ⊆ SvS
q_sub_SvS: free_svars q ⊆ SvS
ψ_sub_SvS: free_svars (ψ1 $ ψ2) ⊆ SvS
HEinψ: E ∈ free_evars (ψ1 $ ψ2)
wfψ1: well_formed ψ1 = true
H: size' ψ1 ≤ sz
wfψ2: well_formed ψ2 = true
H0: size' ψ2 ≤ sz
pf₁: ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ1)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ1)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ1) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ1 p q wfψ1 wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ1 ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ1 ⊆ SvS → Γ ⊢i ψ1^[[evar:E↦p]] <---> ψ1^[[evar:E↦q]] using gpi
free_svars q ⊆ SvS
Σ: Signature
sz: nat
Γ: Theory
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
E: evar
exdepth, mudepth: nat
gpi: ProofInfo
pf: Γ ⊢i p <---> q using gpi
IHsz: (ψ : Pattern) (wfψ : well_formed ψ), size' ψ ≤ sz → (EvS : EVarSet) (SvS : SVarSet), ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ p q wfψ wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ ⊆ SvS → Γ ⊢i ψ^[[evar:E↦p]] <---> ψ^[[evar:E↦q]] using gpi
ψ1, ψ2: Pattern
wfψ: well_formed (ψ1 $ ψ2)
Hsz: S (size' ψ1 + size' ψ2) ≤ S sz
EvS: EVarSet
SvS: SVarSet
i':= ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (ψ1 $ ψ2))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (ψ1 $ ψ2))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (ψ1 $ ψ2)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E (ψ1 $ ψ2) p q wfψ wfp wfq): ProofInfo
pile: ProofInfoLe i' gpi
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
E_in_EvS: E ∈ EvS
ψ_sub_EvS: free_evars (ψ1 $ ψ2) ⊆ EvS
p_sub_SvS: free_svars p ⊆ SvS
q_sub_SvS: free_svars q ⊆ SvS
ψ_sub_SvS: free_svars (ψ1 $ ψ2) ⊆ SvS
HEinψ: E ∈ free_evars (ψ1 $ ψ2)
wfψ1: well_formed ψ1 = true
H: size' ψ1 ≤ sz
wfψ2: well_formed ψ2 = true
H0: size' ψ2 ≤ sz
pf₁: ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ1)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ1)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ1) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ1 p q wfψ1 wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ1 ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ1 ⊆ SvS → Γ ⊢i ψ1^[[evar:E↦p]] <---> ψ1^[[evar:E↦q]] using gpi
free_svars ψ1 ⊆ SvS
Σ: Signature
sz: nat
Γ: Theory
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
E: evar
exdepth, mudepth: nat
gpi: ProofInfo
pf: Γ ⊢i p <---> q using gpi
IHsz: (ψ : Pattern) (wfψ : well_formed ψ), size' ψ ≤ sz → (EvS : EVarSet) (SvS : SVarSet), ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ p q wfψ wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ ⊆ SvS → Γ ⊢i ψ^[[evar:E↦p]] <---> ψ^[[evar:E↦q]] using gpi
ψ1, ψ2: Pattern
wfψ: well_formed (ψ1 $ ψ2)
Hsz: S (size' ψ1 + size' ψ2) ≤ S sz
EvS: EVarSet
SvS: SVarSet
i':= ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (ψ1 $ ψ2))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (ψ1 $ ψ2))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (ψ1 $ ψ2)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E (ψ1 $ ψ2) p q wfψ wfp wfq): ProofInfo
pile: ProofInfoLe i' gpi
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
E_in_EvS: E ∈ EvS
ψ_sub_EvS: free_evars (ψ1 $ ψ2) ⊆ EvS
p_sub_SvS: free_svars p ⊆ SvS
q_sub_SvS: free_svars q ⊆ SvS
ψ_sub_SvS: free_svars (ψ1 $ ψ2) ⊆ SvS
HEinψ: E ∈ free_evars (ψ1 $ ψ2)
wfψ1: well_formed ψ1 = true
H: size' ψ1 ≤ sz
wfψ2: well_formed ψ2 = true
H0: size' ψ2 ≤ sz
pf₁: Γ ⊢i ψ1^[[evar:E↦p]] <---> ψ1^[[evar:E↦q]] using gpi
Γ ⊢i ψ1^[[evar:E↦p]] $ ψ2^[[evar:E↦p]] <---> ψ1^[[evar:E↦q]] $ ψ2^[[evar:E↦q]] using gpi
Σ: Signature
sz: nat
Γ: Theory
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
E: evar
exdepth, mudepth: nat
gpi: ProofInfo
pf: Γ ⊢i p <---> q using gpi
IHsz: (ψ : Pattern) (wfψ : well_formed ψ), size' ψ ≤ sz → (EvS : EVarSet) (SvS : SVarSet), ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ p q wfψ wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ ⊆ SvS → Γ ⊢i ψ^[[evar:E↦p]] <---> ψ^[[evar:E↦q]] using gpi
ψ1, ψ2: Pattern
wfψ: well_formed (ψ1 $ ψ2)
Hsz: S (size' ψ1 + size' ψ2) ≤ S sz
EvS: EVarSet
SvS: SVarSet
i':= ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (ψ1 $ ψ2))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (ψ1 $ ψ2))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (ψ1 $ ψ2)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E (ψ1 $ ψ2) p q wfψ wfp wfq): ProofInfo
pile: ProofInfoLe i' gpi
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
E_in_EvS: E ∈ EvS
ψ_sub_EvS: free_evars (ψ1 $ ψ2) ⊆ EvS
p_sub_SvS: free_svars p ⊆ SvS
q_sub_SvS: free_svars q ⊆ SvS
ψ_sub_SvS: free_svars (ψ1 $ ψ2) ⊆ SvS
HEinψ: E ∈ free_evars (ψ1 $ ψ2)
wfψ1: well_formed ψ1 = true
H: size' ψ1 ≤ sz
wfψ2: well_formed ψ2 = true
H0: size' ψ2 ≤ sz
pf₁: ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ1)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ1)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ1) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ1 p q wfψ1 wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ1 ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ1 ⊆ SvS → Γ ⊢i ψ1^[[evar:E↦p]] <---> ψ1^[[evar:E↦q]] using gpi

free_evars p ⊆ EvS
exact p_sub_EvS.
Σ: Signature
sz: nat
Γ: Theory
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
E: evar
exdepth, mudepth: nat
gpi: ProofInfo
pf: Γ ⊢i p <---> q using gpi
IHsz: (ψ : Pattern) (wfψ : well_formed ψ), size' ψ ≤ sz → (EvS : EVarSet) (SvS : SVarSet), ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ p q wfψ wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ ⊆ SvS → Γ ⊢i ψ^[[evar:E↦p]] <---> ψ^[[evar:E↦q]] using gpi
ψ1, ψ2: Pattern
wfψ: well_formed (ψ1 $ ψ2)
Hsz: S (size' ψ1 + size' ψ2) ≤ S sz
EvS: EVarSet
SvS: SVarSet
i':= ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (ψ1 $ ψ2))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (ψ1 $ ψ2))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (ψ1 $ ψ2)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E (ψ1 $ ψ2) p q wfψ wfp wfq): ProofInfo
pile: ProofInfoLe i' gpi
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
E_in_EvS: E ∈ EvS
ψ_sub_EvS: free_evars (ψ1 $ ψ2) ⊆ EvS
p_sub_SvS: free_svars p ⊆ SvS
q_sub_SvS: free_svars q ⊆ SvS
ψ_sub_SvS: free_svars (ψ1 $ ψ2) ⊆ SvS
HEinψ: E ∈ free_evars (ψ1 $ ψ2)
wfψ1: well_formed ψ1 = true
H: size' ψ1 ≤ sz
wfψ2: well_formed ψ2 = true
H0: size' ψ2 ≤ sz
pf₁: ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ1)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ1)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ1) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ1 p q wfψ1 wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ1 ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ1 ⊆ SvS → Γ ⊢i ψ1^[[evar:E↦p]] <---> ψ1^[[evar:E↦q]] using gpi

free_evars q ⊆ EvS
Σ: Signature
sz: nat
Γ: Theory
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
E: evar
exdepth, mudepth: nat
gpi: ProofInfo
pf: Γ ⊢i p <---> q using gpi
IHsz: (ψ : Pattern) (wfψ : well_formed ψ), size' ψ ≤ sz → (EvS : EVarSet) (SvS : SVarSet), ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ p q wfψ wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ ⊆ SvS → Γ ⊢i ψ^[[evar:E↦p]] <---> ψ^[[evar:E↦q]] using gpi
ψ1, ψ2: Pattern
wfψ: well_formed (ψ1 $ ψ2)
Hsz: S (size' ψ1 + size' ψ2) ≤ S sz
EvS: EVarSet
SvS: SVarSet
i':= ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (ψ1 $ ψ2))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (ψ1 $ ψ2))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (ψ1 $ ψ2)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E (ψ1 $ ψ2) p q wfψ wfp wfq): ProofInfo
pile: ProofInfoLe i' gpi
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
E_in_EvS: E ∈ EvS
ψ_sub_EvS: free_evars (ψ1 $ ψ2) ⊆ EvS
p_sub_SvS: free_svars p ⊆ SvS
q_sub_SvS: free_svars q ⊆ SvS
ψ_sub_SvS: free_svars (ψ1 $ ψ2) ⊆ SvS
HEinψ: E ∈ free_evars (ψ1 $ ψ2)
wfψ1: well_formed ψ1 = true
H: size' ψ1 ≤ sz
wfψ2: well_formed ψ2 = true
H0: size' ψ2 ≤ sz
pf₁: ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ1)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ1)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ1) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ1 p q wfψ1 wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ1 ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ1 ⊆ SvS → Γ ⊢i ψ1^[[evar:E↦p]] <---> ψ1^[[evar:E↦q]] using gpi
E ∈ EvS
Σ: Signature
sz: nat
Γ: Theory
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
E: evar
exdepth, mudepth: nat
gpi: ProofInfo
pf: Γ ⊢i p <---> q using gpi
IHsz: (ψ : Pattern) (wfψ : well_formed ψ), size' ψ ≤ sz → (EvS : EVarSet) (SvS : SVarSet), ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ p q wfψ wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ ⊆ SvS → Γ ⊢i ψ^[[evar:E↦p]] <---> ψ^[[evar:E↦q]] using gpi
ψ1, ψ2: Pattern
wfψ: well_formed (ψ1 $ ψ2)
Hsz: S (size' ψ1 + size' ψ2) ≤ S sz
EvS: EVarSet
SvS: SVarSet
i':= ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (ψ1 $ ψ2))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (ψ1 $ ψ2))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (ψ1 $ ψ2)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E (ψ1 $ ψ2) p q wfψ wfp wfq): ProofInfo
pile: ProofInfoLe i' gpi
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
E_in_EvS: E ∈ EvS
ψ_sub_EvS: free_evars (ψ1 $ ψ2) ⊆ EvS
p_sub_SvS: free_svars p ⊆ SvS
q_sub_SvS: free_svars q ⊆ SvS
ψ_sub_SvS: free_svars (ψ1 $ ψ2) ⊆ SvS
HEinψ: E ∈ free_evars (ψ1 $ ψ2)
wfψ1: well_formed ψ1 = true
H: size' ψ1 ≤ sz
wfψ2: well_formed ψ2 = true
H0: size' ψ2 ≤ sz
pf₁: ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ1)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ1)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ1) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ1 p q wfψ1 wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ1 ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ1 ⊆ SvS → Γ ⊢i ψ1^[[evar:E↦p]] <---> ψ1^[[evar:E↦q]] using gpi
free_evars ψ1 ⊆ EvS
Σ: Signature
sz: nat
Γ: Theory
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
E: evar
exdepth, mudepth: nat
gpi: ProofInfo
pf: Γ ⊢i p <---> q using gpi
IHsz: (ψ : Pattern) (wfψ : well_formed ψ), size' ψ ≤ sz → (EvS : EVarSet) (SvS : SVarSet), ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ p q wfψ wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ ⊆ SvS → Γ ⊢i ψ^[[evar:E↦p]] <---> ψ^[[evar:E↦q]] using gpi
ψ1, ψ2: Pattern
wfψ: well_formed (ψ1 $ ψ2)
Hsz: S (size' ψ1 + size' ψ2) ≤ S sz
EvS: EVarSet
SvS: SVarSet
i':= ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (ψ1 $ ψ2))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (ψ1 $ ψ2))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (ψ1 $ ψ2)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E (ψ1 $ ψ2) p q wfψ wfp wfq): ProofInfo
pile: ProofInfoLe i' gpi
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
E_in_EvS: E ∈ EvS
ψ_sub_EvS: free_evars (ψ1 $ ψ2) ⊆ EvS
p_sub_SvS: free_svars p ⊆ SvS
q_sub_SvS: free_svars q ⊆ SvS
ψ_sub_SvS: free_svars (ψ1 $ ψ2) ⊆ SvS
HEinψ: E ∈ free_evars (ψ1 $ ψ2)
wfψ1: well_formed ψ1 = true
H: size' ψ1 ≤ sz
wfψ2: well_formed ψ2 = true
H0: size' ψ2 ≤ sz
pf₁: ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ1)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ1)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ1) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ1 p q wfψ1 wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ1 ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ1 ⊆ SvS → Γ ⊢i ψ1^[[evar:E↦p]] <---> ψ1^[[evar:E↦q]] using gpi
free_svars p ⊆ SvS
Σ: Signature
sz: nat
Γ: Theory
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
E: evar
exdepth, mudepth: nat
gpi: ProofInfo
pf: Γ ⊢i p <---> q using gpi
IHsz: (ψ : Pattern) (wfψ : well_formed ψ), size' ψ ≤ sz → (EvS : EVarSet) (SvS : SVarSet), ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ p q wfψ wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ ⊆ SvS → Γ ⊢i ψ^[[evar:E↦p]] <---> ψ^[[evar:E↦q]] using gpi
ψ1, ψ2: Pattern
wfψ: well_formed (ψ1 $ ψ2)
Hsz: S (size' ψ1 + size' ψ2) ≤ S sz
EvS: EVarSet
SvS: SVarSet
i':= ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (ψ1 $ ψ2))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (ψ1 $ ψ2))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (ψ1 $ ψ2)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E (ψ1 $ ψ2) p q wfψ wfp wfq): ProofInfo
pile: ProofInfoLe i' gpi
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
E_in_EvS: E ∈ EvS
ψ_sub_EvS: free_evars (ψ1 $ ψ2) ⊆ EvS
p_sub_SvS: free_svars p ⊆ SvS
q_sub_SvS: free_svars q ⊆ SvS
ψ_sub_SvS: free_svars (ψ1 $ ψ2) ⊆ SvS
HEinψ: E ∈ free_evars (ψ1 $ ψ2)
wfψ1: well_formed ψ1 = true
H: size' ψ1 ≤ sz
wfψ2: well_formed ψ2 = true
H0: size' ψ2 ≤ sz
pf₁: ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ1)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ1)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ1) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ1 p q wfψ1 wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ1 ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ1 ⊆ SvS → Γ ⊢i ψ1^[[evar:E↦p]] <---> ψ1^[[evar:E↦q]] using gpi
free_svars q ⊆ SvS
Σ: Signature
sz: nat
Γ: Theory
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
E: evar
exdepth, mudepth: nat
gpi: ProofInfo
pf: Γ ⊢i p <---> q using gpi
IHsz: (ψ : Pattern) (wfψ : well_formed ψ), size' ψ ≤ sz → (EvS : EVarSet) (SvS : SVarSet), ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ p q wfψ wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ ⊆ SvS → Γ ⊢i ψ^[[evar:E↦p]] <---> ψ^[[evar:E↦q]] using gpi
ψ1, ψ2: Pattern
wfψ: well_formed (ψ1 $ ψ2)
Hsz: S (size' ψ1 + size' ψ2) ≤ S sz
EvS: EVarSet
SvS: SVarSet
i':= ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (ψ1 $ ψ2))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (ψ1 $ ψ2))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (ψ1 $ ψ2)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E (ψ1 $ ψ2) p q wfψ wfp wfq): ProofInfo
pile: ProofInfoLe i' gpi
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
E_in_EvS: E ∈ EvS
ψ_sub_EvS: free_evars (ψ1 $ ψ2) ⊆ EvS
p_sub_SvS: free_svars p ⊆ SvS
q_sub_SvS: free_svars q ⊆ SvS
ψ_sub_SvS: free_svars (ψ1 $ ψ2) ⊆ SvS
HEinψ: E ∈ free_evars (ψ1 $ ψ2)
wfψ1: well_formed ψ1 = true
H: size' ψ1 ≤ sz
wfψ2: well_formed ψ2 = true
H0: size' ψ2 ≤ sz
pf₁: ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ1)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ1)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ1) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ1 p q wfψ1 wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ1 ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ1 ⊆ SvS → Γ ⊢i ψ1^[[evar:E↦p]] <---> ψ1^[[evar:E↦q]] using gpi
free_svars ψ1 ⊆ SvS
Σ: Signature
sz: nat
Γ: Theory
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
E: evar
exdepth, mudepth: nat
gpi: ProofInfo
pf: Γ ⊢i p <---> q using gpi
IHsz: (ψ : Pattern) (wfψ : well_formed ψ), size' ψ ≤ sz → (EvS : EVarSet) (SvS : SVarSet), ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ p q wfψ wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ ⊆ SvS → Γ ⊢i ψ^[[evar:E↦p]] <---> ψ^[[evar:E↦q]] using gpi
ψ1, ψ2: Pattern
wfψ: well_formed (ψ1 $ ψ2)
Hsz: S (size' ψ1 + size' ψ2) ≤ S sz
EvS: EVarSet
SvS: SVarSet
i':= ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (ψ1 $ ψ2))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (ψ1 $ ψ2))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (ψ1 $ ψ2)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E (ψ1 $ ψ2) p q wfψ wfp wfq): ProofInfo
pile: ProofInfoLe i' gpi
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
E_in_EvS: E ∈ EvS
ψ_sub_EvS: free_evars (ψ1 $ ψ2) ⊆ EvS
p_sub_SvS: free_svars p ⊆ SvS
q_sub_SvS: free_svars q ⊆ SvS
ψ_sub_SvS: free_svars (ψ1 $ ψ2) ⊆ SvS
HEinψ: E ∈ free_evars (ψ1 $ ψ2)
wfψ1: well_formed ψ1 = true
H: size' ψ1 ≤ sz
wfψ2: well_formed ψ2 = true
H0: size' ψ2 ≤ sz
pf₁: Γ ⊢i ψ1^[[evar:E↦p]] <---> ψ1^[[evar:E↦q]] using gpi
Γ ⊢i ψ1^[[evar:E↦p]] $ ψ2^[[evar:E↦p]] <---> ψ1^[[evar:E↦q]] $ ψ2^[[evar:E↦q]] using gpi
Σ: Signature
sz: nat
Γ: Theory
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
E: evar
exdepth, mudepth: nat
gpi: ProofInfo
pf: Γ ⊢i p <---> q using gpi
IHsz: (ψ : Pattern) (wfψ : well_formed ψ), size' ψ ≤ sz → (EvS : EVarSet) (SvS : SVarSet), ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ p q wfψ wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ ⊆ SvS → Γ ⊢i ψ^[[evar:E↦p]] <---> ψ^[[evar:E↦q]] using gpi
ψ1, ψ2: Pattern
wfψ: well_formed (ψ1 $ ψ2)
Hsz: S (size' ψ1 + size' ψ2) ≤ S sz
EvS: EVarSet
SvS: SVarSet
i':= ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (ψ1 $ ψ2))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (ψ1 $ ψ2))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (ψ1 $ ψ2)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E (ψ1 $ ψ2) p q wfψ wfp wfq): ProofInfo
pile: ProofInfoLe i' gpi
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
E_in_EvS: E ∈ EvS
ψ_sub_EvS: free_evars (ψ1 $ ψ2) ⊆ EvS
p_sub_SvS: free_svars p ⊆ SvS
q_sub_SvS: free_svars q ⊆ SvS
ψ_sub_SvS: free_svars (ψ1 $ ψ2) ⊆ SvS
HEinψ: E ∈ free_evars (ψ1 $ ψ2)
wfψ1: well_formed ψ1 = true
H: size' ψ1 ≤ sz
wfψ2: well_formed ψ2 = true
H0: size' ψ2 ≤ sz
pf₁: ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ1)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ1)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ1) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ1 p q wfψ1 wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ1 ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ1 ⊆ SvS → Γ ⊢i ψ1^[[evar:E↦p]] <---> ψ1^[[evar:E↦q]] using gpi

free_evars q ⊆ EvS
exact q_sub_EvS.
Σ: Signature
sz: nat
Γ: Theory
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
E: evar
exdepth, mudepth: nat
gpi: ProofInfo
pf: Γ ⊢i p <---> q using gpi
IHsz: (ψ : Pattern) (wfψ : well_formed ψ), size' ψ ≤ sz → (EvS : EVarSet) (SvS : SVarSet), ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ p q wfψ wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ ⊆ SvS → Γ ⊢i ψ^[[evar:E↦p]] <---> ψ^[[evar:E↦q]] using gpi
ψ1, ψ2: Pattern
wfψ: well_formed (ψ1 $ ψ2)
Hsz: S (size' ψ1 + size' ψ2) ≤ S sz
EvS: EVarSet
SvS: SVarSet
i':= ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (ψ1 $ ψ2))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (ψ1 $ ψ2))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (ψ1 $ ψ2)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E (ψ1 $ ψ2) p q wfψ wfp wfq): ProofInfo
pile: ProofInfoLe i' gpi
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
E_in_EvS: E ∈ EvS
ψ_sub_EvS: free_evars (ψ1 $ ψ2) ⊆ EvS
p_sub_SvS: free_svars p ⊆ SvS
q_sub_SvS: free_svars q ⊆ SvS
ψ_sub_SvS: free_svars (ψ1 $ ψ2) ⊆ SvS
HEinψ: E ∈ free_evars (ψ1 $ ψ2)
wfψ1: well_formed ψ1 = true
H: size' ψ1 ≤ sz
wfψ2: well_formed ψ2 = true
H0: size' ψ2 ≤ sz
pf₁: ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ1)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ1)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ1) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ1 p q wfψ1 wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ1 ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ1 ⊆ SvS → Γ ⊢i ψ1^[[evar:E↦p]] <---> ψ1^[[evar:E↦q]] using gpi

E ∈ EvS
Σ: Signature
sz: nat
Γ: Theory
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
E: evar
exdepth, mudepth: nat
gpi: ProofInfo
pf: Γ ⊢i p <---> q using gpi
IHsz: (ψ : Pattern) (wfψ : well_formed ψ), size' ψ ≤ sz → (EvS : EVarSet) (SvS : SVarSet), ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ p q wfψ wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ ⊆ SvS → Γ ⊢i ψ^[[evar:E↦p]] <---> ψ^[[evar:E↦q]] using gpi
ψ1, ψ2: Pattern
wfψ: well_formed (ψ1 $ ψ2)
Hsz: S (size' ψ1 + size' ψ2) ≤ S sz
EvS: EVarSet
SvS: SVarSet
i':= ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (ψ1 $ ψ2))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (ψ1 $ ψ2))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (ψ1 $ ψ2)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E (ψ1 $ ψ2) p q wfψ wfp wfq): ProofInfo
pile: ProofInfoLe i' gpi
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
E_in_EvS: E ∈ EvS
ψ_sub_EvS: free_evars (ψ1 $ ψ2) ⊆ EvS
p_sub_SvS: free_svars p ⊆ SvS
q_sub_SvS: free_svars q ⊆ SvS
ψ_sub_SvS: free_svars (ψ1 $ ψ2) ⊆ SvS
HEinψ: E ∈ free_evars (ψ1 $ ψ2)
wfψ1: well_formed ψ1 = true
H: size' ψ1 ≤ sz
wfψ2: well_formed ψ2 = true
H0: size' ψ2 ≤ sz
pf₁: ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ1)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ1)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ1) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ1 p q wfψ1 wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ1 ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ1 ⊆ SvS → Γ ⊢i ψ1^[[evar:E↦p]] <---> ψ1^[[evar:E↦q]] using gpi
free_evars ψ1 ⊆ EvS
Σ: Signature
sz: nat
Γ: Theory
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
E: evar
exdepth, mudepth: nat
gpi: ProofInfo
pf: Γ ⊢i p <---> q using gpi
IHsz: (ψ : Pattern) (wfψ : well_formed ψ), size' ψ ≤ sz → (EvS : EVarSet) (SvS : SVarSet), ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ p q wfψ wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ ⊆ SvS → Γ ⊢i ψ^[[evar:E↦p]] <---> ψ^[[evar:E↦q]] using gpi
ψ1, ψ2: Pattern
wfψ: well_formed (ψ1 $ ψ2)
Hsz: S (size' ψ1 + size' ψ2) ≤ S sz
EvS: EVarSet
SvS: SVarSet
i':= ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (ψ1 $ ψ2))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (ψ1 $ ψ2))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (ψ1 $ ψ2)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E (ψ1 $ ψ2) p q wfψ wfp wfq): ProofInfo
pile: ProofInfoLe i' gpi
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
E_in_EvS: E ∈ EvS
ψ_sub_EvS: free_evars (ψ1 $ ψ2) ⊆ EvS
p_sub_SvS: free_svars p ⊆ SvS
q_sub_SvS: free_svars q ⊆ SvS
ψ_sub_SvS: free_svars (ψ1 $ ψ2) ⊆ SvS
HEinψ: E ∈ free_evars (ψ1 $ ψ2)
wfψ1: well_formed ψ1 = true
H: size' ψ1 ≤ sz
wfψ2: well_formed ψ2 = true
H0: size' ψ2 ≤ sz
pf₁: ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ1)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ1)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ1) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ1 p q wfψ1 wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ1 ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ1 ⊆ SvS → Γ ⊢i ψ1^[[evar:E↦p]] <---> ψ1^[[evar:E↦q]] using gpi
free_svars p ⊆ SvS
Σ: Signature
sz: nat
Γ: Theory
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
E: evar
exdepth, mudepth: nat
gpi: ProofInfo
pf: Γ ⊢i p <---> q using gpi
IHsz: (ψ : Pattern) (wfψ : well_formed ψ), size' ψ ≤ sz → (EvS : EVarSet) (SvS : SVarSet), ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ p q wfψ wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ ⊆ SvS → Γ ⊢i ψ^[[evar:E↦p]] <---> ψ^[[evar:E↦q]] using gpi
ψ1, ψ2: Pattern
wfψ: well_formed (ψ1 $ ψ2)
Hsz: S (size' ψ1 + size' ψ2) ≤ S sz
EvS: EVarSet
SvS: SVarSet
i':= ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (ψ1 $ ψ2))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (ψ1 $ ψ2))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (ψ1 $ ψ2)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E (ψ1 $ ψ2) p q wfψ wfp wfq): ProofInfo
pile: ProofInfoLe i' gpi
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
E_in_EvS: E ∈ EvS
ψ_sub_EvS: free_evars (ψ1 $ ψ2) ⊆ EvS
p_sub_SvS: free_svars p ⊆ SvS
q_sub_SvS: free_svars q ⊆ SvS
ψ_sub_SvS: free_svars (ψ1 $ ψ2) ⊆ SvS
HEinψ: E ∈ free_evars (ψ1 $ ψ2)
wfψ1: well_formed ψ1 = true
H: size' ψ1 ≤ sz
wfψ2: well_formed ψ2 = true
H0: size' ψ2 ≤ sz
pf₁: ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ1)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ1)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ1) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ1 p q wfψ1 wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ1 ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ1 ⊆ SvS → Γ ⊢i ψ1^[[evar:E↦p]] <---> ψ1^[[evar:E↦q]] using gpi
free_svars q ⊆ SvS
Σ: Signature
sz: nat
Γ: Theory
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
E: evar
exdepth, mudepth: nat
gpi: ProofInfo
pf: Γ ⊢i p <---> q using gpi
IHsz: (ψ : Pattern) (wfψ : well_formed ψ), size' ψ ≤ sz → (EvS : EVarSet) (SvS : SVarSet), ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ p q wfψ wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ ⊆ SvS → Γ ⊢i ψ^[[evar:E↦p]] <---> ψ^[[evar:E↦q]] using gpi
ψ1, ψ2: Pattern
wfψ: well_formed (ψ1 $ ψ2)
Hsz: S (size' ψ1 + size' ψ2) ≤ S sz
EvS: EVarSet
SvS: SVarSet
i':= ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (ψ1 $ ψ2))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (ψ1 $ ψ2))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (ψ1 $ ψ2)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E (ψ1 $ ψ2) p q wfψ wfp wfq): ProofInfo
pile: ProofInfoLe i' gpi
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
E_in_EvS: E ∈ EvS
ψ_sub_EvS: free_evars (ψ1 $ ψ2) ⊆ EvS
p_sub_SvS: free_svars p ⊆ SvS
q_sub_SvS: free_svars q ⊆ SvS
ψ_sub_SvS: free_svars (ψ1 $ ψ2) ⊆ SvS
HEinψ: E ∈ free_evars (ψ1 $ ψ2)
wfψ1: well_formed ψ1 = true
H: size' ψ1 ≤ sz
wfψ2: well_formed ψ2 = true
H0: size' ψ2 ≤ sz
pf₁: ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ1)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ1)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ1) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ1 p q wfψ1 wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ1 ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ1 ⊆ SvS → Γ ⊢i ψ1^[[evar:E↦p]] <---> ψ1^[[evar:E↦q]] using gpi
free_svars ψ1 ⊆ SvS
Σ: Signature
sz: nat
Γ: Theory
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
E: evar
exdepth, mudepth: nat
gpi: ProofInfo
pf: Γ ⊢i p <---> q using gpi
IHsz: (ψ : Pattern) (wfψ : well_formed ψ), size' ψ ≤ sz → (EvS : EVarSet) (SvS : SVarSet), ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ p q wfψ wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ ⊆ SvS → Γ ⊢i ψ^[[evar:E↦p]] <---> ψ^[[evar:E↦q]] using gpi
ψ1, ψ2: Pattern
wfψ: well_formed (ψ1 $ ψ2)
Hsz: S (size' ψ1 + size' ψ2) ≤ S sz
EvS: EVarSet
SvS: SVarSet
i':= ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (ψ1 $ ψ2))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (ψ1 $ ψ2))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (ψ1 $ ψ2)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E (ψ1 $ ψ2) p q wfψ wfp wfq): ProofInfo
pile: ProofInfoLe i' gpi
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
E_in_EvS: E ∈ EvS
ψ_sub_EvS: free_evars (ψ1 $ ψ2) ⊆ EvS
p_sub_SvS: free_svars p ⊆ SvS
q_sub_SvS: free_svars q ⊆ SvS
ψ_sub_SvS: free_svars (ψ1 $ ψ2) ⊆ SvS
HEinψ: E ∈ free_evars (ψ1 $ ψ2)
wfψ1: well_formed ψ1 = true
H: size' ψ1 ≤ sz
wfψ2: well_formed ψ2 = true
H0: size' ψ2 ≤ sz
pf₁: Γ ⊢i ψ1^[[evar:E↦p]] <---> ψ1^[[evar:E↦q]] using gpi
Γ ⊢i ψ1^[[evar:E↦p]] $ ψ2^[[evar:E↦p]] <---> ψ1^[[evar:E↦q]] $ ψ2^[[evar:E↦q]] using gpi
Σ: Signature
sz: nat
Γ: Theory
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
E: evar
exdepth, mudepth: nat
gpi: ProofInfo
pf: Γ ⊢i p <---> q using gpi
IHsz: (ψ : Pattern) (wfψ : well_formed ψ), size' ψ ≤ sz → (EvS : EVarSet) (SvS : SVarSet), ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ p q wfψ wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ ⊆ SvS → Γ ⊢i ψ^[[evar:E↦p]] <---> ψ^[[evar:E↦q]] using gpi
ψ1, ψ2: Pattern
wfψ: well_formed (ψ1 $ ψ2)
Hsz: S (size' ψ1 + size' ψ2) ≤ S sz
EvS: EVarSet
SvS: SVarSet
i':= ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (ψ1 $ ψ2))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (ψ1 $ ψ2))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (ψ1 $ ψ2)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E (ψ1 $ ψ2) p q wfψ wfp wfq): ProofInfo
pile: ProofInfoLe i' gpi
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
E_in_EvS: E ∈ EvS
ψ_sub_EvS: free_evars (ψ1 $ ψ2) ⊆ EvS
p_sub_SvS: free_svars p ⊆ SvS
q_sub_SvS: free_svars q ⊆ SvS
ψ_sub_SvS: free_svars (ψ1 $ ψ2) ⊆ SvS
HEinψ: E ∈ free_evars (ψ1 $ ψ2)
wfψ1: well_formed ψ1 = true
H: size' ψ1 ≤ sz
wfψ2: well_formed ψ2 = true
H0: size' ψ2 ≤ sz
pf₁: ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ1)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ1)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ1) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ1 p q wfψ1 wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ1 ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ1 ⊆ SvS → Γ ⊢i ψ1^[[evar:E↦p]] <---> ψ1^[[evar:E↦q]] using gpi

E ∈ EvS
exact E_in_EvS.
Σ: Signature
sz: nat
Γ: Theory
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
E: evar
exdepth, mudepth: nat
gpi: ProofInfo
pf: Γ ⊢i p <---> q using gpi
IHsz: (ψ : Pattern) (wfψ : well_formed ψ), size' ψ ≤ sz → (EvS : EVarSet) (SvS : SVarSet), ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ p q wfψ wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ ⊆ SvS → Γ ⊢i ψ^[[evar:E↦p]] <---> ψ^[[evar:E↦q]] using gpi
ψ1, ψ2: Pattern
wfψ: well_formed (ψ1 $ ψ2)
Hsz: S (size' ψ1 + size' ψ2) ≤ S sz
EvS: EVarSet
SvS: SVarSet
i':= ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (ψ1 $ ψ2))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (ψ1 $ ψ2))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (ψ1 $ ψ2)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E (ψ1 $ ψ2) p q wfψ wfp wfq): ProofInfo
pile: ProofInfoLe i' gpi
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
E_in_EvS: E ∈ EvS
ψ_sub_EvS: free_evars (ψ1 $ ψ2) ⊆ EvS
p_sub_SvS: free_svars p ⊆ SvS
q_sub_SvS: free_svars q ⊆ SvS
ψ_sub_SvS: free_svars (ψ1 $ ψ2) ⊆ SvS
HEinψ: E ∈ free_evars (ψ1 $ ψ2)
wfψ1: well_formed ψ1 = true
H: size' ψ1 ≤ sz
wfψ2: well_formed ψ2 = true
H0: size' ψ2 ≤ sz
pf₁: ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ1)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ1)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ1) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ1 p q wfψ1 wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ1 ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ1 ⊆ SvS → Γ ⊢i ψ1^[[evar:E↦p]] <---> ψ1^[[evar:E↦q]] using gpi

free_evars ψ1 ⊆ EvS
Σ: Signature
sz: nat
Γ: Theory
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
E: evar
exdepth, mudepth: nat
gpi: ProofInfo
pf: Γ ⊢i p <---> q using gpi
IHsz: (ψ : Pattern) (wfψ : well_formed ψ), size' ψ ≤ sz → (EvS : EVarSet) (SvS : SVarSet), ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ p q wfψ wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ ⊆ SvS → Γ ⊢i ψ^[[evar:E↦p]] <---> ψ^[[evar:E↦q]] using gpi
ψ1, ψ2: Pattern
wfψ: well_formed (ψ1 $ ψ2)
Hsz: S (size' ψ1 + size' ψ2) ≤ S sz
EvS: EVarSet
SvS: SVarSet
i':= ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (ψ1 $ ψ2))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (ψ1 $ ψ2))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (ψ1 $ ψ2)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E (ψ1 $ ψ2) p q wfψ wfp wfq): ProofInfo
pile: ProofInfoLe i' gpi
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
E_in_EvS: E ∈ EvS
ψ_sub_EvS: free_evars (ψ1 $ ψ2) ⊆ EvS
p_sub_SvS: free_svars p ⊆ SvS
q_sub_SvS: free_svars q ⊆ SvS
ψ_sub_SvS: free_svars (ψ1 $ ψ2) ⊆ SvS
HEinψ: E ∈ free_evars (ψ1 $ ψ2)
wfψ1: well_formed ψ1 = true
H: size' ψ1 ≤ sz
wfψ2: well_formed ψ2 = true
H0: size' ψ2 ≤ sz
pf₁: ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ1)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ1)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ1) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ1 p q wfψ1 wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ1 ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ1 ⊆ SvS → Γ ⊢i ψ1^[[evar:E↦p]] <---> ψ1^[[evar:E↦q]] using gpi
free_svars p ⊆ SvS
Σ: Signature
sz: nat
Γ: Theory
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
E: evar
exdepth, mudepth: nat
gpi: ProofInfo
pf: Γ ⊢i p <---> q using gpi
IHsz: (ψ : Pattern) (wfψ : well_formed ψ), size' ψ ≤ sz → (EvS : EVarSet) (SvS : SVarSet), ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ p q wfψ wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ ⊆ SvS → Γ ⊢i ψ^[[evar:E↦p]] <---> ψ^[[evar:E↦q]] using gpi
ψ1, ψ2: Pattern
wfψ: well_formed (ψ1 $ ψ2)
Hsz: S (size' ψ1 + size' ψ2) ≤ S sz
EvS: EVarSet
SvS: SVarSet
i':= ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (ψ1 $ ψ2))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (ψ1 $ ψ2))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (ψ1 $ ψ2)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E (ψ1 $ ψ2) p q wfψ wfp wfq): ProofInfo
pile: ProofInfoLe i' gpi
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
E_in_EvS: E ∈ EvS
ψ_sub_EvS: free_evars (ψ1 $ ψ2) ⊆ EvS
p_sub_SvS: free_svars p ⊆ SvS
q_sub_SvS: free_svars q ⊆ SvS
ψ_sub_SvS: free_svars (ψ1 $ ψ2) ⊆ SvS
HEinψ: E ∈ free_evars (ψ1 $ ψ2)
wfψ1: well_formed ψ1 = true
H: size' ψ1 ≤ sz
wfψ2: well_formed ψ2 = true
H0: size' ψ2 ≤ sz
pf₁: ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ1)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ1)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ1) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ1 p q wfψ1 wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ1 ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ1 ⊆ SvS → Γ ⊢i ψ1^[[evar:E↦p]] <---> ψ1^[[evar:E↦q]] using gpi
free_svars q ⊆ SvS
Σ: Signature
sz: nat
Γ: Theory
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
E: evar
exdepth, mudepth: nat
gpi: ProofInfo
pf: Γ ⊢i p <---> q using gpi
IHsz: (ψ : Pattern) (wfψ : well_formed ψ), size' ψ ≤ sz → (EvS : EVarSet) (SvS : SVarSet), ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ p q wfψ wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ ⊆ SvS → Γ ⊢i ψ^[[evar:E↦p]] <---> ψ^[[evar:E↦q]] using gpi
ψ1, ψ2: Pattern
wfψ: well_formed (ψ1 $ ψ2)
Hsz: S (size' ψ1 + size' ψ2) ≤ S sz
EvS: EVarSet
SvS: SVarSet
i':= ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (ψ1 $ ψ2))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (ψ1 $ ψ2))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (ψ1 $ ψ2)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E (ψ1 $ ψ2) p q wfψ wfp wfq): ProofInfo
pile: ProofInfoLe i' gpi
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
E_in_EvS: E ∈ EvS
ψ_sub_EvS: free_evars (ψ1 $ ψ2) ⊆ EvS
p_sub_SvS: free_svars p ⊆ SvS
q_sub_SvS: free_svars q ⊆ SvS
ψ_sub_SvS: free_svars (ψ1 $ ψ2) ⊆ SvS
HEinψ: E ∈ free_evars (ψ1 $ ψ2)
wfψ1: well_formed ψ1 = true
H: size' ψ1 ≤ sz
wfψ2: well_formed ψ2 = true
H0: size' ψ2 ≤ sz
pf₁: ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ1)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ1)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ1) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ1 p q wfψ1 wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ1 ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ1 ⊆ SvS → Γ ⊢i ψ1^[[evar:E↦p]] <---> ψ1^[[evar:E↦q]] using gpi
free_svars ψ1 ⊆ SvS
Σ: Signature
sz: nat
Γ: Theory
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
E: evar
exdepth, mudepth: nat
gpi: ProofInfo
pf: Γ ⊢i p <---> q using gpi
IHsz: (ψ : Pattern) (wfψ : well_formed ψ), size' ψ ≤ sz → (EvS : EVarSet) (SvS : SVarSet), ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ p q wfψ wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ ⊆ SvS → Γ ⊢i ψ^[[evar:E↦p]] <---> ψ^[[evar:E↦q]] using gpi
ψ1, ψ2: Pattern
wfψ: well_formed (ψ1 $ ψ2)
Hsz: S (size' ψ1 + size' ψ2) ≤ S sz
EvS: EVarSet
SvS: SVarSet
i':= ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (ψ1 $ ψ2))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (ψ1 $ ψ2))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (ψ1 $ ψ2)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E (ψ1 $ ψ2) p q wfψ wfp wfq): ProofInfo
pile: ProofInfoLe i' gpi
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
E_in_EvS: E ∈ EvS
ψ_sub_EvS: free_evars (ψ1 $ ψ2) ⊆ EvS
p_sub_SvS: free_svars p ⊆ SvS
q_sub_SvS: free_svars q ⊆ SvS
ψ_sub_SvS: free_svars (ψ1 $ ψ2) ⊆ SvS
HEinψ: E ∈ free_evars (ψ1 $ ψ2)
wfψ1: well_formed ψ1 = true
H: size' ψ1 ≤ sz
wfψ2: well_formed ψ2 = true
H0: size' ψ2 ≤ sz
pf₁: Γ ⊢i ψ1^[[evar:E↦p]] <---> ψ1^[[evar:E↦q]] using gpi
Γ ⊢i ψ1^[[evar:E↦p]] $ ψ2^[[evar:E↦p]] <---> ψ1^[[evar:E↦q]] $ ψ2^[[evar:E↦q]] using gpi
Σ: Signature
sz: nat
Γ: Theory
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
E: evar
exdepth, mudepth: nat
gpi: ProofInfo
pf: Γ ⊢i p <---> q using gpi
IHsz: (ψ : Pattern) (wfψ : well_formed ψ), size' ψ ≤ sz → (EvS : EVarSet) (SvS : SVarSet), ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ p q wfψ wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ ⊆ SvS → Γ ⊢i ψ^[[evar:E↦p]] <---> ψ^[[evar:E↦q]] using gpi
ψ1, ψ2: Pattern
wfψ: well_formed (ψ1 $ ψ2)
Hsz: S (size' ψ1 + size' ψ2) ≤ S sz
EvS: EVarSet
SvS: SVarSet
i':= ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (ψ1 $ ψ2))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (ψ1 $ ψ2))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (ψ1 $ ψ2)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E (ψ1 $ ψ2) p q wfψ wfp wfq): ProofInfo
pile: ProofInfoLe i' gpi
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
E_in_EvS: E ∈ EvS
ψ_sub_EvS: free_evars (ψ1 $ ψ2) ⊆ EvS
p_sub_SvS: free_svars p ⊆ SvS
q_sub_SvS: free_svars q ⊆ SvS
ψ_sub_SvS: free_svars (ψ1 $ ψ2) ⊆ SvS
HEinψ: E ∈ free_evars (ψ1 $ ψ2)
wfψ1: well_formed ψ1 = true
H: size' ψ1 ≤ sz
wfψ2: well_formed ψ2 = true
H0: size' ψ2 ≤ sz
pf₁: ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ1)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ1)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ1) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ1 p q wfψ1 wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ1 ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ1 ⊆ SvS → Γ ⊢i ψ1^[[evar:E↦p]] <---> ψ1^[[evar:E↦q]] using gpi

free_evars ψ1 ⊆ EvS
abstract( simpl in ψ_sub_EvS; clear -ψ_sub_EvS; set_solver ).
Σ: Signature
sz: nat
Γ: Theory
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
E: evar
exdepth, mudepth: nat
gpi: ProofInfo
pf: Γ ⊢i p <---> q using gpi
IHsz: (ψ : Pattern) (wfψ : well_formed ψ), size' ψ ≤ sz → (EvS : EVarSet) (SvS : SVarSet), ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ p q wfψ wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ ⊆ SvS → Γ ⊢i ψ^[[evar:E↦p]] <---> ψ^[[evar:E↦q]] using gpi
ψ1, ψ2: Pattern
wfψ: well_formed (ψ1 $ ψ2)
Hsz: S (size' ψ1 + size' ψ2) ≤ S sz
EvS: EVarSet
SvS: SVarSet
i':= ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (ψ1 $ ψ2))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (ψ1 $ ψ2))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (ψ1 $ ψ2)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E (ψ1 $ ψ2) p q wfψ wfp wfq): ProofInfo
pile: ProofInfoLe i' gpi
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
E_in_EvS: E ∈ EvS
ψ_sub_EvS: free_evars (ψ1 $ ψ2) ⊆ EvS
p_sub_SvS: free_svars p ⊆ SvS
q_sub_SvS: free_svars q ⊆ SvS
ψ_sub_SvS: free_svars (ψ1 $ ψ2) ⊆ SvS
HEinψ: E ∈ free_evars (ψ1 $ ψ2)
wfψ1: well_formed ψ1 = true
H: size' ψ1 ≤ sz
wfψ2: well_formed ψ2 = true
H0: size' ψ2 ≤ sz
pf₁: ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ1)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ1)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ1) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ1 p q wfψ1 wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ1 ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ1 ⊆ SvS → Γ ⊢i ψ1^[[evar:E↦p]] <---> ψ1^[[evar:E↦q]] using gpi

free_svars p ⊆ SvS
Σ: Signature
sz: nat
Γ: Theory
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
E: evar
exdepth, mudepth: nat
gpi: ProofInfo
pf: Γ ⊢i p <---> q using gpi
IHsz: (ψ : Pattern) (wfψ : well_formed ψ), size' ψ ≤ sz → (EvS : EVarSet) (SvS : SVarSet), ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ p q wfψ wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ ⊆ SvS → Γ ⊢i ψ^[[evar:E↦p]] <---> ψ^[[evar:E↦q]] using gpi
ψ1, ψ2: Pattern
wfψ: well_formed (ψ1 $ ψ2)
Hsz: S (size' ψ1 + size' ψ2) ≤ S sz
EvS: EVarSet
SvS: SVarSet
i':= ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (ψ1 $ ψ2))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (ψ1 $ ψ2))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (ψ1 $ ψ2)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E (ψ1 $ ψ2) p q wfψ wfp wfq): ProofInfo
pile: ProofInfoLe i' gpi
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
E_in_EvS: E ∈ EvS
ψ_sub_EvS: free_evars (ψ1 $ ψ2) ⊆ EvS
p_sub_SvS: free_svars p ⊆ SvS
q_sub_SvS: free_svars q ⊆ SvS
ψ_sub_SvS: free_svars (ψ1 $ ψ2) ⊆ SvS
HEinψ: E ∈ free_evars (ψ1 $ ψ2)
wfψ1: well_formed ψ1 = true
H: size' ψ1 ≤ sz
wfψ2: well_formed ψ2 = true
H0: size' ψ2 ≤ sz
pf₁: ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ1)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ1)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ1) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ1 p q wfψ1 wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ1 ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ1 ⊆ SvS → Γ ⊢i ψ1^[[evar:E↦p]] <---> ψ1^[[evar:E↦q]] using gpi
free_svars q ⊆ SvS
Σ: Signature
sz: nat
Γ: Theory
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
E: evar
exdepth, mudepth: nat
gpi: ProofInfo
pf: Γ ⊢i p <---> q using gpi
IHsz: (ψ : Pattern) (wfψ : well_formed ψ), size' ψ ≤ sz → (EvS : EVarSet) (SvS : SVarSet), ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ p q wfψ wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ ⊆ SvS → Γ ⊢i ψ^[[evar:E↦p]] <---> ψ^[[evar:E↦q]] using gpi
ψ1, ψ2: Pattern
wfψ: well_formed (ψ1 $ ψ2)
Hsz: S (size' ψ1 + size' ψ2) ≤ S sz
EvS: EVarSet
SvS: SVarSet
i':= ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (ψ1 $ ψ2))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (ψ1 $ ψ2))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (ψ1 $ ψ2)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E (ψ1 $ ψ2) p q wfψ wfp wfq): ProofInfo
pile: ProofInfoLe i' gpi
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
E_in_EvS: E ∈ EvS
ψ_sub_EvS: free_evars (ψ1 $ ψ2) ⊆ EvS
p_sub_SvS: free_svars p ⊆ SvS
q_sub_SvS: free_svars q ⊆ SvS
ψ_sub_SvS: free_svars (ψ1 $ ψ2) ⊆ SvS
HEinψ: E ∈ free_evars (ψ1 $ ψ2)
wfψ1: well_formed ψ1 = true
H: size' ψ1 ≤ sz
wfψ2: well_formed ψ2 = true
H0: size' ψ2 ≤ sz
pf₁: ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ1)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ1)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ1) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ1 p q wfψ1 wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ1 ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ1 ⊆ SvS → Γ ⊢i ψ1^[[evar:E↦p]] <---> ψ1^[[evar:E↦q]] using gpi
free_svars ψ1 ⊆ SvS
Σ: Signature
sz: nat
Γ: Theory
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
E: evar
exdepth, mudepth: nat
gpi: ProofInfo
pf: Γ ⊢i p <---> q using gpi
IHsz: (ψ : Pattern) (wfψ : well_formed ψ), size' ψ ≤ sz → (EvS : EVarSet) (SvS : SVarSet), ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ p q wfψ wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ ⊆ SvS → Γ ⊢i ψ^[[evar:E↦p]] <---> ψ^[[evar:E↦q]] using gpi
ψ1, ψ2: Pattern
wfψ: well_formed (ψ1 $ ψ2)
Hsz: S (size' ψ1 + size' ψ2) ≤ S sz
EvS: EVarSet
SvS: SVarSet
i':= ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (ψ1 $ ψ2))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (ψ1 $ ψ2))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (ψ1 $ ψ2)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E (ψ1 $ ψ2) p q wfψ wfp wfq): ProofInfo
pile: ProofInfoLe i' gpi
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
E_in_EvS: E ∈ EvS
ψ_sub_EvS: free_evars (ψ1 $ ψ2) ⊆ EvS
p_sub_SvS: free_svars p ⊆ SvS
q_sub_SvS: free_svars q ⊆ SvS
ψ_sub_SvS: free_svars (ψ1 $ ψ2) ⊆ SvS
HEinψ: E ∈ free_evars (ψ1 $ ψ2)
wfψ1: well_formed ψ1 = true
H: size' ψ1 ≤ sz
wfψ2: well_formed ψ2 = true
H0: size' ψ2 ≤ sz
pf₁: Γ ⊢i ψ1^[[evar:E↦p]] <---> ψ1^[[evar:E↦q]] using gpi
Γ ⊢i ψ1^[[evar:E↦p]] $ ψ2^[[evar:E↦p]] <---> ψ1^[[evar:E↦q]] $ ψ2^[[evar:E↦q]] using gpi
Σ: Signature
sz: nat
Γ: Theory
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
E: evar
exdepth, mudepth: nat
gpi: ProofInfo
pf: Γ ⊢i p <---> q using gpi
IHsz: (ψ : Pattern) (wfψ : well_formed ψ), size' ψ ≤ sz → (EvS : EVarSet) (SvS : SVarSet), ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ p q wfψ wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ ⊆ SvS → Γ ⊢i ψ^[[evar:E↦p]] <---> ψ^[[evar:E↦q]] using gpi
ψ1, ψ2: Pattern
wfψ: well_formed (ψ1 $ ψ2)
Hsz: S (size' ψ1 + size' ψ2) ≤ S sz
EvS: EVarSet
SvS: SVarSet
i':= ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (ψ1 $ ψ2))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (ψ1 $ ψ2))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (ψ1 $ ψ2)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E (ψ1 $ ψ2) p q wfψ wfp wfq): ProofInfo
pile: ProofInfoLe i' gpi
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
E_in_EvS: E ∈ EvS
ψ_sub_EvS: free_evars (ψ1 $ ψ2) ⊆ EvS
p_sub_SvS: free_svars p ⊆ SvS
q_sub_SvS: free_svars q ⊆ SvS
ψ_sub_SvS: free_svars (ψ1 $ ψ2) ⊆ SvS
HEinψ: E ∈ free_evars (ψ1 $ ψ2)
wfψ1: well_formed ψ1 = true
H: size' ψ1 ≤ sz
wfψ2: well_formed ψ2 = true
H0: size' ψ2 ≤ sz
pf₁: ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ1)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ1)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ1) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ1 p q wfψ1 wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ1 ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ1 ⊆ SvS → Γ ⊢i ψ1^[[evar:E↦p]] <---> ψ1^[[evar:E↦q]] using gpi

free_svars p ⊆ SvS
exact p_sub_SvS.
Σ: Signature
sz: nat
Γ: Theory
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
E: evar
exdepth, mudepth: nat
gpi: ProofInfo
pf: Γ ⊢i p <---> q using gpi
IHsz: (ψ : Pattern) (wfψ : well_formed ψ), size' ψ ≤ sz → (EvS : EVarSet) (SvS : SVarSet), ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ p q wfψ wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ ⊆ SvS → Γ ⊢i ψ^[[evar:E↦p]] <---> ψ^[[evar:E↦q]] using gpi
ψ1, ψ2: Pattern
wfψ: well_formed (ψ1 $ ψ2)
Hsz: S (size' ψ1 + size' ψ2) ≤ S sz
EvS: EVarSet
SvS: SVarSet
i':= ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (ψ1 $ ψ2))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (ψ1 $ ψ2))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (ψ1 $ ψ2)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E (ψ1 $ ψ2) p q wfψ wfp wfq): ProofInfo
pile: ProofInfoLe i' gpi
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
E_in_EvS: E ∈ EvS
ψ_sub_EvS: free_evars (ψ1 $ ψ2) ⊆ EvS
p_sub_SvS: free_svars p ⊆ SvS
q_sub_SvS: free_svars q ⊆ SvS
ψ_sub_SvS: free_svars (ψ1 $ ψ2) ⊆ SvS
HEinψ: E ∈ free_evars (ψ1 $ ψ2)
wfψ1: well_formed ψ1 = true
H: size' ψ1 ≤ sz
wfψ2: well_formed ψ2 = true
H0: size' ψ2 ≤ sz
pf₁: ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ1)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ1)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ1) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ1 p q wfψ1 wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ1 ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ1 ⊆ SvS → Γ ⊢i ψ1^[[evar:E↦p]] <---> ψ1^[[evar:E↦q]] using gpi

free_svars q ⊆ SvS
Σ: Signature
sz: nat
Γ: Theory
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
E: evar
exdepth, mudepth: nat
gpi: ProofInfo
pf: Γ ⊢i p <---> q using gpi
IHsz: (ψ : Pattern) (wfψ : well_formed ψ), size' ψ ≤ sz → (EvS : EVarSet) (SvS : SVarSet), ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ p q wfψ wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ ⊆ SvS → Γ ⊢i ψ^[[evar:E↦p]] <---> ψ^[[evar:E↦q]] using gpi
ψ1, ψ2: Pattern
wfψ: well_formed (ψ1 $ ψ2)
Hsz: S (size' ψ1 + size' ψ2) ≤ S sz
EvS: EVarSet
SvS: SVarSet
i':= ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (ψ1 $ ψ2))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (ψ1 $ ψ2))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (ψ1 $ ψ2)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E (ψ1 $ ψ2) p q wfψ wfp wfq): ProofInfo
pile: ProofInfoLe i' gpi
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
E_in_EvS: E ∈ EvS
ψ_sub_EvS: free_evars (ψ1 $ ψ2) ⊆ EvS
p_sub_SvS: free_svars p ⊆ SvS
q_sub_SvS: free_svars q ⊆ SvS
ψ_sub_SvS: free_svars (ψ1 $ ψ2) ⊆ SvS
HEinψ: E ∈ free_evars (ψ1 $ ψ2)
wfψ1: well_formed ψ1 = true
H: size' ψ1 ≤ sz
wfψ2: well_formed ψ2 = true
H0: size' ψ2 ≤ sz
pf₁: ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ1)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ1)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ1) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ1 p q wfψ1 wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ1 ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ1 ⊆ SvS → Γ ⊢i ψ1^[[evar:E↦p]] <---> ψ1^[[evar:E↦q]] using gpi
free_svars ψ1 ⊆ SvS
Σ: Signature
sz: nat
Γ: Theory
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
E: evar
exdepth, mudepth: nat
gpi: ProofInfo
pf: Γ ⊢i p <---> q using gpi
IHsz: (ψ : Pattern) (wfψ : well_formed ψ), size' ψ ≤ sz → (EvS : EVarSet) (SvS : SVarSet), ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ p q wfψ wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ ⊆ SvS → Γ ⊢i ψ^[[evar:E↦p]] <---> ψ^[[evar:E↦q]] using gpi
ψ1, ψ2: Pattern
wfψ: well_formed (ψ1 $ ψ2)
Hsz: S (size' ψ1 + size' ψ2) ≤ S sz
EvS: EVarSet
SvS: SVarSet
i':= ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (ψ1 $ ψ2))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (ψ1 $ ψ2))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (ψ1 $ ψ2)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E (ψ1 $ ψ2) p q wfψ wfp wfq): ProofInfo
pile: ProofInfoLe i' gpi
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
E_in_EvS: E ∈ EvS
ψ_sub_EvS: free_evars (ψ1 $ ψ2) ⊆ EvS
p_sub_SvS: free_svars p ⊆ SvS
q_sub_SvS: free_svars q ⊆ SvS
ψ_sub_SvS: free_svars (ψ1 $ ψ2) ⊆ SvS
HEinψ: E ∈ free_evars (ψ1 $ ψ2)
wfψ1: well_formed ψ1 = true
H: size' ψ1 ≤ sz
wfψ2: well_formed ψ2 = true
H0: size' ψ2 ≤ sz
pf₁: Γ ⊢i ψ1^[[evar:E↦p]] <---> ψ1^[[evar:E↦q]] using gpi
Γ ⊢i ψ1^[[evar:E↦p]] $ ψ2^[[evar:E↦p]] <---> ψ1^[[evar:E↦q]] $ ψ2^[[evar:E↦q]] using gpi
Σ: Signature
sz: nat
Γ: Theory
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
E: evar
exdepth, mudepth: nat
gpi: ProofInfo
pf: Γ ⊢i p <---> q using gpi
IHsz: (ψ : Pattern) (wfψ : well_formed ψ), size' ψ ≤ sz → (EvS : EVarSet) (SvS : SVarSet), ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ p q wfψ wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ ⊆ SvS → Γ ⊢i ψ^[[evar:E↦p]] <---> ψ^[[evar:E↦q]] using gpi
ψ1, ψ2: Pattern
wfψ: well_formed (ψ1 $ ψ2)
Hsz: S (size' ψ1 + size' ψ2) ≤ S sz
EvS: EVarSet
SvS: SVarSet
i':= ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (ψ1 $ ψ2))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (ψ1 $ ψ2))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (ψ1 $ ψ2)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E (ψ1 $ ψ2) p q wfψ wfp wfq): ProofInfo
pile: ProofInfoLe i' gpi
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
E_in_EvS: E ∈ EvS
ψ_sub_EvS: free_evars (ψ1 $ ψ2) ⊆ EvS
p_sub_SvS: free_svars p ⊆ SvS
q_sub_SvS: free_svars q ⊆ SvS
ψ_sub_SvS: free_svars (ψ1 $ ψ2) ⊆ SvS
HEinψ: E ∈ free_evars (ψ1 $ ψ2)
wfψ1: well_formed ψ1 = true
H: size' ψ1 ≤ sz
wfψ2: well_formed ψ2 = true
H0: size' ψ2 ≤ sz
pf₁: ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ1)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ1)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ1) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ1 p q wfψ1 wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ1 ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ1 ⊆ SvS → Γ ⊢i ψ1^[[evar:E↦p]] <---> ψ1^[[evar:E↦q]] using gpi

free_svars q ⊆ SvS
exact q_sub_SvS.
Σ: Signature
sz: nat
Γ: Theory
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
E: evar
exdepth, mudepth: nat
gpi: ProofInfo
pf: Γ ⊢i p <---> q using gpi
IHsz: (ψ : Pattern) (wfψ : well_formed ψ), size' ψ ≤ sz → (EvS : EVarSet) (SvS : SVarSet), ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ p q wfψ wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ ⊆ SvS → Γ ⊢i ψ^[[evar:E↦p]] <---> ψ^[[evar:E↦q]] using gpi
ψ1, ψ2: Pattern
wfψ: well_formed (ψ1 $ ψ2)
Hsz: S (size' ψ1 + size' ψ2) ≤ S sz
EvS: EVarSet
SvS: SVarSet
i':= ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (ψ1 $ ψ2))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (ψ1 $ ψ2))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (ψ1 $ ψ2)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E (ψ1 $ ψ2) p q wfψ wfp wfq): ProofInfo
pile: ProofInfoLe i' gpi
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
E_in_EvS: E ∈ EvS
ψ_sub_EvS: free_evars (ψ1 $ ψ2) ⊆ EvS
p_sub_SvS: free_svars p ⊆ SvS
q_sub_SvS: free_svars q ⊆ SvS
ψ_sub_SvS: free_svars (ψ1 $ ψ2) ⊆ SvS
HEinψ: E ∈ free_evars (ψ1 $ ψ2)
wfψ1: well_formed ψ1 = true
H: size' ψ1 ≤ sz
wfψ2: well_formed ψ2 = true
H0: size' ψ2 ≤ sz
pf₁: ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ1)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ1)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ1) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ1 p q wfψ1 wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ1 ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ1 ⊆ SvS → Γ ⊢i ψ1^[[evar:E↦p]] <---> ψ1^[[evar:E↦q]] using gpi

free_svars ψ1 ⊆ SvS
Σ: Signature
sz: nat
Γ: Theory
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
E: evar
exdepth, mudepth: nat
gpi: ProofInfo
pf: Γ ⊢i p <---> q using gpi
IHsz: (ψ : Pattern) (wfψ : well_formed ψ), size' ψ ≤ sz → (EvS : EVarSet) (SvS : SVarSet), ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ p q wfψ wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ ⊆ SvS → Γ ⊢i ψ^[[evar:E↦p]] <---> ψ^[[evar:E↦q]] using gpi
ψ1, ψ2: Pattern
wfψ: well_formed (ψ1 $ ψ2)
Hsz: S (size' ψ1 + size' ψ2) ≤ S sz
EvS: EVarSet
SvS: SVarSet
i':= ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (ψ1 $ ψ2))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (ψ1 $ ψ2))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (ψ1 $ ψ2)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E (ψ1 $ ψ2) p q wfψ wfp wfq): ProofInfo
pile: ProofInfoLe i' gpi
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
E_in_EvS: E ∈ EvS
ψ_sub_EvS: free_evars (ψ1 $ ψ2) ⊆ EvS
p_sub_SvS: free_svars p ⊆ SvS
q_sub_SvS: free_svars q ⊆ SvS
ψ_sub_SvS: free_svars (ψ1 $ ψ2) ⊆ SvS
HEinψ: E ∈ free_evars (ψ1 $ ψ2)
wfψ1: well_formed ψ1 = true
H: size' ψ1 ≤ sz
wfψ2: well_formed ψ2 = true
H0: size' ψ2 ≤ sz
pf₁: Γ ⊢i ψ1^[[evar:E↦p]] <---> ψ1^[[evar:E↦q]] using gpi
Γ ⊢i ψ1^[[evar:E↦p]] $ ψ2^[[evar:E↦p]] <---> ψ1^[[evar:E↦q]] $ ψ2^[[evar:E↦q]] using gpi
Σ: Signature
sz: nat
Γ: Theory
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
E: evar
exdepth, mudepth: nat
gpi: ProofInfo
pf: Γ ⊢i p <---> q using gpi
IHsz: (ψ : Pattern) (wfψ : well_formed ψ), size' ψ ≤ sz → (EvS : EVarSet) (SvS : SVarSet), ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ p q wfψ wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ ⊆ SvS → Γ ⊢i ψ^[[evar:E↦p]] <---> ψ^[[evar:E↦q]] using gpi
ψ1, ψ2: Pattern
wfψ: well_formed (ψ1 $ ψ2)
Hsz: S (size' ψ1 + size' ψ2) ≤ S sz
EvS: EVarSet
SvS: SVarSet
i':= ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (ψ1 $ ψ2))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (ψ1 $ ψ2))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (ψ1 $ ψ2)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E (ψ1 $ ψ2) p q wfψ wfp wfq): ProofInfo
pile: ProofInfoLe i' gpi
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
E_in_EvS: E ∈ EvS
ψ_sub_EvS: free_evars (ψ1 $ ψ2) ⊆ EvS
p_sub_SvS: free_svars p ⊆ SvS
q_sub_SvS: free_svars q ⊆ SvS
ψ_sub_SvS: free_svars (ψ1 $ ψ2) ⊆ SvS
HEinψ: E ∈ free_evars (ψ1 $ ψ2)
wfψ1: well_formed ψ1 = true
H: size' ψ1 ≤ sz
wfψ2: well_formed ψ2 = true
H0: size' ψ2 ≤ sz
pf₁: ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ1)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ1)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ1) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ1 p q wfψ1 wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ1 ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ1 ⊆ SvS → Γ ⊢i ψ1^[[evar:E↦p]] <---> ψ1^[[evar:E↦q]] using gpi

free_svars ψ1 ⊆ SvS
abstract( simpl in ψ_sub_SvS; clear -ψ_sub_SvS; set_solver ).
Σ: Signature
sz: nat
Γ: Theory
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
E: evar
exdepth, mudepth: nat
gpi: ProofInfo
pf: Γ ⊢i p <---> q using gpi
IHsz: (ψ : Pattern) (wfψ : well_formed ψ), size' ψ ≤ sz → (EvS : EVarSet) (SvS : SVarSet), ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ p q wfψ wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ ⊆ SvS → Γ ⊢i ψ^[[evar:E↦p]] <---> ψ^[[evar:E↦q]] using gpi
ψ1, ψ2: Pattern
wfψ: well_formed (ψ1 $ ψ2)
Hsz: S (size' ψ1 + size' ψ2) ≤ S sz
EvS: EVarSet
SvS: SVarSet
i':= ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (ψ1 $ ψ2))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (ψ1 $ ψ2))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (ψ1 $ ψ2)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E (ψ1 $ ψ2) p q wfψ wfp wfq): ProofInfo
pile: ProofInfoLe i' gpi
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
E_in_EvS: E ∈ EvS
ψ_sub_EvS: free_evars (ψ1 $ ψ2) ⊆ EvS
p_sub_SvS: free_svars p ⊆ SvS
q_sub_SvS: free_svars q ⊆ SvS
ψ_sub_SvS: free_svars (ψ1 $ ψ2) ⊆ SvS
HEinψ: E ∈ free_evars (ψ1 $ ψ2)
wfψ1: well_formed ψ1 = true
H: size' ψ1 ≤ sz
wfψ2: well_formed ψ2 = true
H0: size' ψ2 ≤ sz
pf₁: Γ ⊢i ψ1^[[evar:E↦p]] <---> ψ1^[[evar:E↦q]] using gpi

Γ ⊢i ψ1^[[evar:E↦p]] $ ψ2^[[evar:E↦p]] <---> ψ1^[[evar:E↦q]] $ ψ2^[[evar:E↦q]] using gpi
Σ: Signature
sz: nat
Γ: Theory
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
E: evar
exdepth, mudepth: nat
gpi: ProofInfo
pf: Γ ⊢i p <---> q using gpi
IHsz: (ψ : Pattern) (wfψ : well_formed ψ), size' ψ ≤ sz → (EvS : EVarSet) (SvS : SVarSet), ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ p q wfψ wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ ⊆ SvS → Γ ⊢i ψ^[[evar:E↦p]] <---> ψ^[[evar:E↦q]] using gpi
ψ1, ψ2: Pattern
wfψ: well_formed (ψ1 $ ψ2)
Hsz: S (size' ψ1 + size' ψ2) ≤ S sz
EvS: EVarSet
SvS: SVarSet
i':= ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (ψ1 $ ψ2))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (ψ1 $ ψ2))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (ψ1 $ ψ2)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E (ψ1 $ ψ2) p q wfψ wfp wfq): ProofInfo
pile: ProofInfoLe i' gpi
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
E_in_EvS: E ∈ EvS
ψ_sub_EvS: free_evars (ψ1 $ ψ2) ⊆ EvS
p_sub_SvS: free_svars p ⊆ SvS
q_sub_SvS: free_svars q ⊆ SvS
ψ_sub_SvS: free_svars (ψ1 $ ψ2) ⊆ SvS
HEinψ: E ∈ free_evars (ψ1 $ ψ2)
wfψ1: well_formed ψ1 = true
H: size' ψ1 ≤ sz
wfψ2: well_formed ψ2 = true
H0: size' ψ2 ≤ sz
pf₁: Γ ⊢i ψ1^[[evar:E↦p]] <---> ψ1^[[evar:E↦q]] using gpi
pf₂: (EvS : EVarSet) (SvS : SVarSet), ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ2)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ2)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ2) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ2 p q wfψ2 wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ2 ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ2 ⊆ SvS → Γ ⊢i ψ2^[[evar:E↦p]] <---> ψ2^[[evar:E↦q]] using gpi

Γ ⊢i ψ1^[[evar:E↦p]] $ ψ2^[[evar:E↦p]] <---> ψ1^[[evar:E↦q]] $ ψ2^[[evar:E↦q]] using gpi
Σ: Signature
sz: nat
Γ: Theory
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
E: evar
exdepth, mudepth: nat
gpi: ProofInfo
pf: Γ ⊢i p <---> q using gpi
IHsz: (ψ : Pattern) (wfψ : well_formed ψ), size' ψ ≤ sz → (EvS : EVarSet) (SvS : SVarSet), ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ p q wfψ wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ ⊆ SvS → Γ ⊢i ψ^[[evar:E↦p]] <---> ψ^[[evar:E↦q]] using gpi
ψ1, ψ2: Pattern
wfψ: well_formed (ψ1 $ ψ2)
Hsz: S (size' ψ1 + size' ψ2) ≤ S sz
EvS: EVarSet
SvS: SVarSet
i':= ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (ψ1 $ ψ2))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (ψ1 $ ψ2))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (ψ1 $ ψ2)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E (ψ1 $ ψ2) p q wfψ wfp wfq): ProofInfo
pile: ProofInfoLe i' gpi
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
E_in_EvS: E ∈ EvS
ψ_sub_EvS: free_evars (ψ1 $ ψ2) ⊆ EvS
p_sub_SvS: free_svars p ⊆ SvS
q_sub_SvS: free_svars q ⊆ SvS
ψ_sub_SvS: free_svars (ψ1 $ ψ2) ⊆ SvS
HEinψ: E ∈ free_evars (ψ1 $ ψ2)
wfψ1: well_formed ψ1 = true
H: size' ψ1 ≤ sz
wfψ2: well_formed ψ2 = true
H0: size' ψ2 ≤ sz
pf₁: Γ ⊢i ψ1^[[evar:E↦p]] <---> ψ1^[[evar:E↦q]] using gpi
pf₂: ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ2)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ2)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ2) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ2 p q wfψ2 wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ2 ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ2 ⊆ SvS → Γ ⊢i ψ2^[[evar:E↦p]] <---> ψ2^[[evar:E↦q]] using gpi

Γ ⊢i ψ1^[[evar:E↦p]] $ ψ2^[[evar:E↦p]] <---> ψ1^[[evar:E↦q]] $ ψ2^[[evar:E↦q]] using gpi
Σ: Signature
sz: nat
Γ: Theory
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
E: evar
exdepth, mudepth: nat
gpi: ProofInfo
pf: Γ ⊢i p <---> q using gpi
IHsz: (ψ : Pattern) (wfψ : well_formed ψ), size' ψ ≤ sz → (EvS : EVarSet) (SvS : SVarSet), ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ p q wfψ wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ ⊆ SvS → Γ ⊢i ψ^[[evar:E↦p]] <---> ψ^[[evar:E↦q]] using gpi
ψ1, ψ2: Pattern
wfψ: well_formed (ψ1 $ ψ2)
Hsz: S (size' ψ1 + size' ψ2) ≤ S sz
EvS: EVarSet
SvS: SVarSet
i':= ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (ψ1 $ ψ2))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (ψ1 $ ψ2))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (ψ1 $ ψ2)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E (ψ1 $ ψ2) p q wfψ wfp wfq): ProofInfo
pile: ProofInfoLe i' gpi
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
E_in_EvS: E ∈ EvS
ψ_sub_EvS: free_evars (ψ1 $ ψ2) ⊆ EvS
p_sub_SvS: free_svars p ⊆ SvS
q_sub_SvS: free_svars q ⊆ SvS
ψ_sub_SvS: free_svars (ψ1 $ ψ2) ⊆ SvS
HEinψ: E ∈ free_evars (ψ1 $ ψ2)
wfψ1: well_formed ψ1 = true
H: size' ψ1 ≤ sz
wfψ2: well_formed ψ2 = true
H0: size' ψ2 ≤ sz
pf₁: Γ ⊢i ψ1^[[evar:E↦p]] <---> ψ1^[[evar:E↦q]] using gpi
pf₂: ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ2)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ2)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ2) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ2 p q wfψ2 wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ2 ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ2 ⊆ SvS → Γ ⊢i ψ2^[[evar:E↦p]] <---> ψ2^[[evar:E↦q]] using gpi

ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ2)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ2)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ2) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ2 p q wfψ2 wfp wfq)) gpi
Σ: Signature
sz: nat
Γ: Theory
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
E: evar
exdepth, mudepth: nat
gpi: ProofInfo
pf: Γ ⊢i p <---> q using gpi
IHsz: (ψ : Pattern) (wfψ : well_formed ψ), size' ψ ≤ sz → (EvS : EVarSet) (SvS : SVarSet), ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ p q wfψ wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ ⊆ SvS → Γ ⊢i ψ^[[evar:E↦p]] <---> ψ^[[evar:E↦q]] using gpi
ψ1, ψ2: Pattern
wfψ: well_formed (ψ1 $ ψ2)
Hsz: S (size' ψ1 + size' ψ2) ≤ S sz
EvS: EVarSet
SvS: SVarSet
i':= ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (ψ1 $ ψ2))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (ψ1 $ ψ2))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (ψ1 $ ψ2)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E (ψ1 $ ψ2) p q wfψ wfp wfq): ProofInfo
pile: ProofInfoLe i' gpi
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
E_in_EvS: E ∈ EvS
ψ_sub_EvS: free_evars (ψ1 $ ψ2) ⊆ EvS
p_sub_SvS: free_svars p ⊆ SvS
q_sub_SvS: free_svars q ⊆ SvS
ψ_sub_SvS: free_svars (ψ1 $ ψ2) ⊆ SvS
HEinψ: E ∈ free_evars (ψ1 $ ψ2)
wfψ1: well_formed ψ1 = true
H: size' ψ1 ≤ sz
wfψ2: well_formed ψ2 = true
H0: size' ψ2 ≤ sz
pf₁: Γ ⊢i ψ1^[[evar:E↦p]] <---> ψ1^[[evar:E↦q]] using gpi
pf₂: ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ2)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ2)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ2) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ2 p q wfψ2 wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ2 ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ2 ⊆ SvS → Γ ⊢i ψ2^[[evar:E↦p]] <---> ψ2^[[evar:E↦q]] using gpi
free_evars p ⊆ EvS
Σ: Signature
sz: nat
Γ: Theory
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
E: evar
exdepth, mudepth: nat
gpi: ProofInfo
pf: Γ ⊢i p <---> q using gpi
IHsz: (ψ : Pattern) (wfψ : well_formed ψ), size' ψ ≤ sz → (EvS : EVarSet) (SvS : SVarSet), ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ p q wfψ wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ ⊆ SvS → Γ ⊢i ψ^[[evar:E↦p]] <---> ψ^[[evar:E↦q]] using gpi
ψ1, ψ2: Pattern
wfψ: well_formed (ψ1 $ ψ2)
Hsz: S (size' ψ1 + size' ψ2) ≤ S sz
EvS: EVarSet
SvS: SVarSet
i':= ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (ψ1 $ ψ2))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (ψ1 $ ψ2))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (ψ1 $ ψ2)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E (ψ1 $ ψ2) p q wfψ wfp wfq): ProofInfo
pile: ProofInfoLe i' gpi
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
E_in_EvS: E ∈ EvS
ψ_sub_EvS: free_evars (ψ1 $ ψ2) ⊆ EvS
p_sub_SvS: free_svars p ⊆ SvS
q_sub_SvS: free_svars q ⊆ SvS
ψ_sub_SvS: free_svars (ψ1 $ ψ2) ⊆ SvS
HEinψ: E ∈ free_evars (ψ1 $ ψ2)
wfψ1: well_formed ψ1 = true
H: size' ψ1 ≤ sz
wfψ2: well_formed ψ2 = true
H0: size' ψ2 ≤ sz
pf₁: Γ ⊢i ψ1^[[evar:E↦p]] <---> ψ1^[[evar:E↦q]] using gpi
pf₂: ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ2)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ2)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ2) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ2 p q wfψ2 wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ2 ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ2 ⊆ SvS → Γ ⊢i ψ2^[[evar:E↦p]] <---> ψ2^[[evar:E↦q]] using gpi
free_evars q ⊆ EvS
Σ: Signature
sz: nat
Γ: Theory
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
E: evar
exdepth, mudepth: nat
gpi: ProofInfo
pf: Γ ⊢i p <---> q using gpi
IHsz: (ψ : Pattern) (wfψ : well_formed ψ), size' ψ ≤ sz → (EvS : EVarSet) (SvS : SVarSet), ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ p q wfψ wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ ⊆ SvS → Γ ⊢i ψ^[[evar:E↦p]] <---> ψ^[[evar:E↦q]] using gpi
ψ1, ψ2: Pattern
wfψ: well_formed (ψ1 $ ψ2)
Hsz: S (size' ψ1 + size' ψ2) ≤ S sz
EvS: EVarSet
SvS: SVarSet
i':= ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (ψ1 $ ψ2))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (ψ1 $ ψ2))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (ψ1 $ ψ2)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E (ψ1 $ ψ2) p q wfψ wfp wfq): ProofInfo
pile: ProofInfoLe i' gpi
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
E_in_EvS: E ∈ EvS
ψ_sub_EvS: free_evars (ψ1 $ ψ2) ⊆ EvS
p_sub_SvS: free_svars p ⊆ SvS
q_sub_SvS: free_svars q ⊆ SvS
ψ_sub_SvS: free_svars (ψ1 $ ψ2) ⊆ SvS
HEinψ: E ∈ free_evars (ψ1 $ ψ2)
wfψ1: well_formed ψ1 = true
H: size' ψ1 ≤ sz
wfψ2: well_formed ψ2 = true
H0: size' ψ2 ≤ sz
pf₁: Γ ⊢i ψ1^[[evar:E↦p]] <---> ψ1^[[evar:E↦q]] using gpi
pf₂: ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ2)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ2)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ2) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ2 p q wfψ2 wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ2 ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ2 ⊆ SvS → Γ ⊢i ψ2^[[evar:E↦p]] <---> ψ2^[[evar:E↦q]] using gpi
E ∈ EvS
Σ: Signature
sz: nat
Γ: Theory
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
E: evar
exdepth, mudepth: nat
gpi: ProofInfo
pf: Γ ⊢i p <---> q using gpi
IHsz: (ψ : Pattern) (wfψ : well_formed ψ), size' ψ ≤ sz → (EvS : EVarSet) (SvS : SVarSet), ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ p q wfψ wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ ⊆ SvS → Γ ⊢i ψ^[[evar:E↦p]] <---> ψ^[[evar:E↦q]] using gpi
ψ1, ψ2: Pattern
wfψ: well_formed (ψ1 $ ψ2)
Hsz: S (size' ψ1 + size' ψ2) ≤ S sz
EvS: EVarSet
SvS: SVarSet
i':= ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (ψ1 $ ψ2))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (ψ1 $ ψ2))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (ψ1 $ ψ2)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E (ψ1 $ ψ2) p q wfψ wfp wfq): ProofInfo
pile: ProofInfoLe i' gpi
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
E_in_EvS: E ∈ EvS
ψ_sub_EvS: free_evars (ψ1 $ ψ2) ⊆ EvS
p_sub_SvS: free_svars p ⊆ SvS
q_sub_SvS: free_svars q ⊆ SvS
ψ_sub_SvS: free_svars (ψ1 $ ψ2) ⊆ SvS
HEinψ: E ∈ free_evars (ψ1 $ ψ2)
wfψ1: well_formed ψ1 = true
H: size' ψ1 ≤ sz
wfψ2: well_formed ψ2 = true
H0: size' ψ2 ≤ sz
pf₁: Γ ⊢i ψ1^[[evar:E↦p]] <---> ψ1^[[evar:E↦q]] using gpi
pf₂: ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ2)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ2)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ2) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ2 p q wfψ2 wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ2 ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ2 ⊆ SvS → Γ ⊢i ψ2^[[evar:E↦p]] <---> ψ2^[[evar:E↦q]] using gpi
free_evars ψ2 ⊆ EvS
Σ: Signature
sz: nat
Γ: Theory
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
E: evar
exdepth, mudepth: nat
gpi: ProofInfo
pf: Γ ⊢i p <---> q using gpi
IHsz: (ψ : Pattern) (wfψ : well_formed ψ), size' ψ ≤ sz → (EvS : EVarSet) (SvS : SVarSet), ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ p q wfψ wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ ⊆ SvS → Γ ⊢i ψ^[[evar:E↦p]] <---> ψ^[[evar:E↦q]] using gpi
ψ1, ψ2: Pattern
wfψ: well_formed (ψ1 $ ψ2)
Hsz: S (size' ψ1 + size' ψ2) ≤ S sz
EvS: EVarSet
SvS: SVarSet
i':= ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (ψ1 $ ψ2))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (ψ1 $ ψ2))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (ψ1 $ ψ2)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E (ψ1 $ ψ2) p q wfψ wfp wfq): ProofInfo
pile: ProofInfoLe i' gpi
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
E_in_EvS: E ∈ EvS
ψ_sub_EvS: free_evars (ψ1 $ ψ2) ⊆ EvS
p_sub_SvS: free_svars p ⊆ SvS
q_sub_SvS: free_svars q ⊆ SvS
ψ_sub_SvS: free_svars (ψ1 $ ψ2) ⊆ SvS
HEinψ: E ∈ free_evars (ψ1 $ ψ2)
wfψ1: well_formed ψ1 = true
H: size' ψ1 ≤ sz
wfψ2: well_formed ψ2 = true
H0: size' ψ2 ≤ sz
pf₁: Γ ⊢i ψ1^[[evar:E↦p]] <---> ψ1^[[evar:E↦q]] using gpi
pf₂: ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ2)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ2)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ2) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ2 p q wfψ2 wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ2 ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ2 ⊆ SvS → Γ ⊢i ψ2^[[evar:E↦p]] <---> ψ2^[[evar:E↦q]] using gpi
free_svars p ⊆ SvS
Σ: Signature
sz: nat
Γ: Theory
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
E: evar
exdepth, mudepth: nat
gpi: ProofInfo
pf: Γ ⊢i p <---> q using gpi
IHsz: (ψ : Pattern) (wfψ : well_formed ψ), size' ψ ≤ sz → (EvS : EVarSet) (SvS : SVarSet), ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ p q wfψ wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ ⊆ SvS → Γ ⊢i ψ^[[evar:E↦p]] <---> ψ^[[evar:E↦q]] using gpi
ψ1, ψ2: Pattern
wfψ: well_formed (ψ1 $ ψ2)
Hsz: S (size' ψ1 + size' ψ2) ≤ S sz
EvS: EVarSet
SvS: SVarSet
i':= ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (ψ1 $ ψ2))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (ψ1 $ ψ2))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (ψ1 $ ψ2)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E (ψ1 $ ψ2) p q wfψ wfp wfq): ProofInfo
pile: ProofInfoLe i' gpi
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
E_in_EvS: E ∈ EvS
ψ_sub_EvS: free_evars (ψ1 $ ψ2) ⊆ EvS
p_sub_SvS: free_svars p ⊆ SvS
q_sub_SvS: free_svars q ⊆ SvS
ψ_sub_SvS: free_svars (ψ1 $ ψ2) ⊆ SvS
HEinψ: E ∈ free_evars (ψ1 $ ψ2)
wfψ1: well_formed ψ1 = true
H: size' ψ1 ≤ sz
wfψ2: well_formed ψ2 = true
H0: size' ψ2 ≤ sz
pf₁: Γ ⊢i ψ1^[[evar:E↦p]] <---> ψ1^[[evar:E↦q]] using gpi
pf₂: ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ2)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ2)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ2) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ2 p q wfψ2 wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ2 ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ2 ⊆ SvS → Γ ⊢i ψ2^[[evar:E↦p]] <---> ψ2^[[evar:E↦q]] using gpi
free_svars q ⊆ SvS
Σ: Signature
sz: nat
Γ: Theory
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
E: evar
exdepth, mudepth: nat
gpi: ProofInfo
pf: Γ ⊢i p <---> q using gpi
IHsz: (ψ : Pattern) (wfψ : well_formed ψ), size' ψ ≤ sz → (EvS : EVarSet) (SvS : SVarSet), ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ p q wfψ wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ ⊆ SvS → Γ ⊢i ψ^[[evar:E↦p]] <---> ψ^[[evar:E↦q]] using gpi
ψ1, ψ2: Pattern
wfψ: well_formed (ψ1 $ ψ2)
Hsz: S (size' ψ1 + size' ψ2) ≤ S sz
EvS: EVarSet
SvS: SVarSet
i':= ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (ψ1 $ ψ2))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (ψ1 $ ψ2))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (ψ1 $ ψ2)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E (ψ1 $ ψ2) p q wfψ wfp wfq): ProofInfo
pile: ProofInfoLe i' gpi
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
E_in_EvS: E ∈ EvS
ψ_sub_EvS: free_evars (ψ1 $ ψ2) ⊆ EvS
p_sub_SvS: free_svars p ⊆ SvS
q_sub_SvS: free_svars q ⊆ SvS
ψ_sub_SvS: free_svars (ψ1 $ ψ2) ⊆ SvS
HEinψ: E ∈ free_evars (ψ1 $ ψ2)
wfψ1: well_formed ψ1 = true
H: size' ψ1 ≤ sz
wfψ2: well_formed ψ2 = true
H0: size' ψ2 ≤ sz
pf₁: Γ ⊢i ψ1^[[evar:E↦p]] <---> ψ1^[[evar:E↦q]] using gpi
pf₂: ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ2)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ2)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ2) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ2 p q wfψ2 wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ2 ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ2 ⊆ SvS → Γ ⊢i ψ2^[[evar:E↦p]] <---> ψ2^[[evar:E↦q]] using gpi
free_svars ψ2 ⊆ SvS
Σ: Signature
sz: nat
Γ: Theory
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
E: evar
exdepth, mudepth: nat
gpi: ProofInfo
pf: Γ ⊢i p <---> q using gpi
IHsz: (ψ : Pattern) (wfψ : well_formed ψ), size' ψ ≤ sz → (EvS : EVarSet) (SvS : SVarSet), ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ p q wfψ wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ ⊆ SvS → Γ ⊢i ψ^[[evar:E↦p]] <---> ψ^[[evar:E↦q]] using gpi
ψ1, ψ2: Pattern
wfψ: well_formed (ψ1 $ ψ2)
Hsz: S (size' ψ1 + size' ψ2) ≤ S sz
EvS: EVarSet
SvS: SVarSet
i':= ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (ψ1 $ ψ2))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (ψ1 $ ψ2))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (ψ1 $ ψ2)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E (ψ1 $ ψ2) p q wfψ wfp wfq): ProofInfo
pile: ProofInfoLe i' gpi
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
E_in_EvS: E ∈ EvS
ψ_sub_EvS: free_evars (ψ1 $ ψ2) ⊆ EvS
p_sub_SvS: free_svars p ⊆ SvS
q_sub_SvS: free_svars q ⊆ SvS
ψ_sub_SvS: free_svars (ψ1 $ ψ2) ⊆ SvS
HEinψ: E ∈ free_evars (ψ1 $ ψ2)
wfψ1: well_formed ψ1 = true
H: size' ψ1 ≤ sz
wfψ2: well_formed ψ2 = true
H0: size' ψ2 ≤ sz
pf₁: Γ ⊢i ψ1^[[evar:E↦p]] <---> ψ1^[[evar:E↦q]] using gpi
pf₂: Γ ⊢i ψ2^[[evar:E↦p]] <---> ψ2^[[evar:E↦q]] using gpi
Γ ⊢i ψ1^[[evar:E↦p]] $ ψ2^[[evar:E↦p]] <---> ψ1^[[evar:E↦q]] $ ψ2^[[evar:E↦q]] using gpi
Σ: Signature
sz: nat
Γ: Theory
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
E: evar
exdepth, mudepth: nat
gpi: ProofInfo
pf: Γ ⊢i p <---> q using gpi
IHsz: (ψ : Pattern) (wfψ : well_formed ψ), size' ψ ≤ sz → (EvS : EVarSet) (SvS : SVarSet), ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ p q wfψ wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ ⊆ SvS → Γ ⊢i ψ^[[evar:E↦p]] <---> ψ^[[evar:E↦q]] using gpi
ψ1, ψ2: Pattern
wfψ: well_formed (ψ1 $ ψ2)
Hsz: S (size' ψ1 + size' ψ2) ≤ S sz
EvS: EVarSet
SvS: SVarSet
i':= ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (ψ1 $ ψ2))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (ψ1 $ ψ2))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (ψ1 $ ψ2)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E (ψ1 $ ψ2) p q wfψ wfp wfq): ProofInfo
pile: ProofInfoLe i' gpi
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
E_in_EvS: E ∈ EvS
ψ_sub_EvS: free_evars (ψ1 $ ψ2) ⊆ EvS
p_sub_SvS: free_svars p ⊆ SvS
q_sub_SvS: free_svars q ⊆ SvS
ψ_sub_SvS: free_svars (ψ1 $ ψ2) ⊆ SvS
HEinψ: E ∈ free_evars (ψ1 $ ψ2)
wfψ1: well_formed ψ1 = true
H: size' ψ1 ≤ sz
wfψ2: well_formed ψ2 = true
H0: size' ψ2 ≤ sz
pf₁: Γ ⊢i ψ1^[[evar:E↦p]] <---> ψ1^[[evar:E↦q]] using gpi
pf₂: ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ2)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ2)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ2) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ2 p q wfψ2 wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ2 ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ2 ⊆ SvS → Γ ⊢i ψ2^[[evar:E↦p]] <---> ψ2^[[evar:E↦q]] using gpi

ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ2)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ2)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ2) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ2 p q wfψ2 wfp wfq)) gpi
abstract (subst i'; eapply pile_trans;[|(apply pile)]; simpl; apply pile_evs_svs_kt; [(simpl; rewrite Nat.max_comm; pose proof (Htmp := evar_fresh_seq_max); set_solver) |(rewrite Nat.max_comm; pose proof (Htmp := svar_fresh_seq_max); set_solver) |(clear pf₂; repeat case_match; simpl; try reflexivity; try lia) |(apply frames_on_the_way_to_hole'_app_2) ] ).
Σ: Signature
sz: nat
Γ: Theory
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
E: evar
exdepth, mudepth: nat
gpi: ProofInfo
pf: Γ ⊢i p <---> q using gpi
IHsz: (ψ : Pattern) (wfψ : well_formed ψ), size' ψ ≤ sz → (EvS : EVarSet) (SvS : SVarSet), ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ p q wfψ wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ ⊆ SvS → Γ ⊢i ψ^[[evar:E↦p]] <---> ψ^[[evar:E↦q]] using gpi
ψ1, ψ2: Pattern
wfψ: well_formed (ψ1 $ ψ2)
Hsz: S (size' ψ1 + size' ψ2) ≤ S sz
EvS: EVarSet
SvS: SVarSet
i':= ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (ψ1 $ ψ2))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (ψ1 $ ψ2))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (ψ1 $ ψ2)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E (ψ1 $ ψ2) p q wfψ wfp wfq): ProofInfo
pile: ProofInfoLe i' gpi
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
E_in_EvS: E ∈ EvS
ψ_sub_EvS: free_evars (ψ1 $ ψ2) ⊆ EvS
p_sub_SvS: free_svars p ⊆ SvS
q_sub_SvS: free_svars q ⊆ SvS
ψ_sub_SvS: free_svars (ψ1 $ ψ2) ⊆ SvS
HEinψ: E ∈ free_evars (ψ1 $ ψ2)
wfψ1: well_formed ψ1 = true
H: size' ψ1 ≤ sz
wfψ2: well_formed ψ2 = true
H0: size' ψ2 ≤ sz
pf₁: Γ ⊢i ψ1^[[evar:E↦p]] <---> ψ1^[[evar:E↦q]] using gpi
pf₂: ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ2)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ2)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ2) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ2 p q wfψ2 wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ2 ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ2 ⊆ SvS → Γ ⊢i ψ2^[[evar:E↦p]] <---> ψ2^[[evar:E↦q]] using gpi

free_evars p ⊆ EvS
Σ: Signature
sz: nat
Γ: Theory
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
E: evar
exdepth, mudepth: nat
gpi: ProofInfo
pf: Γ ⊢i p <---> q using gpi
IHsz: (ψ : Pattern) (wfψ : well_formed ψ), size' ψ ≤ sz → (EvS : EVarSet) (SvS : SVarSet), ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ p q wfψ wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ ⊆ SvS → Γ ⊢i ψ^[[evar:E↦p]] <---> ψ^[[evar:E↦q]] using gpi
ψ1, ψ2: Pattern
wfψ: well_formed (ψ1 $ ψ2)
Hsz: S (size' ψ1 + size' ψ2) ≤ S sz
EvS: EVarSet
SvS: SVarSet
i':= ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (ψ1 $ ψ2))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (ψ1 $ ψ2))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (ψ1 $ ψ2)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E (ψ1 $ ψ2) p q wfψ wfp wfq): ProofInfo
pile: ProofInfoLe i' gpi
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
E_in_EvS: E ∈ EvS
ψ_sub_EvS: free_evars (ψ1 $ ψ2) ⊆ EvS
p_sub_SvS: free_svars p ⊆ SvS
q_sub_SvS: free_svars q ⊆ SvS
ψ_sub_SvS: free_svars (ψ1 $ ψ2) ⊆ SvS
HEinψ: E ∈ free_evars (ψ1 $ ψ2)
wfψ1: well_formed ψ1 = true
H: size' ψ1 ≤ sz
wfψ2: well_formed ψ2 = true
H0: size' ψ2 ≤ sz
pf₁: Γ ⊢i ψ1^[[evar:E↦p]] <---> ψ1^[[evar:E↦q]] using gpi
pf₂: ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ2)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ2)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ2) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ2 p q wfψ2 wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ2 ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ2 ⊆ SvS → Γ ⊢i ψ2^[[evar:E↦p]] <---> ψ2^[[evar:E↦q]] using gpi
free_evars q ⊆ EvS
Σ: Signature
sz: nat
Γ: Theory
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
E: evar
exdepth, mudepth: nat
gpi: ProofInfo
pf: Γ ⊢i p <---> q using gpi
IHsz: (ψ : Pattern) (wfψ : well_formed ψ), size' ψ ≤ sz → (EvS : EVarSet) (SvS : SVarSet), ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ p q wfψ wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ ⊆ SvS → Γ ⊢i ψ^[[evar:E↦p]] <---> ψ^[[evar:E↦q]] using gpi
ψ1, ψ2: Pattern
wfψ: well_formed (ψ1 $ ψ2)
Hsz: S (size' ψ1 + size' ψ2) ≤ S sz
EvS: EVarSet
SvS: SVarSet
i':= ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (ψ1 $ ψ2))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (ψ1 $ ψ2))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (ψ1 $ ψ2)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E (ψ1 $ ψ2) p q wfψ wfp wfq): ProofInfo
pile: ProofInfoLe i' gpi
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
E_in_EvS: E ∈ EvS
ψ_sub_EvS: free_evars (ψ1 $ ψ2) ⊆ EvS
p_sub_SvS: free_svars p ⊆ SvS
q_sub_SvS: free_svars q ⊆ SvS
ψ_sub_SvS: free_svars (ψ1 $ ψ2) ⊆ SvS
HEinψ: E ∈ free_evars (ψ1 $ ψ2)
wfψ1: well_formed ψ1 = true
H: size' ψ1 ≤ sz
wfψ2: well_formed ψ2 = true
H0: size' ψ2 ≤ sz
pf₁: Γ ⊢i ψ1^[[evar:E↦p]] <---> ψ1^[[evar:E↦q]] using gpi
pf₂: ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ2)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ2)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ2) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ2 p q wfψ2 wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ2 ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ2 ⊆ SvS → Γ ⊢i ψ2^[[evar:E↦p]] <---> ψ2^[[evar:E↦q]] using gpi
E ∈ EvS
Σ: Signature
sz: nat
Γ: Theory
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
E: evar
exdepth, mudepth: nat
gpi: ProofInfo
pf: Γ ⊢i p <---> q using gpi
IHsz: (ψ : Pattern) (wfψ : well_formed ψ), size' ψ ≤ sz → (EvS : EVarSet) (SvS : SVarSet), ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ p q wfψ wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ ⊆ SvS → Γ ⊢i ψ^[[evar:E↦p]] <---> ψ^[[evar:E↦q]] using gpi
ψ1, ψ2: Pattern
wfψ: well_formed (ψ1 $ ψ2)
Hsz: S (size' ψ1 + size' ψ2) ≤ S sz
EvS: EVarSet
SvS: SVarSet
i':= ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (ψ1 $ ψ2))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (ψ1 $ ψ2))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (ψ1 $ ψ2)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E (ψ1 $ ψ2) p q wfψ wfp wfq): ProofInfo
pile: ProofInfoLe i' gpi
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
E_in_EvS: E ∈ EvS
ψ_sub_EvS: free_evars (ψ1 $ ψ2) ⊆ EvS
p_sub_SvS: free_svars p ⊆ SvS
q_sub_SvS: free_svars q ⊆ SvS
ψ_sub_SvS: free_svars (ψ1 $ ψ2) ⊆ SvS
HEinψ: E ∈ free_evars (ψ1 $ ψ2)
wfψ1: well_formed ψ1 = true
H: size' ψ1 ≤ sz
wfψ2: well_formed ψ2 = true
H0: size' ψ2 ≤ sz
pf₁: Γ ⊢i ψ1^[[evar:E↦p]] <---> ψ1^[[evar:E↦q]] using gpi
pf₂: ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ2)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ2)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ2) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ2 p q wfψ2 wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ2 ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ2 ⊆ SvS → Γ ⊢i ψ2^[[evar:E↦p]] <---> ψ2^[[evar:E↦q]] using gpi
free_evars ψ2 ⊆ EvS
Σ: Signature
sz: nat
Γ: Theory
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
E: evar
exdepth, mudepth: nat
gpi: ProofInfo
pf: Γ ⊢i p <---> q using gpi
IHsz: (ψ : Pattern) (wfψ : well_formed ψ), size' ψ ≤ sz → (EvS : EVarSet) (SvS : SVarSet), ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ p q wfψ wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ ⊆ SvS → Γ ⊢i ψ^[[evar:E↦p]] <---> ψ^[[evar:E↦q]] using gpi
ψ1, ψ2: Pattern
wfψ: well_formed (ψ1 $ ψ2)
Hsz: S (size' ψ1 + size' ψ2) ≤ S sz
EvS: EVarSet
SvS: SVarSet
i':= ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (ψ1 $ ψ2))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (ψ1 $ ψ2))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (ψ1 $ ψ2)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E (ψ1 $ ψ2) p q wfψ wfp wfq): ProofInfo
pile: ProofInfoLe i' gpi
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
E_in_EvS: E ∈ EvS
ψ_sub_EvS: free_evars (ψ1 $ ψ2) ⊆ EvS
p_sub_SvS: free_svars p ⊆ SvS
q_sub_SvS: free_svars q ⊆ SvS
ψ_sub_SvS: free_svars (ψ1 $ ψ2) ⊆ SvS
HEinψ: E ∈ free_evars (ψ1 $ ψ2)
wfψ1: well_formed ψ1 = true
H: size' ψ1 ≤ sz
wfψ2: well_formed ψ2 = true
H0: size' ψ2 ≤ sz
pf₁: Γ ⊢i ψ1^[[evar:E↦p]] <---> ψ1^[[evar:E↦q]] using gpi
pf₂: ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ2)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ2)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ2) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ2 p q wfψ2 wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ2 ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ2 ⊆ SvS → Γ ⊢i ψ2^[[evar:E↦p]] <---> ψ2^[[evar:E↦q]] using gpi
free_svars p ⊆ SvS
Σ: Signature
sz: nat
Γ: Theory
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
E: evar
exdepth, mudepth: nat
gpi: ProofInfo
pf: Γ ⊢i p <---> q using gpi
IHsz: (ψ : Pattern) (wfψ : well_formed ψ), size' ψ ≤ sz → (EvS : EVarSet) (SvS : SVarSet), ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ p q wfψ wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ ⊆ SvS → Γ ⊢i ψ^[[evar:E↦p]] <---> ψ^[[evar:E↦q]] using gpi
ψ1, ψ2: Pattern
wfψ: well_formed (ψ1 $ ψ2)
Hsz: S (size' ψ1 + size' ψ2) ≤ S sz
EvS: EVarSet
SvS: SVarSet
i':= ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (ψ1 $ ψ2))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (ψ1 $ ψ2))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (ψ1 $ ψ2)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E (ψ1 $ ψ2) p q wfψ wfp wfq): ProofInfo
pile: ProofInfoLe i' gpi
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
E_in_EvS: E ∈ EvS
ψ_sub_EvS: free_evars (ψ1 $ ψ2) ⊆ EvS
p_sub_SvS: free_svars p ⊆ SvS
q_sub_SvS: free_svars q ⊆ SvS
ψ_sub_SvS: free_svars (ψ1 $ ψ2) ⊆ SvS
HEinψ: E ∈ free_evars (ψ1 $ ψ2)
wfψ1: well_formed ψ1 = true
H: size' ψ1 ≤ sz
wfψ2: well_formed ψ2 = true
H0: size' ψ2 ≤ sz
pf₁: Γ ⊢i ψ1^[[evar:E↦p]] <---> ψ1^[[evar:E↦q]] using gpi
pf₂: ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ2)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ2)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ2) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ2 p q wfψ2 wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ2 ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ2 ⊆ SvS → Γ ⊢i ψ2^[[evar:E↦p]] <---> ψ2^[[evar:E↦q]] using gpi
free_svars q ⊆ SvS
Σ: Signature
sz: nat
Γ: Theory
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
E: evar
exdepth, mudepth: nat
gpi: ProofInfo
pf: Γ ⊢i p <---> q using gpi
IHsz: (ψ : Pattern) (wfψ : well_formed ψ), size' ψ ≤ sz → (EvS : EVarSet) (SvS : SVarSet), ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ p q wfψ wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ ⊆ SvS → Γ ⊢i ψ^[[evar:E↦p]] <---> ψ^[[evar:E↦q]] using gpi
ψ1, ψ2: Pattern
wfψ: well_formed (ψ1 $ ψ2)
Hsz: S (size' ψ1 + size' ψ2) ≤ S sz
EvS: EVarSet
SvS: SVarSet
i':= ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (ψ1 $ ψ2))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (ψ1 $ ψ2))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (ψ1 $ ψ2)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E (ψ1 $ ψ2) p q wfψ wfp wfq): ProofInfo
pile: ProofInfoLe i' gpi
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
E_in_EvS: E ∈ EvS
ψ_sub_EvS: free_evars (ψ1 $ ψ2) ⊆ EvS
p_sub_SvS: free_svars p ⊆ SvS
q_sub_SvS: free_svars q ⊆ SvS
ψ_sub_SvS: free_svars (ψ1 $ ψ2) ⊆ SvS
HEinψ: E ∈ free_evars (ψ1 $ ψ2)
wfψ1: well_formed ψ1 = true
H: size' ψ1 ≤ sz
wfψ2: well_formed ψ2 = true
H0: size' ψ2 ≤ sz
pf₁: Γ ⊢i ψ1^[[evar:E↦p]] <---> ψ1^[[evar:E↦q]] using gpi
pf₂: ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ2)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ2)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ2) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ2 p q wfψ2 wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ2 ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ2 ⊆ SvS → Γ ⊢i ψ2^[[evar:E↦p]] <---> ψ2^[[evar:E↦q]] using gpi
free_svars ψ2 ⊆ SvS
Σ: Signature
sz: nat
Γ: Theory
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
E: evar
exdepth, mudepth: nat
gpi: ProofInfo
pf: Γ ⊢i p <---> q using gpi
IHsz: (ψ : Pattern) (wfψ : well_formed ψ), size' ψ ≤ sz → (EvS : EVarSet) (SvS : SVarSet), ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ p q wfψ wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ ⊆ SvS → Γ ⊢i ψ^[[evar:E↦p]] <---> ψ^[[evar:E↦q]] using gpi
ψ1, ψ2: Pattern
wfψ: well_formed (ψ1 $ ψ2)
Hsz: S (size' ψ1 + size' ψ2) ≤ S sz
EvS: EVarSet
SvS: SVarSet
i':= ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (ψ1 $ ψ2))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (ψ1 $ ψ2))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (ψ1 $ ψ2)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E (ψ1 $ ψ2) p q wfψ wfp wfq): ProofInfo
pile: ProofInfoLe i' gpi
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
E_in_EvS: E ∈ EvS
ψ_sub_EvS: free_evars (ψ1 $ ψ2) ⊆ EvS
p_sub_SvS: free_svars p ⊆ SvS
q_sub_SvS: free_svars q ⊆ SvS
ψ_sub_SvS: free_svars (ψ1 $ ψ2) ⊆ SvS
HEinψ: E ∈ free_evars (ψ1 $ ψ2)
wfψ1: well_formed ψ1 = true
H: size' ψ1 ≤ sz
wfψ2: well_formed ψ2 = true
H0: size' ψ2 ≤ sz
pf₁: Γ ⊢i ψ1^[[evar:E↦p]] <---> ψ1^[[evar:E↦q]] using gpi
pf₂: Γ ⊢i ψ2^[[evar:E↦p]] <---> ψ2^[[evar:E↦q]] using gpi
Γ ⊢i ψ1^[[evar:E↦p]] $ ψ2^[[evar:E↦p]] <---> ψ1^[[evar:E↦q]] $ ψ2^[[evar:E↦q]] using gpi
Σ: Signature
sz: nat
Γ: Theory
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
E: evar
exdepth, mudepth: nat
gpi: ProofInfo
pf: Γ ⊢i p <---> q using gpi
IHsz: (ψ : Pattern) (wfψ : well_formed ψ), size' ψ ≤ sz → (EvS : EVarSet) (SvS : SVarSet), ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ p q wfψ wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ ⊆ SvS → Γ ⊢i ψ^[[evar:E↦p]] <---> ψ^[[evar:E↦q]] using gpi
ψ1, ψ2: Pattern
wfψ: well_formed (ψ1 $ ψ2)
Hsz: S (size' ψ1 + size' ψ2) ≤ S sz
EvS: EVarSet
SvS: SVarSet
i':= ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (ψ1 $ ψ2))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (ψ1 $ ψ2))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (ψ1 $ ψ2)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E (ψ1 $ ψ2) p q wfψ wfp wfq): ProofInfo
pile: ProofInfoLe i' gpi
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
E_in_EvS: E ∈ EvS
ψ_sub_EvS: free_evars (ψ1 $ ψ2) ⊆ EvS
p_sub_SvS: free_svars p ⊆ SvS
q_sub_SvS: free_svars q ⊆ SvS
ψ_sub_SvS: free_svars (ψ1 $ ψ2) ⊆ SvS
HEinψ: E ∈ free_evars (ψ1 $ ψ2)
wfψ1: well_formed ψ1 = true
H: size' ψ1 ≤ sz
wfψ2: well_formed ψ2 = true
H0: size' ψ2 ≤ sz
pf₁: Γ ⊢i ψ1^[[evar:E↦p]] <---> ψ1^[[evar:E↦q]] using gpi
pf₂: ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ2)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ2)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ2) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ2 p q wfψ2 wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ2 ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ2 ⊆ SvS → Γ ⊢i ψ2^[[evar:E↦p]] <---> ψ2^[[evar:E↦q]] using gpi

free_evars p ⊆ EvS
exact p_sub_EvS.
Σ: Signature
sz: nat
Γ: Theory
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
E: evar
exdepth, mudepth: nat
gpi: ProofInfo
pf: Γ ⊢i p <---> q using gpi
IHsz: (ψ : Pattern) (wfψ : well_formed ψ), size' ψ ≤ sz → (EvS : EVarSet) (SvS : SVarSet), ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ p q wfψ wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ ⊆ SvS → Γ ⊢i ψ^[[evar:E↦p]] <---> ψ^[[evar:E↦q]] using gpi
ψ1, ψ2: Pattern
wfψ: well_formed (ψ1 $ ψ2)
Hsz: S (size' ψ1 + size' ψ2) ≤ S sz
EvS: EVarSet
SvS: SVarSet
i':= ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (ψ1 $ ψ2))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (ψ1 $ ψ2))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (ψ1 $ ψ2)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E (ψ1 $ ψ2) p q wfψ wfp wfq): ProofInfo
pile: ProofInfoLe i' gpi
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
E_in_EvS: E ∈ EvS
ψ_sub_EvS: free_evars (ψ1 $ ψ2) ⊆ EvS
p_sub_SvS: free_svars p ⊆ SvS
q_sub_SvS: free_svars q ⊆ SvS
ψ_sub_SvS: free_svars (ψ1 $ ψ2) ⊆ SvS
HEinψ: E ∈ free_evars (ψ1 $ ψ2)
wfψ1: well_formed ψ1 = true
H: size' ψ1 ≤ sz
wfψ2: well_formed ψ2 = true
H0: size' ψ2 ≤ sz
pf₁: Γ ⊢i ψ1^[[evar:E↦p]] <---> ψ1^[[evar:E↦q]] using gpi
pf₂: ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ2)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ2)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ2) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ2 p q wfψ2 wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ2 ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ2 ⊆ SvS → Γ ⊢i ψ2^[[evar:E↦p]] <---> ψ2^[[evar:E↦q]] using gpi

free_evars q ⊆ EvS
Σ: Signature
sz: nat
Γ: Theory
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
E: evar
exdepth, mudepth: nat
gpi: ProofInfo
pf: Γ ⊢i p <---> q using gpi
IHsz: (ψ : Pattern) (wfψ : well_formed ψ), size' ψ ≤ sz → (EvS : EVarSet) (SvS : SVarSet), ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ p q wfψ wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ ⊆ SvS → Γ ⊢i ψ^[[evar:E↦p]] <---> ψ^[[evar:E↦q]] using gpi
ψ1, ψ2: Pattern
wfψ: well_formed (ψ1 $ ψ2)
Hsz: S (size' ψ1 + size' ψ2) ≤ S sz
EvS: EVarSet
SvS: SVarSet
i':= ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (ψ1 $ ψ2))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (ψ1 $ ψ2))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (ψ1 $ ψ2)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E (ψ1 $ ψ2) p q wfψ wfp wfq): ProofInfo
pile: ProofInfoLe i' gpi
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
E_in_EvS: E ∈ EvS
ψ_sub_EvS: free_evars (ψ1 $ ψ2) ⊆ EvS
p_sub_SvS: free_svars p ⊆ SvS
q_sub_SvS: free_svars q ⊆ SvS
ψ_sub_SvS: free_svars (ψ1 $ ψ2) ⊆ SvS
HEinψ: E ∈ free_evars (ψ1 $ ψ2)
wfψ1: well_formed ψ1 = true
H: size' ψ1 ≤ sz
wfψ2: well_formed ψ2 = true
H0: size' ψ2 ≤ sz
pf₁: Γ ⊢i ψ1^[[evar:E↦p]] <---> ψ1^[[evar:E↦q]] using gpi
pf₂: ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ2)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ2)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ2) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ2 p q wfψ2 wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ2 ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ2 ⊆ SvS → Γ ⊢i ψ2^[[evar:E↦p]] <---> ψ2^[[evar:E↦q]] using gpi
E ∈ EvS
Σ: Signature
sz: nat
Γ: Theory
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
E: evar
exdepth, mudepth: nat
gpi: ProofInfo
pf: Γ ⊢i p <---> q using gpi
IHsz: (ψ : Pattern) (wfψ : well_formed ψ), size' ψ ≤ sz → (EvS : EVarSet) (SvS : SVarSet), ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ p q wfψ wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ ⊆ SvS → Γ ⊢i ψ^[[evar:E↦p]] <---> ψ^[[evar:E↦q]] using gpi
ψ1, ψ2: Pattern
wfψ: well_formed (ψ1 $ ψ2)
Hsz: S (size' ψ1 + size' ψ2) ≤ S sz
EvS: EVarSet
SvS: SVarSet
i':= ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (ψ1 $ ψ2))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (ψ1 $ ψ2))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (ψ1 $ ψ2)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E (ψ1 $ ψ2) p q wfψ wfp wfq): ProofInfo
pile: ProofInfoLe i' gpi
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
E_in_EvS: E ∈ EvS
ψ_sub_EvS: free_evars (ψ1 $ ψ2) ⊆ EvS
p_sub_SvS: free_svars p ⊆ SvS
q_sub_SvS: free_svars q ⊆ SvS
ψ_sub_SvS: free_svars (ψ1 $ ψ2) ⊆ SvS
HEinψ: E ∈ free_evars (ψ1 $ ψ2)
wfψ1: well_formed ψ1 = true
H: size' ψ1 ≤ sz
wfψ2: well_formed ψ2 = true
H0: size' ψ2 ≤ sz
pf₁: Γ ⊢i ψ1^[[evar:E↦p]] <---> ψ1^[[evar:E↦q]] using gpi
pf₂: ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ2)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ2)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ2) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ2 p q wfψ2 wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ2 ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ2 ⊆ SvS → Γ ⊢i ψ2^[[evar:E↦p]] <---> ψ2^[[evar:E↦q]] using gpi
free_evars ψ2 ⊆ EvS
Σ: Signature
sz: nat
Γ: Theory
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
E: evar
exdepth, mudepth: nat
gpi: ProofInfo
pf: Γ ⊢i p <---> q using gpi
IHsz: (ψ : Pattern) (wfψ : well_formed ψ), size' ψ ≤ sz → (EvS : EVarSet) (SvS : SVarSet), ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ p q wfψ wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ ⊆ SvS → Γ ⊢i ψ^[[evar:E↦p]] <---> ψ^[[evar:E↦q]] using gpi
ψ1, ψ2: Pattern
wfψ: well_formed (ψ1 $ ψ2)
Hsz: S (size' ψ1 + size' ψ2) ≤ S sz
EvS: EVarSet
SvS: SVarSet
i':= ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (ψ1 $ ψ2))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (ψ1 $ ψ2))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (ψ1 $ ψ2)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E (ψ1 $ ψ2) p q wfψ wfp wfq): ProofInfo
pile: ProofInfoLe i' gpi
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
E_in_EvS: E ∈ EvS
ψ_sub_EvS: free_evars (ψ1 $ ψ2) ⊆ EvS
p_sub_SvS: free_svars p ⊆ SvS
q_sub_SvS: free_svars q ⊆ SvS
ψ_sub_SvS: free_svars (ψ1 $ ψ2) ⊆ SvS
HEinψ: E ∈ free_evars (ψ1 $ ψ2)
wfψ1: well_formed ψ1 = true
H: size' ψ1 ≤ sz
wfψ2: well_formed ψ2 = true
H0: size' ψ2 ≤ sz
pf₁: Γ ⊢i ψ1^[[evar:E↦p]] <---> ψ1^[[evar:E↦q]] using gpi
pf₂: ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ2)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ2)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ2) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ2 p q wfψ2 wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ2 ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ2 ⊆ SvS → Γ ⊢i ψ2^[[evar:E↦p]] <---> ψ2^[[evar:E↦q]] using gpi
free_svars p ⊆ SvS
Σ: Signature
sz: nat
Γ: Theory
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
E: evar
exdepth, mudepth: nat
gpi: ProofInfo
pf: Γ ⊢i p <---> q using gpi
IHsz: (ψ : Pattern) (wfψ : well_formed ψ), size' ψ ≤ sz → (EvS : EVarSet) (SvS : SVarSet), ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ p q wfψ wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ ⊆ SvS → Γ ⊢i ψ^[[evar:E↦p]] <---> ψ^[[evar:E↦q]] using gpi
ψ1, ψ2: Pattern
wfψ: well_formed (ψ1 $ ψ2)
Hsz: S (size' ψ1 + size' ψ2) ≤ S sz
EvS: EVarSet
SvS: SVarSet
i':= ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (ψ1 $ ψ2))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (ψ1 $ ψ2))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (ψ1 $ ψ2)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E (ψ1 $ ψ2) p q wfψ wfp wfq): ProofInfo
pile: ProofInfoLe i' gpi
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
E_in_EvS: E ∈ EvS
ψ_sub_EvS: free_evars (ψ1 $ ψ2) ⊆ EvS
p_sub_SvS: free_svars p ⊆ SvS
q_sub_SvS: free_svars q ⊆ SvS
ψ_sub_SvS: free_svars (ψ1 $ ψ2) ⊆ SvS
HEinψ: E ∈ free_evars (ψ1 $ ψ2)
wfψ1: well_formed ψ1 = true
H: size' ψ1 ≤ sz
wfψ2: well_formed ψ2 = true
H0: size' ψ2 ≤ sz
pf₁: Γ ⊢i ψ1^[[evar:E↦p]] <---> ψ1^[[evar:E↦q]] using gpi
pf₂: ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ2)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ2)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ2) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ2 p q wfψ2 wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ2 ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ2 ⊆ SvS → Γ ⊢i ψ2^[[evar:E↦p]] <---> ψ2^[[evar:E↦q]] using gpi
free_svars q ⊆ SvS
Σ: Signature
sz: nat
Γ: Theory
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
E: evar
exdepth, mudepth: nat
gpi: ProofInfo
pf: Γ ⊢i p <---> q using gpi
IHsz: (ψ : Pattern) (wfψ : well_formed ψ), size' ψ ≤ sz → (EvS : EVarSet) (SvS : SVarSet), ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ p q wfψ wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ ⊆ SvS → Γ ⊢i ψ^[[evar:E↦p]] <---> ψ^[[evar:E↦q]] using gpi
ψ1, ψ2: Pattern
wfψ: well_formed (ψ1 $ ψ2)
Hsz: S (size' ψ1 + size' ψ2) ≤ S sz
EvS: EVarSet
SvS: SVarSet
i':= ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (ψ1 $ ψ2))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (ψ1 $ ψ2))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (ψ1 $ ψ2)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E (ψ1 $ ψ2) p q wfψ wfp wfq): ProofInfo
pile: ProofInfoLe i' gpi
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
E_in_EvS: E ∈ EvS
ψ_sub_EvS: free_evars (ψ1 $ ψ2) ⊆ EvS
p_sub_SvS: free_svars p ⊆ SvS
q_sub_SvS: free_svars q ⊆ SvS
ψ_sub_SvS: free_svars (ψ1 $ ψ2) ⊆ SvS
HEinψ: E ∈ free_evars (ψ1 $ ψ2)
wfψ1: well_formed ψ1 = true
H: size' ψ1 ≤ sz
wfψ2: well_formed ψ2 = true
H0: size' ψ2 ≤ sz
pf₁: Γ ⊢i ψ1^[[evar:E↦p]] <---> ψ1^[[evar:E↦q]] using gpi
pf₂: ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ2)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ2)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ2) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ2 p q wfψ2 wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ2 ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ2 ⊆ SvS → Γ ⊢i ψ2^[[evar:E↦p]] <---> ψ2^[[evar:E↦q]] using gpi
free_svars ψ2 ⊆ SvS
Σ: Signature
sz: nat
Γ: Theory
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
E: evar
exdepth, mudepth: nat
gpi: ProofInfo
pf: Γ ⊢i p <---> q using gpi
IHsz: (ψ : Pattern) (wfψ : well_formed ψ), size' ψ ≤ sz → (EvS : EVarSet) (SvS : SVarSet), ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ p q wfψ wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ ⊆ SvS → Γ ⊢i ψ^[[evar:E↦p]] <---> ψ^[[evar:E↦q]] using gpi
ψ1, ψ2: Pattern
wfψ: well_formed (ψ1 $ ψ2)
Hsz: S (size' ψ1 + size' ψ2) ≤ S sz
EvS: EVarSet
SvS: SVarSet
i':= ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (ψ1 $ ψ2))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (ψ1 $ ψ2))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (ψ1 $ ψ2)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E (ψ1 $ ψ2) p q wfψ wfp wfq): ProofInfo
pile: ProofInfoLe i' gpi
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
E_in_EvS: E ∈ EvS
ψ_sub_EvS: free_evars (ψ1 $ ψ2) ⊆ EvS
p_sub_SvS: free_svars p ⊆ SvS
q_sub_SvS: free_svars q ⊆ SvS
ψ_sub_SvS: free_svars (ψ1 $ ψ2) ⊆ SvS
HEinψ: E ∈ free_evars (ψ1 $ ψ2)
wfψ1: well_formed ψ1 = true
H: size' ψ1 ≤ sz
wfψ2: well_formed ψ2 = true
H0: size' ψ2 ≤ sz
pf₁: Γ ⊢i ψ1^[[evar:E↦p]] <---> ψ1^[[evar:E↦q]] using gpi
pf₂: Γ ⊢i ψ2^[[evar:E↦p]] <---> ψ2^[[evar:E↦q]] using gpi
Γ ⊢i ψ1^[[evar:E↦p]] $ ψ2^[[evar:E↦p]] <---> ψ1^[[evar:E↦q]] $ ψ2^[[evar:E↦q]] using gpi
Σ: Signature
sz: nat
Γ: Theory
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
E: evar
exdepth, mudepth: nat
gpi: ProofInfo
pf: Γ ⊢i p <---> q using gpi
IHsz: (ψ : Pattern) (wfψ : well_formed ψ), size' ψ ≤ sz → (EvS : EVarSet) (SvS : SVarSet), ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ p q wfψ wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ ⊆ SvS → Γ ⊢i ψ^[[evar:E↦p]] <---> ψ^[[evar:E↦q]] using gpi
ψ1, ψ2: Pattern
wfψ: well_formed (ψ1 $ ψ2)
Hsz: S (size' ψ1 + size' ψ2) ≤ S sz
EvS: EVarSet
SvS: SVarSet
i':= ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (ψ1 $ ψ2))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (ψ1 $ ψ2))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (ψ1 $ ψ2)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E (ψ1 $ ψ2) p q wfψ wfp wfq): ProofInfo
pile: ProofInfoLe i' gpi
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
E_in_EvS: E ∈ EvS
ψ_sub_EvS: free_evars (ψ1 $ ψ2) ⊆ EvS
p_sub_SvS: free_svars p ⊆ SvS
q_sub_SvS: free_svars q ⊆ SvS
ψ_sub_SvS: free_svars (ψ1 $ ψ2) ⊆ SvS
HEinψ: E ∈ free_evars (ψ1 $ ψ2)
wfψ1: well_formed ψ1 = true
H: size' ψ1 ≤ sz
wfψ2: well_formed ψ2 = true
H0: size' ψ2 ≤ sz
pf₁: Γ ⊢i ψ1^[[evar:E↦p]] <---> ψ1^[[evar:E↦q]] using gpi
pf₂: ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ2)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ2)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ2) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ2 p q wfψ2 wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ2 ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ2 ⊆ SvS → Γ ⊢i ψ2^[[evar:E↦p]] <---> ψ2^[[evar:E↦q]] using gpi

free_evars q ⊆ EvS
exact q_sub_EvS.
Σ: Signature
sz: nat
Γ: Theory
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
E: evar
exdepth, mudepth: nat
gpi: ProofInfo
pf: Γ ⊢i p <---> q using gpi
IHsz: (ψ : Pattern) (wfψ : well_formed ψ), size' ψ ≤ sz → (EvS : EVarSet) (SvS : SVarSet), ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ p q wfψ wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ ⊆ SvS → Γ ⊢i ψ^[[evar:E↦p]] <---> ψ^[[evar:E↦q]] using gpi
ψ1, ψ2: Pattern
wfψ: well_formed (ψ1 $ ψ2)
Hsz: S (size' ψ1 + size' ψ2) ≤ S sz
EvS: EVarSet
SvS: SVarSet
i':= ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (ψ1 $ ψ2))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (ψ1 $ ψ2))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (ψ1 $ ψ2)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E (ψ1 $ ψ2) p q wfψ wfp wfq): ProofInfo
pile: ProofInfoLe i' gpi
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
E_in_EvS: E ∈ EvS
ψ_sub_EvS: free_evars (ψ1 $ ψ2) ⊆ EvS
p_sub_SvS: free_svars p ⊆ SvS
q_sub_SvS: free_svars q ⊆ SvS
ψ_sub_SvS: free_svars (ψ1 $ ψ2) ⊆ SvS
HEinψ: E ∈ free_evars (ψ1 $ ψ2)
wfψ1: well_formed ψ1 = true
H: size' ψ1 ≤ sz
wfψ2: well_formed ψ2 = true
H0: size' ψ2 ≤ sz
pf₁: Γ ⊢i ψ1^[[evar:E↦p]] <---> ψ1^[[evar:E↦q]] using gpi
pf₂: ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ2)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ2)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ2) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ2 p q wfψ2 wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ2 ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ2 ⊆ SvS → Γ ⊢i ψ2^[[evar:E↦p]] <---> ψ2^[[evar:E↦q]] using gpi

E ∈ EvS
Σ: Signature
sz: nat
Γ: Theory
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
E: evar
exdepth, mudepth: nat
gpi: ProofInfo
pf: Γ ⊢i p <---> q using gpi
IHsz: (ψ : Pattern) (wfψ : well_formed ψ), size' ψ ≤ sz → (EvS : EVarSet) (SvS : SVarSet), ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ p q wfψ wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ ⊆ SvS → Γ ⊢i ψ^[[evar:E↦p]] <---> ψ^[[evar:E↦q]] using gpi
ψ1, ψ2: Pattern
wfψ: well_formed (ψ1 $ ψ2)
Hsz: S (size' ψ1 + size' ψ2) ≤ S sz
EvS: EVarSet
SvS: SVarSet
i':= ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (ψ1 $ ψ2))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (ψ1 $ ψ2))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (ψ1 $ ψ2)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E (ψ1 $ ψ2) p q wfψ wfp wfq): ProofInfo
pile: ProofInfoLe i' gpi
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
E_in_EvS: E ∈ EvS
ψ_sub_EvS: free_evars (ψ1 $ ψ2) ⊆ EvS
p_sub_SvS: free_svars p ⊆ SvS
q_sub_SvS: free_svars q ⊆ SvS
ψ_sub_SvS: free_svars (ψ1 $ ψ2) ⊆ SvS
HEinψ: E ∈ free_evars (ψ1 $ ψ2)
wfψ1: well_formed ψ1 = true
H: size' ψ1 ≤ sz
wfψ2: well_formed ψ2 = true
H0: size' ψ2 ≤ sz
pf₁: Γ ⊢i ψ1^[[evar:E↦p]] <---> ψ1^[[evar:E↦q]] using gpi
pf₂: ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ2)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ2)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ2) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ2 p q wfψ2 wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ2 ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ2 ⊆ SvS → Γ ⊢i ψ2^[[evar:E↦p]] <---> ψ2^[[evar:E↦q]] using gpi
free_evars ψ2 ⊆ EvS
Σ: Signature
sz: nat
Γ: Theory
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
E: evar
exdepth, mudepth: nat
gpi: ProofInfo
pf: Γ ⊢i p <---> q using gpi
IHsz: (ψ : Pattern) (wfψ : well_formed ψ), size' ψ ≤ sz → (EvS : EVarSet) (SvS : SVarSet), ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ p q wfψ wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ ⊆ SvS → Γ ⊢i ψ^[[evar:E↦p]] <---> ψ^[[evar:E↦q]] using gpi
ψ1, ψ2: Pattern
wfψ: well_formed (ψ1 $ ψ2)
Hsz: S (size' ψ1 + size' ψ2) ≤ S sz
EvS: EVarSet
SvS: SVarSet
i':= ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (ψ1 $ ψ2))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (ψ1 $ ψ2))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (ψ1 $ ψ2)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E (ψ1 $ ψ2) p q wfψ wfp wfq): ProofInfo
pile: ProofInfoLe i' gpi
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
E_in_EvS: E ∈ EvS
ψ_sub_EvS: free_evars (ψ1 $ ψ2) ⊆ EvS
p_sub_SvS: free_svars p ⊆ SvS
q_sub_SvS: free_svars q ⊆ SvS
ψ_sub_SvS: free_svars (ψ1 $ ψ2) ⊆ SvS
HEinψ: E ∈ free_evars (ψ1 $ ψ2)
wfψ1: well_formed ψ1 = true
H: size' ψ1 ≤ sz
wfψ2: well_formed ψ2 = true
H0: size' ψ2 ≤ sz
pf₁: Γ ⊢i ψ1^[[evar:E↦p]] <---> ψ1^[[evar:E↦q]] using gpi
pf₂: ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ2)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ2)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ2) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ2 p q wfψ2 wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ2 ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ2 ⊆ SvS → Γ ⊢i ψ2^[[evar:E↦p]] <---> ψ2^[[evar:E↦q]] using gpi
free_svars p ⊆ SvS
Σ: Signature
sz: nat
Γ: Theory
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
E: evar
exdepth, mudepth: nat
gpi: ProofInfo
pf: Γ ⊢i p <---> q using gpi
IHsz: (ψ : Pattern) (wfψ : well_formed ψ), size' ψ ≤ sz → (EvS : EVarSet) (SvS : SVarSet), ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ p q wfψ wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ ⊆ SvS → Γ ⊢i ψ^[[evar:E↦p]] <---> ψ^[[evar:E↦q]] using gpi
ψ1, ψ2: Pattern
wfψ: well_formed (ψ1 $ ψ2)
Hsz: S (size' ψ1 + size' ψ2) ≤ S sz
EvS: EVarSet
SvS: SVarSet
i':= ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (ψ1 $ ψ2))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (ψ1 $ ψ2))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (ψ1 $ ψ2)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E (ψ1 $ ψ2) p q wfψ wfp wfq): ProofInfo
pile: ProofInfoLe i' gpi
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
E_in_EvS: E ∈ EvS
ψ_sub_EvS: free_evars (ψ1 $ ψ2) ⊆ EvS
p_sub_SvS: free_svars p ⊆ SvS
q_sub_SvS: free_svars q ⊆ SvS
ψ_sub_SvS: free_svars (ψ1 $ ψ2) ⊆ SvS
HEinψ: E ∈ free_evars (ψ1 $ ψ2)
wfψ1: well_formed ψ1 = true
H: size' ψ1 ≤ sz
wfψ2: well_formed ψ2 = true
H0: size' ψ2 ≤ sz
pf₁: Γ ⊢i ψ1^[[evar:E↦p]] <---> ψ1^[[evar:E↦q]] using gpi
pf₂: ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ2)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ2)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ2) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ2 p q wfψ2 wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ2 ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ2 ⊆ SvS → Γ ⊢i ψ2^[[evar:E↦p]] <---> ψ2^[[evar:E↦q]] using gpi
free_svars q ⊆ SvS
Σ: Signature
sz: nat
Γ: Theory
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
E: evar
exdepth, mudepth: nat
gpi: ProofInfo
pf: Γ ⊢i p <---> q using gpi
IHsz: (ψ : Pattern) (wfψ : well_formed ψ), size' ψ ≤ sz → (EvS : EVarSet) (SvS : SVarSet), ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ p q wfψ wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ ⊆ SvS → Γ ⊢i ψ^[[evar:E↦p]] <---> ψ^[[evar:E↦q]] using gpi
ψ1, ψ2: Pattern
wfψ: well_formed (ψ1 $ ψ2)
Hsz: S (size' ψ1 + size' ψ2) ≤ S sz
EvS: EVarSet
SvS: SVarSet
i':= ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (ψ1 $ ψ2))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (ψ1 $ ψ2))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (ψ1 $ ψ2)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E (ψ1 $ ψ2) p q wfψ wfp wfq): ProofInfo
pile: ProofInfoLe i' gpi
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
E_in_EvS: E ∈ EvS
ψ_sub_EvS: free_evars (ψ1 $ ψ2) ⊆ EvS
p_sub_SvS: free_svars p ⊆ SvS
q_sub_SvS: free_svars q ⊆ SvS
ψ_sub_SvS: free_svars (ψ1 $ ψ2) ⊆ SvS
HEinψ: E ∈ free_evars (ψ1 $ ψ2)
wfψ1: well_formed ψ1 = true
H: size' ψ1 ≤ sz
wfψ2: well_formed ψ2 = true
H0: size' ψ2 ≤ sz
pf₁: Γ ⊢i ψ1^[[evar:E↦p]] <---> ψ1^[[evar:E↦q]] using gpi
pf₂: ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ2)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ2)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ2) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ2 p q wfψ2 wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ2 ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ2 ⊆ SvS → Γ ⊢i ψ2^[[evar:E↦p]] <---> ψ2^[[evar:E↦q]] using gpi
free_svars ψ2 ⊆ SvS
Σ: Signature
sz: nat
Γ: Theory
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
E: evar
exdepth, mudepth: nat
gpi: ProofInfo
pf: Γ ⊢i p <---> q using gpi
IHsz: (ψ : Pattern) (wfψ : well_formed ψ), size' ψ ≤ sz → (EvS : EVarSet) (SvS : SVarSet), ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ p q wfψ wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ ⊆ SvS → Γ ⊢i ψ^[[evar:E↦p]] <---> ψ^[[evar:E↦q]] using gpi
ψ1, ψ2: Pattern
wfψ: well_formed (ψ1 $ ψ2)
Hsz: S (size' ψ1 + size' ψ2) ≤ S sz
EvS: EVarSet
SvS: SVarSet
i':= ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (ψ1 $ ψ2))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (ψ1 $ ψ2))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (ψ1 $ ψ2)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E (ψ1 $ ψ2) p q wfψ wfp wfq): ProofInfo
pile: ProofInfoLe i' gpi
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
E_in_EvS: E ∈ EvS
ψ_sub_EvS: free_evars (ψ1 $ ψ2) ⊆ EvS
p_sub_SvS: free_svars p ⊆ SvS
q_sub_SvS: free_svars q ⊆ SvS
ψ_sub_SvS: free_svars (ψ1 $ ψ2) ⊆ SvS
HEinψ: E ∈ free_evars (ψ1 $ ψ2)
wfψ1: well_formed ψ1 = true
H: size' ψ1 ≤ sz
wfψ2: well_formed ψ2 = true
H0: size' ψ2 ≤ sz
pf₁: Γ ⊢i ψ1^[[evar:E↦p]] <---> ψ1^[[evar:E↦q]] using gpi
pf₂: Γ ⊢i ψ2^[[evar:E↦p]] <---> ψ2^[[evar:E↦q]] using gpi
Γ ⊢i ψ1^[[evar:E↦p]] $ ψ2^[[evar:E↦p]] <---> ψ1^[[evar:E↦q]] $ ψ2^[[evar:E↦q]] using gpi
Σ: Signature
sz: nat
Γ: Theory
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
E: evar
exdepth, mudepth: nat
gpi: ProofInfo
pf: Γ ⊢i p <---> q using gpi
IHsz: (ψ : Pattern) (wfψ : well_formed ψ), size' ψ ≤ sz → (EvS : EVarSet) (SvS : SVarSet), ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ p q wfψ wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ ⊆ SvS → Γ ⊢i ψ^[[evar:E↦p]] <---> ψ^[[evar:E↦q]] using gpi
ψ1, ψ2: Pattern
wfψ: well_formed (ψ1 $ ψ2)
Hsz: S (size' ψ1 + size' ψ2) ≤ S sz
EvS: EVarSet
SvS: SVarSet
i':= ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (ψ1 $ ψ2))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (ψ1 $ ψ2))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (ψ1 $ ψ2)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E (ψ1 $ ψ2) p q wfψ wfp wfq): ProofInfo
pile: ProofInfoLe i' gpi
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
E_in_EvS: E ∈ EvS
ψ_sub_EvS: free_evars (ψ1 $ ψ2) ⊆ EvS
p_sub_SvS: free_svars p ⊆ SvS
q_sub_SvS: free_svars q ⊆ SvS
ψ_sub_SvS: free_svars (ψ1 $ ψ2) ⊆ SvS
HEinψ: E ∈ free_evars (ψ1 $ ψ2)
wfψ1: well_formed ψ1 = true
H: size' ψ1 ≤ sz
wfψ2: well_formed ψ2 = true
H0: size' ψ2 ≤ sz
pf₁: Γ ⊢i ψ1^[[evar:E↦p]] <---> ψ1^[[evar:E↦q]] using gpi
pf₂: ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ2)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ2)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ2) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ2 p q wfψ2 wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ2 ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ2 ⊆ SvS → Γ ⊢i ψ2^[[evar:E↦p]] <---> ψ2^[[evar:E↦q]] using gpi

E ∈ EvS
exact E_in_EvS.
Σ: Signature
sz: nat
Γ: Theory
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
E: evar
exdepth, mudepth: nat
gpi: ProofInfo
pf: Γ ⊢i p <---> q using gpi
IHsz: (ψ : Pattern) (wfψ : well_formed ψ), size' ψ ≤ sz → (EvS : EVarSet) (SvS : SVarSet), ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ p q wfψ wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ ⊆ SvS → Γ ⊢i ψ^[[evar:E↦p]] <---> ψ^[[evar:E↦q]] using gpi
ψ1, ψ2: Pattern
wfψ: well_formed (ψ1 $ ψ2)
Hsz: S (size' ψ1 + size' ψ2) ≤ S sz
EvS: EVarSet
SvS: SVarSet
i':= ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (ψ1 $ ψ2))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (ψ1 $ ψ2))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (ψ1 $ ψ2)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E (ψ1 $ ψ2) p q wfψ wfp wfq): ProofInfo
pile: ProofInfoLe i' gpi
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
E_in_EvS: E ∈ EvS
ψ_sub_EvS: free_evars (ψ1 $ ψ2) ⊆ EvS
p_sub_SvS: free_svars p ⊆ SvS
q_sub_SvS: free_svars q ⊆ SvS
ψ_sub_SvS: free_svars (ψ1 $ ψ2) ⊆ SvS
HEinψ: E ∈ free_evars (ψ1 $ ψ2)
wfψ1: well_formed ψ1 = true
H: size' ψ1 ≤ sz
wfψ2: well_formed ψ2 = true
H0: size' ψ2 ≤ sz
pf₁: Γ ⊢i ψ1^[[evar:E↦p]] <---> ψ1^[[evar:E↦q]] using gpi
pf₂: ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ2)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ2)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ2) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ2 p q wfψ2 wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ2 ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ2 ⊆ SvS → Γ ⊢i ψ2^[[evar:E↦p]] <---> ψ2^[[evar:E↦q]] using gpi

free_evars ψ2 ⊆ EvS
Σ: Signature
sz: nat
Γ: Theory
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
E: evar
exdepth, mudepth: nat
gpi: ProofInfo
pf: Γ ⊢i p <---> q using gpi
IHsz: (ψ : Pattern) (wfψ : well_formed ψ), size' ψ ≤ sz → (EvS : EVarSet) (SvS : SVarSet), ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ p q wfψ wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ ⊆ SvS → Γ ⊢i ψ^[[evar:E↦p]] <---> ψ^[[evar:E↦q]] using gpi
ψ1, ψ2: Pattern
wfψ: well_formed (ψ1 $ ψ2)
Hsz: S (size' ψ1 + size' ψ2) ≤ S sz
EvS: EVarSet
SvS: SVarSet
i':= ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (ψ1 $ ψ2))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (ψ1 $ ψ2))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (ψ1 $ ψ2)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E (ψ1 $ ψ2) p q wfψ wfp wfq): ProofInfo
pile: ProofInfoLe i' gpi
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
E_in_EvS: E ∈ EvS
ψ_sub_EvS: free_evars (ψ1 $ ψ2) ⊆ EvS
p_sub_SvS: free_svars p ⊆ SvS
q_sub_SvS: free_svars q ⊆ SvS
ψ_sub_SvS: free_svars (ψ1 $ ψ2) ⊆ SvS
HEinψ: E ∈ free_evars (ψ1 $ ψ2)
wfψ1: well_formed ψ1 = true
H: size' ψ1 ≤ sz
wfψ2: well_formed ψ2 = true
H0: size' ψ2 ≤ sz
pf₁: Γ ⊢i ψ1^[[evar:E↦p]] <---> ψ1^[[evar:E↦q]] using gpi
pf₂: ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ2)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ2)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ2) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ2 p q wfψ2 wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ2 ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ2 ⊆ SvS → Γ ⊢i ψ2^[[evar:E↦p]] <---> ψ2^[[evar:E↦q]] using gpi
free_svars p ⊆ SvS
Σ: Signature
sz: nat
Γ: Theory
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
E: evar
exdepth, mudepth: nat
gpi: ProofInfo
pf: Γ ⊢i p <---> q using gpi
IHsz: (ψ : Pattern) (wfψ : well_formed ψ), size' ψ ≤ sz → (EvS : EVarSet) (SvS : SVarSet), ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ p q wfψ wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ ⊆ SvS → Γ ⊢i ψ^[[evar:E↦p]] <---> ψ^[[evar:E↦q]] using gpi
ψ1, ψ2: Pattern
wfψ: well_formed (ψ1 $ ψ2)
Hsz: S (size' ψ1 + size' ψ2) ≤ S sz
EvS: EVarSet
SvS: SVarSet
i':= ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (ψ1 $ ψ2))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (ψ1 $ ψ2))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (ψ1 $ ψ2)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E (ψ1 $ ψ2) p q wfψ wfp wfq): ProofInfo
pile: ProofInfoLe i' gpi
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
E_in_EvS: E ∈ EvS
ψ_sub_EvS: free_evars (ψ1 $ ψ2) ⊆ EvS
p_sub_SvS: free_svars p ⊆ SvS
q_sub_SvS: free_svars q ⊆ SvS
ψ_sub_SvS: free_svars (ψ1 $ ψ2) ⊆ SvS
HEinψ: E ∈ free_evars (ψ1 $ ψ2)
wfψ1: well_formed ψ1 = true
H: size' ψ1 ≤ sz
wfψ2: well_formed ψ2 = true
H0: size' ψ2 ≤ sz
pf₁: Γ ⊢i ψ1^[[evar:E↦p]] <---> ψ1^[[evar:E↦q]] using gpi
pf₂: ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ2)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ2)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ2) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ2 p q wfψ2 wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ2 ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ2 ⊆ SvS → Γ ⊢i ψ2^[[evar:E↦p]] <---> ψ2^[[evar:E↦q]] using gpi
free_svars q ⊆ SvS
Σ: Signature
sz: nat
Γ: Theory
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
E: evar
exdepth, mudepth: nat
gpi: ProofInfo
pf: Γ ⊢i p <---> q using gpi
IHsz: (ψ : Pattern) (wfψ : well_formed ψ), size' ψ ≤ sz → (EvS : EVarSet) (SvS : SVarSet), ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ p q wfψ wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ ⊆ SvS → Γ ⊢i ψ^[[evar:E↦p]] <---> ψ^[[evar:E↦q]] using gpi
ψ1, ψ2: Pattern
wfψ: well_formed (ψ1 $ ψ2)
Hsz: S (size' ψ1 + size' ψ2) ≤ S sz
EvS: EVarSet
SvS: SVarSet
i':= ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (ψ1 $ ψ2))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (ψ1 $ ψ2))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (ψ1 $ ψ2)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E (ψ1 $ ψ2) p q wfψ wfp wfq): ProofInfo
pile: ProofInfoLe i' gpi
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
E_in_EvS: E ∈ EvS
ψ_sub_EvS: free_evars (ψ1 $ ψ2) ⊆ EvS
p_sub_SvS: free_svars p ⊆ SvS
q_sub_SvS: free_svars q ⊆ SvS
ψ_sub_SvS: free_svars (ψ1 $ ψ2) ⊆ SvS
HEinψ: E ∈ free_evars (ψ1 $ ψ2)
wfψ1: well_formed ψ1 = true
H: size' ψ1 ≤ sz
wfψ2: well_formed ψ2 = true
H0: size' ψ2 ≤ sz
pf₁: Γ ⊢i ψ1^[[evar:E↦p]] <---> ψ1^[[evar:E↦q]] using gpi
pf₂: ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ2)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ2)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ2) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ2 p q wfψ2 wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ2 ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ2 ⊆ SvS → Γ ⊢i ψ2^[[evar:E↦p]] <---> ψ2^[[evar:E↦q]] using gpi
free_svars ψ2 ⊆ SvS
Σ: Signature
sz: nat
Γ: Theory
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
E: evar
exdepth, mudepth: nat
gpi: ProofInfo
pf: Γ ⊢i p <---> q using gpi
IHsz: (ψ : Pattern) (wfψ : well_formed ψ), size' ψ ≤ sz → (EvS : EVarSet) (SvS : SVarSet), ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ p q wfψ wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ ⊆ SvS → Γ ⊢i ψ^[[evar:E↦p]] <---> ψ^[[evar:E↦q]] using gpi
ψ1, ψ2: Pattern
wfψ: well_formed (ψ1 $ ψ2)
Hsz: S (size' ψ1 + size' ψ2) ≤ S sz
EvS: EVarSet
SvS: SVarSet
i':= ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (ψ1 $ ψ2))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (ψ1 $ ψ2))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (ψ1 $ ψ2)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E (ψ1 $ ψ2) p q wfψ wfp wfq): ProofInfo
pile: ProofInfoLe i' gpi
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
E_in_EvS: E ∈ EvS
ψ_sub_EvS: free_evars (ψ1 $ ψ2) ⊆ EvS
p_sub_SvS: free_svars p ⊆ SvS
q_sub_SvS: free_svars q ⊆ SvS
ψ_sub_SvS: free_svars (ψ1 $ ψ2) ⊆ SvS
HEinψ: E ∈ free_evars (ψ1 $ ψ2)
wfψ1: well_formed ψ1 = true
H: size' ψ1 ≤ sz
wfψ2: well_formed ψ2 = true
H0: size' ψ2 ≤ sz
pf₁: Γ ⊢i ψ1^[[evar:E↦p]] <---> ψ1^[[evar:E↦q]] using gpi
pf₂: Γ ⊢i ψ2^[[evar:E↦p]] <---> ψ2^[[evar:E↦q]] using gpi
Γ ⊢i ψ1^[[evar:E↦p]] $ ψ2^[[evar:E↦p]] <---> ψ1^[[evar:E↦q]] $ ψ2^[[evar:E↦q]] using gpi
Σ: Signature
sz: nat
Γ: Theory
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
E: evar
exdepth, mudepth: nat
gpi: ProofInfo
pf: Γ ⊢i p <---> q using gpi
IHsz: (ψ : Pattern) (wfψ : well_formed ψ), size' ψ ≤ sz → (EvS : EVarSet) (SvS : SVarSet), ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ p q wfψ wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ ⊆ SvS → Γ ⊢i ψ^[[evar:E↦p]] <---> ψ^[[evar:E↦q]] using gpi
ψ1, ψ2: Pattern
wfψ: well_formed (ψ1 $ ψ2)
Hsz: S (size' ψ1 + size' ψ2) ≤ S sz
EvS: EVarSet
SvS: SVarSet
i':= ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (ψ1 $ ψ2))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (ψ1 $ ψ2))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (ψ1 $ ψ2)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E (ψ1 $ ψ2) p q wfψ wfp wfq): ProofInfo
pile: ProofInfoLe i' gpi
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
E_in_EvS: E ∈ EvS
ψ_sub_EvS: free_evars (ψ1 $ ψ2) ⊆ EvS
p_sub_SvS: free_svars p ⊆ SvS
q_sub_SvS: free_svars q ⊆ SvS
ψ_sub_SvS: free_svars (ψ1 $ ψ2) ⊆ SvS
HEinψ: E ∈ free_evars (ψ1 $ ψ2)
wfψ1: well_formed ψ1 = true
H: size' ψ1 ≤ sz
wfψ2: well_formed ψ2 = true
H0: size' ψ2 ≤ sz
pf₁: Γ ⊢i ψ1^[[evar:E↦p]] <---> ψ1^[[evar:E↦q]] using gpi
pf₂: ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ2)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ2)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ2) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ2 p q wfψ2 wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ2 ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ2 ⊆ SvS → Γ ⊢i ψ2^[[evar:E↦p]] <---> ψ2^[[evar:E↦q]] using gpi

free_evars ψ2 ⊆ EvS
abstract ( simpl in ψ_sub_EvS; clear -ψ_sub_EvS; set_solver ).
Σ: Signature
sz: nat
Γ: Theory
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
E: evar
exdepth, mudepth: nat
gpi: ProofInfo
pf: Γ ⊢i p <---> q using gpi
IHsz: (ψ : Pattern) (wfψ : well_formed ψ), size' ψ ≤ sz → (EvS : EVarSet) (SvS : SVarSet), ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ p q wfψ wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ ⊆ SvS → Γ ⊢i ψ^[[evar:E↦p]] <---> ψ^[[evar:E↦q]] using gpi
ψ1, ψ2: Pattern
wfψ: well_formed (ψ1 $ ψ2)
Hsz: S (size' ψ1 + size' ψ2) ≤ S sz
EvS: EVarSet
SvS: SVarSet
i':= ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (ψ1 $ ψ2))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (ψ1 $ ψ2))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (ψ1 $ ψ2)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E (ψ1 $ ψ2) p q wfψ wfp wfq): ProofInfo
pile: ProofInfoLe i' gpi
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
E_in_EvS: E ∈ EvS
ψ_sub_EvS: free_evars (ψ1 $ ψ2) ⊆ EvS
p_sub_SvS: free_svars p ⊆ SvS
q_sub_SvS: free_svars q ⊆ SvS
ψ_sub_SvS: free_svars (ψ1 $ ψ2) ⊆ SvS
HEinψ: E ∈ free_evars (ψ1 $ ψ2)
wfψ1: well_formed ψ1 = true
H: size' ψ1 ≤ sz
wfψ2: well_formed ψ2 = true
H0: size' ψ2 ≤ sz
pf₁: Γ ⊢i ψ1^[[evar:E↦p]] <---> ψ1^[[evar:E↦q]] using gpi
pf₂: ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ2)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ2)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ2) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ2 p q wfψ2 wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ2 ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ2 ⊆ SvS → Γ ⊢i ψ2^[[evar:E↦p]] <---> ψ2^[[evar:E↦q]] using gpi

free_svars p ⊆ SvS
Σ: Signature
sz: nat
Γ: Theory
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
E: evar
exdepth, mudepth: nat
gpi: ProofInfo
pf: Γ ⊢i p <---> q using gpi
IHsz: (ψ : Pattern) (wfψ : well_formed ψ), size' ψ ≤ sz → (EvS : EVarSet) (SvS : SVarSet), ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ p q wfψ wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ ⊆ SvS → Γ ⊢i ψ^[[evar:E↦p]] <---> ψ^[[evar:E↦q]] using gpi
ψ1, ψ2: Pattern
wfψ: well_formed (ψ1 $ ψ2)
Hsz: S (size' ψ1 + size' ψ2) ≤ S sz
EvS: EVarSet
SvS: SVarSet
i':= ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (ψ1 $ ψ2))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (ψ1 $ ψ2))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (ψ1 $ ψ2)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E (ψ1 $ ψ2) p q wfψ wfp wfq): ProofInfo
pile: ProofInfoLe i' gpi
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
E_in_EvS: E ∈ EvS
ψ_sub_EvS: free_evars (ψ1 $ ψ2) ⊆ EvS
p_sub_SvS: free_svars p ⊆ SvS
q_sub_SvS: free_svars q ⊆ SvS
ψ_sub_SvS: free_svars (ψ1 $ ψ2) ⊆ SvS
HEinψ: E ∈ free_evars (ψ1 $ ψ2)
wfψ1: well_formed ψ1 = true
H: size' ψ1 ≤ sz
wfψ2: well_formed ψ2 = true
H0: size' ψ2 ≤ sz
pf₁: Γ ⊢i ψ1^[[evar:E↦p]] <---> ψ1^[[evar:E↦q]] using gpi
pf₂: ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ2)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ2)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ2) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ2 p q wfψ2 wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ2 ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ2 ⊆ SvS → Γ ⊢i ψ2^[[evar:E↦p]] <---> ψ2^[[evar:E↦q]] using gpi
free_svars q ⊆ SvS
Σ: Signature
sz: nat
Γ: Theory
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
E: evar
exdepth, mudepth: nat
gpi: ProofInfo
pf: Γ ⊢i p <---> q using gpi
IHsz: (ψ : Pattern) (wfψ : well_formed ψ), size' ψ ≤ sz → (EvS : EVarSet) (SvS : SVarSet), ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ p q wfψ wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ ⊆ SvS → Γ ⊢i ψ^[[evar:E↦p]] <---> ψ^[[evar:E↦q]] using gpi
ψ1, ψ2: Pattern
wfψ: well_formed (ψ1 $ ψ2)
Hsz: S (size' ψ1 + size' ψ2) ≤ S sz
EvS: EVarSet
SvS: SVarSet
i':= ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (ψ1 $ ψ2))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (ψ1 $ ψ2))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (ψ1 $ ψ2)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E (ψ1 $ ψ2) p q wfψ wfp wfq): ProofInfo
pile: ProofInfoLe i' gpi
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
E_in_EvS: E ∈ EvS
ψ_sub_EvS: free_evars (ψ1 $ ψ2) ⊆ EvS
p_sub_SvS: free_svars p ⊆ SvS
q_sub_SvS: free_svars q ⊆ SvS
ψ_sub_SvS: free_svars (ψ1 $ ψ2) ⊆ SvS
HEinψ: E ∈ free_evars (ψ1 $ ψ2)
wfψ1: well_formed ψ1 = true
H: size' ψ1 ≤ sz
wfψ2: well_formed ψ2 = true
H0: size' ψ2 ≤ sz
pf₁: Γ ⊢i ψ1^[[evar:E↦p]] <---> ψ1^[[evar:E↦q]] using gpi
pf₂: ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ2)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ2)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ2) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ2 p q wfψ2 wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ2 ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ2 ⊆ SvS → Γ ⊢i ψ2^[[evar:E↦p]] <---> ψ2^[[evar:E↦q]] using gpi
free_svars ψ2 ⊆ SvS
Σ: Signature
sz: nat
Γ: Theory
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
E: evar
exdepth, mudepth: nat
gpi: ProofInfo
pf: Γ ⊢i p <---> q using gpi
IHsz: (ψ : Pattern) (wfψ : well_formed ψ), size' ψ ≤ sz → (EvS : EVarSet) (SvS : SVarSet), ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ p q wfψ wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ ⊆ SvS → Γ ⊢i ψ^[[evar:E↦p]] <---> ψ^[[evar:E↦q]] using gpi
ψ1, ψ2: Pattern
wfψ: well_formed (ψ1 $ ψ2)
Hsz: S (size' ψ1 + size' ψ2) ≤ S sz
EvS: EVarSet
SvS: SVarSet
i':= ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (ψ1 $ ψ2))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (ψ1 $ ψ2))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (ψ1 $ ψ2)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E (ψ1 $ ψ2) p q wfψ wfp wfq): ProofInfo
pile: ProofInfoLe i' gpi
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
E_in_EvS: E ∈ EvS
ψ_sub_EvS: free_evars (ψ1 $ ψ2) ⊆ EvS
p_sub_SvS: free_svars p ⊆ SvS
q_sub_SvS: free_svars q ⊆ SvS
ψ_sub_SvS: free_svars (ψ1 $ ψ2) ⊆ SvS
HEinψ: E ∈ free_evars (ψ1 $ ψ2)
wfψ1: well_formed ψ1 = true
H: size' ψ1 ≤ sz
wfψ2: well_formed ψ2 = true
H0: size' ψ2 ≤ sz
pf₁: Γ ⊢i ψ1^[[evar:E↦p]] <---> ψ1^[[evar:E↦q]] using gpi
pf₂: Γ ⊢i ψ2^[[evar:E↦p]] <---> ψ2^[[evar:E↦q]] using gpi
Γ ⊢i ψ1^[[evar:E↦p]] $ ψ2^[[evar:E↦p]] <---> ψ1^[[evar:E↦q]] $ ψ2^[[evar:E↦q]] using gpi
Σ: Signature
sz: nat
Γ: Theory
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
E: evar
exdepth, mudepth: nat
gpi: ProofInfo
pf: Γ ⊢i p <---> q using gpi
IHsz: (ψ : Pattern) (wfψ : well_formed ψ), size' ψ ≤ sz → (EvS : EVarSet) (SvS : SVarSet), ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ p q wfψ wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ ⊆ SvS → Γ ⊢i ψ^[[evar:E↦p]] <---> ψ^[[evar:E↦q]] using gpi
ψ1, ψ2: Pattern
wfψ: well_formed (ψ1 $ ψ2)
Hsz: S (size' ψ1 + size' ψ2) ≤ S sz
EvS: EVarSet
SvS: SVarSet
i':= ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (ψ1 $ ψ2))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (ψ1 $ ψ2))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (ψ1 $ ψ2)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E (ψ1 $ ψ2) p q wfψ wfp wfq): ProofInfo
pile: ProofInfoLe i' gpi
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
E_in_EvS: E ∈ EvS
ψ_sub_EvS: free_evars (ψ1 $ ψ2) ⊆ EvS
p_sub_SvS: free_svars p ⊆ SvS
q_sub_SvS: free_svars q ⊆ SvS
ψ_sub_SvS: free_svars (ψ1 $ ψ2) ⊆ SvS
HEinψ: E ∈ free_evars (ψ1 $ ψ2)
wfψ1: well_formed ψ1 = true
H: size' ψ1 ≤ sz
wfψ2: well_formed ψ2 = true
H0: size' ψ2 ≤ sz
pf₁: Γ ⊢i ψ1^[[evar:E↦p]] <---> ψ1^[[evar:E↦q]] using gpi
pf₂: ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ2)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ2)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ2) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ2 p q wfψ2 wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ2 ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ2 ⊆ SvS → Γ ⊢i ψ2^[[evar:E↦p]] <---> ψ2^[[evar:E↦q]] using gpi

free_svars p ⊆ SvS
exact p_sub_SvS.
Σ: Signature
sz: nat
Γ: Theory
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
E: evar
exdepth, mudepth: nat
gpi: ProofInfo
pf: Γ ⊢i p <---> q using gpi
IHsz: (ψ : Pattern) (wfψ : well_formed ψ), size' ψ ≤ sz → (EvS : EVarSet) (SvS : SVarSet), ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ p q wfψ wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ ⊆ SvS → Γ ⊢i ψ^[[evar:E↦p]] <---> ψ^[[evar:E↦q]] using gpi
ψ1, ψ2: Pattern
wfψ: well_formed (ψ1 $ ψ2)
Hsz: S (size' ψ1 + size' ψ2) ≤ S sz
EvS: EVarSet
SvS: SVarSet
i':= ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (ψ1 $ ψ2))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (ψ1 $ ψ2))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (ψ1 $ ψ2)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E (ψ1 $ ψ2) p q wfψ wfp wfq): ProofInfo
pile: ProofInfoLe i' gpi
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
E_in_EvS: E ∈ EvS
ψ_sub_EvS: free_evars (ψ1 $ ψ2) ⊆ EvS
p_sub_SvS: free_svars p ⊆ SvS
q_sub_SvS: free_svars q ⊆ SvS
ψ_sub_SvS: free_svars (ψ1 $ ψ2) ⊆ SvS
HEinψ: E ∈ free_evars (ψ1 $ ψ2)
wfψ1: well_formed ψ1 = true
H: size' ψ1 ≤ sz
wfψ2: well_formed ψ2 = true
H0: size' ψ2 ≤ sz
pf₁: Γ ⊢i ψ1^[[evar:E↦p]] <---> ψ1^[[evar:E↦q]] using gpi
pf₂: ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ2)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ2)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ2) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ2 p q wfψ2 wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ2 ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ2 ⊆ SvS → Γ ⊢i ψ2^[[evar:E↦p]] <---> ψ2^[[evar:E↦q]] using gpi

free_svars q ⊆ SvS
Σ: Signature
sz: nat
Γ: Theory
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
E: evar
exdepth, mudepth: nat
gpi: ProofInfo
pf: Γ ⊢i p <---> q using gpi
IHsz: (ψ : Pattern) (wfψ : well_formed ψ), size' ψ ≤ sz → (EvS : EVarSet) (SvS : SVarSet), ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ p q wfψ wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ ⊆ SvS → Γ ⊢i ψ^[[evar:E↦p]] <---> ψ^[[evar:E↦q]] using gpi
ψ1, ψ2: Pattern
wfψ: well_formed (ψ1 $ ψ2)
Hsz: S (size' ψ1 + size' ψ2) ≤ S sz
EvS: EVarSet
SvS: SVarSet
i':= ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (ψ1 $ ψ2))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (ψ1 $ ψ2))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (ψ1 $ ψ2)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E (ψ1 $ ψ2) p q wfψ wfp wfq): ProofInfo
pile: ProofInfoLe i' gpi
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
E_in_EvS: E ∈ EvS
ψ_sub_EvS: free_evars (ψ1 $ ψ2) ⊆ EvS
p_sub_SvS: free_svars p ⊆ SvS
q_sub_SvS: free_svars q ⊆ SvS
ψ_sub_SvS: free_svars (ψ1 $ ψ2) ⊆ SvS
HEinψ: E ∈ free_evars (ψ1 $ ψ2)
wfψ1: well_formed ψ1 = true
H: size' ψ1 ≤ sz
wfψ2: well_formed ψ2 = true
H0: size' ψ2 ≤ sz
pf₁: Γ ⊢i ψ1^[[evar:E↦p]] <---> ψ1^[[evar:E↦q]] using gpi
pf₂: ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ2)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ2)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ2) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ2 p q wfψ2 wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ2 ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ2 ⊆ SvS → Γ ⊢i ψ2^[[evar:E↦p]] <---> ψ2^[[evar:E↦q]] using gpi
free_svars ψ2 ⊆ SvS
Σ: Signature
sz: nat
Γ: Theory
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
E: evar
exdepth, mudepth: nat
gpi: ProofInfo
pf: Γ ⊢i p <---> q using gpi
IHsz: (ψ : Pattern) (wfψ : well_formed ψ), size' ψ ≤ sz → (EvS : EVarSet) (SvS : SVarSet), ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ p q wfψ wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ ⊆ SvS → Γ ⊢i ψ^[[evar:E↦p]] <---> ψ^[[evar:E↦q]] using gpi
ψ1, ψ2: Pattern
wfψ: well_formed (ψ1 $ ψ2)
Hsz: S (size' ψ1 + size' ψ2) ≤ S sz
EvS: EVarSet
SvS: SVarSet
i':= ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (ψ1 $ ψ2))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (ψ1 $ ψ2))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (ψ1 $ ψ2)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E (ψ1 $ ψ2) p q wfψ wfp wfq): ProofInfo
pile: ProofInfoLe i' gpi
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
E_in_EvS: E ∈ EvS
ψ_sub_EvS: free_evars (ψ1 $ ψ2) ⊆ EvS
p_sub_SvS: free_svars p ⊆ SvS
q_sub_SvS: free_svars q ⊆ SvS
ψ_sub_SvS: free_svars (ψ1 $ ψ2) ⊆ SvS
HEinψ: E ∈ free_evars (ψ1 $ ψ2)
wfψ1: well_formed ψ1 = true
H: size' ψ1 ≤ sz
wfψ2: well_formed ψ2 = true
H0: size' ψ2 ≤ sz
pf₁: Γ ⊢i ψ1^[[evar:E↦p]] <---> ψ1^[[evar:E↦q]] using gpi
pf₂: Γ ⊢i ψ2^[[evar:E↦p]] <---> ψ2^[[evar:E↦q]] using gpi
Γ ⊢i ψ1^[[evar:E↦p]] $ ψ2^[[evar:E↦p]] <---> ψ1^[[evar:E↦q]] $ ψ2^[[evar:E↦q]] using gpi
Σ: Signature
sz: nat
Γ: Theory
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
E: evar
exdepth, mudepth: nat
gpi: ProofInfo
pf: Γ ⊢i p <---> q using gpi
IHsz: (ψ : Pattern) (wfψ : well_formed ψ), size' ψ ≤ sz → (EvS : EVarSet) (SvS : SVarSet), ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ p q wfψ wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ ⊆ SvS → Γ ⊢i ψ^[[evar:E↦p]] <---> ψ^[[evar:E↦q]] using gpi
ψ1, ψ2: Pattern
wfψ: well_formed (ψ1 $ ψ2)
Hsz: S (size' ψ1 + size' ψ2) ≤ S sz
EvS: EVarSet
SvS: SVarSet
i':= ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (ψ1 $ ψ2))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (ψ1 $ ψ2))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (ψ1 $ ψ2)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E (ψ1 $ ψ2) p q wfψ wfp wfq): ProofInfo
pile: ProofInfoLe i' gpi
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
E_in_EvS: E ∈ EvS
ψ_sub_EvS: free_evars (ψ1 $ ψ2) ⊆ EvS
p_sub_SvS: free_svars p ⊆ SvS
q_sub_SvS: free_svars q ⊆ SvS
ψ_sub_SvS: free_svars (ψ1 $ ψ2) ⊆ SvS
HEinψ: E ∈ free_evars (ψ1 $ ψ2)
wfψ1: well_formed ψ1 = true
H: size' ψ1 ≤ sz
wfψ2: well_formed ψ2 = true
H0: size' ψ2 ≤ sz
pf₁: Γ ⊢i ψ1^[[evar:E↦p]] <---> ψ1^[[evar:E↦q]] using gpi
pf₂: ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ2)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ2)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ2) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ2 p q wfψ2 wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ2 ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ2 ⊆ SvS → Γ ⊢i ψ2^[[evar:E↦p]] <---> ψ2^[[evar:E↦q]] using gpi

free_svars q ⊆ SvS
exact q_sub_SvS.
Σ: Signature
sz: nat
Γ: Theory
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
E: evar
exdepth, mudepth: nat
gpi: ProofInfo
pf: Γ ⊢i p <---> q using gpi
IHsz: (ψ : Pattern) (wfψ : well_formed ψ), size' ψ ≤ sz → (EvS : EVarSet) (SvS : SVarSet), ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ p q wfψ wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ ⊆ SvS → Γ ⊢i ψ^[[evar:E↦p]] <---> ψ^[[evar:E↦q]] using gpi
ψ1, ψ2: Pattern
wfψ: well_formed (ψ1 $ ψ2)
Hsz: S (size' ψ1 + size' ψ2) ≤ S sz
EvS: EVarSet
SvS: SVarSet
i':= ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (ψ1 $ ψ2))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (ψ1 $ ψ2))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (ψ1 $ ψ2)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E (ψ1 $ ψ2) p q wfψ wfp wfq): ProofInfo
pile: ProofInfoLe i' gpi
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
E_in_EvS: E ∈ EvS
ψ_sub_EvS: free_evars (ψ1 $ ψ2) ⊆ EvS
p_sub_SvS: free_svars p ⊆ SvS
q_sub_SvS: free_svars q ⊆ SvS
ψ_sub_SvS: free_svars (ψ1 $ ψ2) ⊆ SvS
HEinψ: E ∈ free_evars (ψ1 $ ψ2)
wfψ1: well_formed ψ1 = true
H: size' ψ1 ≤ sz
wfψ2: well_formed ψ2 = true
H0: size' ψ2 ≤ sz
pf₁: Γ ⊢i ψ1^[[evar:E↦p]] <---> ψ1^[[evar:E↦q]] using gpi
pf₂: ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ2)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ2)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ2) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ2 p q wfψ2 wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ2 ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ2 ⊆ SvS → Γ ⊢i ψ2^[[evar:E↦p]] <---> ψ2^[[evar:E↦q]] using gpi

free_svars ψ2 ⊆ SvS
Σ: Signature
sz: nat
Γ: Theory
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
E: evar
exdepth, mudepth: nat
gpi: ProofInfo
pf: Γ ⊢i p <---> q using gpi
IHsz: (ψ : Pattern) (wfψ : well_formed ψ), size' ψ ≤ sz → (EvS : EVarSet) (SvS : SVarSet), ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ p q wfψ wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ ⊆ SvS → Γ ⊢i ψ^[[evar:E↦p]] <---> ψ^[[evar:E↦q]] using gpi
ψ1, ψ2: Pattern
wfψ: well_formed (ψ1 $ ψ2)
Hsz: S (size' ψ1 + size' ψ2) ≤ S sz
EvS: EVarSet
SvS: SVarSet
i':= ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (ψ1 $ ψ2))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (ψ1 $ ψ2))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (ψ1 $ ψ2)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E (ψ1 $ ψ2) p q wfψ wfp wfq): ProofInfo
pile: ProofInfoLe i' gpi
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
E_in_EvS: E ∈ EvS
ψ_sub_EvS: free_evars (ψ1 $ ψ2) ⊆ EvS
p_sub_SvS: free_svars p ⊆ SvS
q_sub_SvS: free_svars q ⊆ SvS
ψ_sub_SvS: free_svars (ψ1 $ ψ2) ⊆ SvS
HEinψ: E ∈ free_evars (ψ1 $ ψ2)
wfψ1: well_formed ψ1 = true
H: size' ψ1 ≤ sz
wfψ2: well_formed ψ2 = true
H0: size' ψ2 ≤ sz
pf₁: Γ ⊢i ψ1^[[evar:E↦p]] <---> ψ1^[[evar:E↦q]] using gpi
pf₂: Γ ⊢i ψ2^[[evar:E↦p]] <---> ψ2^[[evar:E↦q]] using gpi
Γ ⊢i ψ1^[[evar:E↦p]] $ ψ2^[[evar:E↦p]] <---> ψ1^[[evar:E↦q]] $ ψ2^[[evar:E↦q]] using gpi
Σ: Signature
sz: nat
Γ: Theory
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
E: evar
exdepth, mudepth: nat
gpi: ProofInfo
pf: Γ ⊢i p <---> q using gpi
IHsz: (ψ : Pattern) (wfψ : well_formed ψ), size' ψ ≤ sz → (EvS : EVarSet) (SvS : SVarSet), ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ p q wfψ wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ ⊆ SvS → Γ ⊢i ψ^[[evar:E↦p]] <---> ψ^[[evar:E↦q]] using gpi
ψ1, ψ2: Pattern
wfψ: well_formed (ψ1 $ ψ2)
Hsz: S (size' ψ1 + size' ψ2) ≤ S sz
EvS: EVarSet
SvS: SVarSet
i':= ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (ψ1 $ ψ2))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (ψ1 $ ψ2))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (ψ1 $ ψ2)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E (ψ1 $ ψ2) p q wfψ wfp wfq): ProofInfo
pile: ProofInfoLe i' gpi
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
E_in_EvS: E ∈ EvS
ψ_sub_EvS: free_evars (ψ1 $ ψ2) ⊆ EvS
p_sub_SvS: free_svars p ⊆ SvS
q_sub_SvS: free_svars q ⊆ SvS
ψ_sub_SvS: free_svars (ψ1 $ ψ2) ⊆ SvS
HEinψ: E ∈ free_evars (ψ1 $ ψ2)
wfψ1: well_formed ψ1 = true
H: size' ψ1 ≤ sz
wfψ2: well_formed ψ2 = true
H0: size' ψ2 ≤ sz
pf₁: Γ ⊢i ψ1^[[evar:E↦p]] <---> ψ1^[[evar:E↦q]] using gpi
pf₂: ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ2)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ2)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ2) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ2 p q wfψ2 wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ2 ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ2 ⊆ SvS → Γ ⊢i ψ2^[[evar:E↦p]] <---> ψ2^[[evar:E↦q]] using gpi

free_svars ψ2 ⊆ SvS
abstract ( simpl in ψ_sub_SvS; clear -ψ_sub_SvS; set_solver ).
Σ: Signature
sz: nat
Γ: Theory
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
E: evar
exdepth, mudepth: nat
gpi: ProofInfo
pf: Γ ⊢i p <---> q using gpi
IHsz: (ψ : Pattern) (wfψ : well_formed ψ), size' ψ ≤ sz → (EvS : EVarSet) (SvS : SVarSet), ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ p q wfψ wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ ⊆ SvS → Γ ⊢i ψ^[[evar:E↦p]] <---> ψ^[[evar:E↦q]] using gpi
ψ1, ψ2: Pattern
wfψ: well_formed (ψ1 $ ψ2)
Hsz: S (size' ψ1 + size' ψ2) ≤ S sz
EvS: EVarSet
SvS: SVarSet
i':= ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (ψ1 $ ψ2))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (ψ1 $ ψ2))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (ψ1 $ ψ2)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E (ψ1 $ ψ2) p q wfψ wfp wfq): ProofInfo
pile: ProofInfoLe i' gpi
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
E_in_EvS: E ∈ EvS
ψ_sub_EvS: free_evars (ψ1 $ ψ2) ⊆ EvS
p_sub_SvS: free_svars p ⊆ SvS
q_sub_SvS: free_svars q ⊆ SvS
ψ_sub_SvS: free_svars (ψ1 $ ψ2) ⊆ SvS
HEinψ: E ∈ free_evars (ψ1 $ ψ2)
wfψ1: well_formed ψ1 = true
H: size' ψ1 ≤ sz
wfψ2: well_formed ψ2 = true
H0: size' ψ2 ≤ sz
pf₁: Γ ⊢i ψ1^[[evar:E↦p]] <---> ψ1^[[evar:E↦q]] using gpi
pf₂: Γ ⊢i ψ2^[[evar:E↦p]] <---> ψ2^[[evar:E↦q]] using gpi

Γ ⊢i ψ1^[[evar:E↦p]] $ ψ2^[[evar:E↦p]] <---> ψ1^[[evar:E↦q]] $ ψ2^[[evar:E↦q]] using gpi
Σ: Signature
sz: nat
Γ: Theory
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
E: evar
exdepth, mudepth: nat
gpi: ProofInfo
pf: Γ ⊢i p <---> q using gpi
IHsz: (ψ : Pattern) (wfψ : well_formed ψ), size' ψ ≤ sz → (EvS : EVarSet) (SvS : SVarSet), ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ p q wfψ wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ ⊆ SvS → Γ ⊢i ψ^[[evar:E↦p]] <---> ψ^[[evar:E↦q]] using gpi
ψ1, ψ2: Pattern
wfψ: well_formed (ψ1 $ ψ2)
Hsz: S (size' ψ1 + size' ψ2) ≤ S sz
EvS: EVarSet
SvS: SVarSet
i':= ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (ψ1 $ ψ2))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (ψ1 $ ψ2))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (ψ1 $ ψ2)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E (ψ1 $ ψ2) p q wfψ wfp wfq): ProofInfo
pile: ProofInfoLe i' gpi
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
E_in_EvS: E ∈ EvS
ψ_sub_EvS: free_evars (ψ1 $ ψ2) ⊆ EvS
p_sub_SvS: free_svars p ⊆ SvS
q_sub_SvS: free_svars q ⊆ SvS
ψ_sub_SvS: free_svars (ψ1 $ ψ2) ⊆ SvS
HEinψ: E ∈ free_evars (ψ1 $ ψ2)
wfψ1: well_formed ψ1 = true
H: size' ψ1 ≤ sz
wfψ2: well_formed ψ2 = true
H0: size' ψ2 ≤ sz
pf₁: Γ ⊢i ψ1^[[evar:E↦p]] <---> ψ1^[[evar:E↦q]] using gpi
pf₂: Γ ⊢i ψ2^[[evar:E↦p]] <---> ψ2^[[evar:E↦q]] using gpi

ProofInfoLe (ExGen := ∅, SVSubst := ∅, KT := false, FP := {[ψ1^[[evar:E↦p]] ↾ well_formed_free_evar_subst_0 E ψ1 p wfp wfψ1; ψ1^[[evar:E↦q]] ↾ well_formed_free_evar_subst_0 E ψ1 q wfq wfψ1; ψ2^[[evar:E↦p]] ↾ well_formed_free_evar_subst_0 E ψ2 p wfp wfψ2; ψ2^[[evar:E↦q]] ↾ well_formed_free_evar_subst_0 E ψ2 q wfq wfψ2]}) gpi
Σ: Signature
sz: nat
Γ: Theory
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
E: evar
exdepth, mudepth: nat
gpi: ProofInfo
pf: Γ ⊢i p <---> q using gpi
IHsz: (ψ : Pattern) (wfψ : well_formed ψ), size' ψ ≤ sz → (EvS : EVarSet) (SvS : SVarSet), ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ p q wfψ wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ ⊆ SvS → Γ ⊢i ψ^[[evar:E↦p]] <---> ψ^[[evar:E↦q]] using gpi
ψ1, ψ2: Pattern
wfψ: well_formed (ψ1 $ ψ2)
Hsz: S (size' ψ1 + size' ψ2) ≤ S sz
EvS: EVarSet
SvS: SVarSet
i':= ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (ψ1 $ ψ2))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (ψ1 $ ψ2))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (ψ1 $ ψ2)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E (ψ1 $ ψ2) p q wfψ wfp wfq): ProofInfo
pile: ProofInfoLe i' gpi
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
E_in_EvS: E ∈ EvS
ψ_sub_EvS: free_evars (ψ1 $ ψ2) ⊆ EvS
p_sub_SvS: free_svars p ⊆ SvS
q_sub_SvS: free_svars q ⊆ SvS
ψ_sub_SvS: free_svars (ψ1 $ ψ2) ⊆ SvS
HEinψ: E ∈ free_evars (ψ1 $ ψ2)
wfψ1: well_formed ψ1 = true
H: size' ψ1 ≤ sz
wfψ2: well_formed ψ2 = true
H0: size' ψ2 ≤ sz
pf₁: Γ ⊢i ψ1^[[evar:E↦p]] <---> ψ1^[[evar:E↦q]] using gpi
pf₂: Γ ⊢i ψ2^[[evar:E↦p]] <---> ψ2^[[evar:E↦q]] using gpi

ProofInfoLe (ExGen := ∅, SVSubst := ∅, KT := false, FP := {[ψ1^[[evar:E↦p]] ↾ well_formed_free_evar_subst_0 E ψ1 p wfp wfψ1; ψ1^[[evar:E↦q]] ↾ well_formed_free_evar_subst_0 E ψ1 q wfq wfψ1; ψ2^[[evar:E↦p]] ↾ well_formed_free_evar_subst_0 E ψ2 p wfp wfψ2; ψ2^[[evar:E↦q]] ↾ well_formed_free_evar_subst_0 E ψ2 q wfq wfψ2]}) i'
Σ: Signature
sz: nat
Γ: Theory
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
E: evar
exdepth, mudepth: nat
gpi: ProofInfo
pf: Γ ⊢i p <---> q using gpi
IHsz: (ψ : Pattern) (wfψ : well_formed ψ), size' ψ ≤ sz → (EvS : EVarSet) (SvS : SVarSet), ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ p q wfψ wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ ⊆ SvS → Γ ⊢i ψ^[[evar:E↦p]] <---> ψ^[[evar:E↦q]] using gpi
ψ1, ψ2: Pattern
wfψ: well_formed (ψ1 $ ψ2)
Hsz: S (size' ψ1 + size' ψ2) ≤ S sz
EvS: EVarSet
SvS: SVarSet
i':= ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (ψ1 $ ψ2))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (ψ1 $ ψ2))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (ψ1 $ ψ2)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E (ψ1 $ ψ2) p q wfψ wfp wfq): ProofInfo
pile: ProofInfoLe i' gpi
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
E_in_EvS: E ∈ EvS
ψ_sub_EvS: free_evars (ψ1 $ ψ2) ⊆ EvS
p_sub_SvS: free_svars p ⊆ SvS
q_sub_SvS: free_svars q ⊆ SvS
ψ_sub_SvS: free_svars (ψ1 $ ψ2) ⊆ SvS
HEinψ: E ∈ free_evars (ψ1 $ ψ2)
wfψ1: well_formed ψ1 = true
H: size' ψ1 ≤ sz
wfψ2: well_formed ψ2 = true
H0: size' ψ2 ≤ sz
pf₁: Γ ⊢i ψ1^[[evar:E↦p]] <---> ψ1^[[evar:E↦q]] using gpi
pf₂: Γ ⊢i ψ2^[[evar:E↦p]] <---> ψ2^[[evar:E↦q]] using gpi

ProofInfoLe (ExGen := ∅, SVSubst := ∅, KT := false, FP := {[ψ1^[[evar:E↦p]] ↾ well_formed_free_evar_subst_0 E ψ1 p wfp wfψ1; ψ1^[[evar:E↦q]] ↾ well_formed_free_evar_subst_0 E ψ1 q wfq wfψ1; ψ2^[[evar:E↦p]] ↾ well_formed_free_evar_subst_0 E ψ2 p wfp wfψ2; ψ2^[[evar:E↦q]] ↾ well_formed_free_evar_subst_0 E ψ2 q wfq wfψ2]}) (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (ψ1 $ ψ2))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (ψ1 $ ψ2))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (ψ1 $ ψ2)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E (ψ1 $ ψ2) p q wfψ wfp wfq))
Σ: Signature
sz: nat
Γ: Theory
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
E: evar
exdepth, mudepth: nat
gpi: ProofInfo
pf: Γ ⊢i p <---> q using gpi
IHsz: (ψ : Pattern) (wfψ : well_formed ψ), size' ψ ≤ sz → (EvS : EVarSet) (SvS : SVarSet), ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ p q wfψ wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ ⊆ SvS → Γ ⊢i ψ^[[evar:E↦p]] <---> ψ^[[evar:E↦q]] using gpi
ψ1, ψ2: Pattern
wfψ: well_formed (ψ1 $ ψ2)
Hsz: S (size' ψ1 + size' ψ2) ≤ S sz
EvS: EVarSet
SvS: SVarSet
i':= ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (ψ1 $ ψ2))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (ψ1 $ ψ2))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (ψ1 $ ψ2)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E (ψ1 $ ψ2) p q wfψ wfp wfq): ProofInfo
pile: ProofInfoLe i' gpi
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
E_in_EvS: E ∈ EvS
ψ_sub_EvS: free_evars (ψ1 $ ψ2) ⊆ EvS
p_sub_SvS: free_svars p ⊆ SvS
q_sub_SvS: free_svars q ⊆ SvS
ψ_sub_SvS: free_svars (ψ1 $ ψ2) ⊆ SvS
HEinψ: E ∈ free_evars (ψ1 $ ψ2)
wfψ1: well_formed ψ1 = true
H: size' ψ1 ≤ sz
wfψ2: well_formed ψ2 = true
H0: size' ψ2 ≤ sz
pf₁: Γ ⊢i ψ1^[[evar:E↦p]] <---> ψ1^[[evar:E↦q]] using gpi
pf₂: Γ ⊢i ψ2^[[evar:E↦p]] <---> ψ2^[[evar:E↦q]] using gpi

∅ ⊆ list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (ψ1 $ ψ2)))
Σ: Signature
sz: nat
Γ: Theory
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
E: evar
exdepth, mudepth: nat
gpi: ProofInfo
pf: Γ ⊢i p <---> q using gpi
IHsz: (ψ : Pattern) (wfψ : well_formed ψ), size' ψ ≤ sz → (EvS : EVarSet) (SvS : SVarSet), ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ p q wfψ wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ ⊆ SvS → Γ ⊢i ψ^[[evar:E↦p]] <---> ψ^[[evar:E↦q]] using gpi
ψ1, ψ2: Pattern
wfψ: well_formed (ψ1 $ ψ2)
Hsz: S (size' ψ1 + size' ψ2) ≤ S sz
EvS: EVarSet
SvS: SVarSet
i':= ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (ψ1 $ ψ2))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (ψ1 $ ψ2))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (ψ1 $ ψ2)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E (ψ1 $ ψ2) p q wfψ wfp wfq): ProofInfo
pile: ProofInfoLe i' gpi
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
E_in_EvS: E ∈ EvS
ψ_sub_EvS: free_evars (ψ1 $ ψ2) ⊆ EvS
p_sub_SvS: free_svars p ⊆ SvS
q_sub_SvS: free_svars q ⊆ SvS
ψ_sub_SvS: free_svars (ψ1 $ ψ2) ⊆ SvS
HEinψ: E ∈ free_evars (ψ1 $ ψ2)
wfψ1: well_formed ψ1 = true
H: size' ψ1 ≤ sz
wfψ2: well_formed ψ2 = true
H0: size' ψ2 ≤ sz
pf₁: Γ ⊢i ψ1^[[evar:E↦p]] <---> ψ1^[[evar:E↦q]] using gpi
pf₂: Γ ⊢i ψ2^[[evar:E↦p]] <---> ψ2^[[evar:E↦q]] using gpi
∅ ⊆ list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (ψ1 $ ψ2)))
Σ: Signature
sz: nat
Γ: Theory
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
E: evar
exdepth, mudepth: nat
gpi: ProofInfo
pf: Γ ⊢i p <---> q using gpi
IHsz: (ψ : Pattern) (wfψ : well_formed ψ), size' ψ ≤ sz → (EvS : EVarSet) (SvS : SVarSet), ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ p q wfψ wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ ⊆ SvS → Γ ⊢i ψ^[[evar:E↦p]] <---> ψ^[[evar:E↦q]] using gpi
ψ1, ψ2: Pattern
wfψ: well_formed (ψ1 $ ψ2)
Hsz: S (size' ψ1 + size' ψ2) ≤ S sz
EvS: EVarSet
SvS: SVarSet
i':= ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (ψ1 $ ψ2))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (ψ1 $ ψ2))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (ψ1 $ ψ2)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E (ψ1 $ ψ2) p q wfψ wfp wfq): ProofInfo
pile: ProofInfoLe i' gpi
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
E_in_EvS: E ∈ EvS
ψ_sub_EvS: free_evars (ψ1 $ ψ2) ⊆ EvS
p_sub_SvS: free_svars p ⊆ SvS
q_sub_SvS: free_svars q ⊆ SvS
ψ_sub_SvS: free_svars (ψ1 $ ψ2) ⊆ SvS
HEinψ: E ∈ free_evars (ψ1 $ ψ2)
wfψ1: well_formed ψ1 = true
H: size' ψ1 ≤ sz
wfψ2: well_formed ψ2 = true
H0: size' ψ2 ≤ sz
pf₁: Γ ⊢i ψ1^[[evar:E↦p]] <---> ψ1^[[evar:E↦q]] using gpi
pf₂: Γ ⊢i ψ2^[[evar:E↦p]] <---> ψ2^[[evar:E↦q]] using gpi
false ==> (if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (ψ1 $ ψ2)) then false else true)
Σ: Signature
sz: nat
Γ: Theory
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
E: evar
exdepth, mudepth: nat
gpi: ProofInfo
pf: Γ ⊢i p <---> q using gpi
IHsz: (ψ : Pattern) (wfψ : well_formed ψ), size' ψ ≤ sz → (EvS : EVarSet) (SvS : SVarSet), ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ p q wfψ wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ ⊆ SvS → Γ ⊢i ψ^[[evar:E↦p]] <---> ψ^[[evar:E↦q]] using gpi
ψ1, ψ2: Pattern
wfψ: well_formed (ψ1 $ ψ2)
Hsz: S (size' ψ1 + size' ψ2) ≤ S sz
EvS: EVarSet
SvS: SVarSet
i':= ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (ψ1 $ ψ2))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (ψ1 $ ψ2))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (ψ1 $ ψ2)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E (ψ1 $ ψ2) p q wfψ wfp wfq): ProofInfo
pile: ProofInfoLe i' gpi
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
E_in_EvS: E ∈ EvS
ψ_sub_EvS: free_evars (ψ1 $ ψ2) ⊆ EvS
p_sub_SvS: free_svars p ⊆ SvS
q_sub_SvS: free_svars q ⊆ SvS
ψ_sub_SvS: free_svars (ψ1 $ ψ2) ⊆ SvS
HEinψ: E ∈ free_evars (ψ1 $ ψ2)
wfψ1: well_formed ψ1 = true
H: size' ψ1 ≤ sz
wfψ2: well_formed ψ2 = true
H0: size' ψ2 ≤ sz
pf₁: Γ ⊢i ψ1^[[evar:E↦p]] <---> ψ1^[[evar:E↦q]] using gpi
pf₂: Γ ⊢i ψ2^[[evar:E↦p]] <---> ψ2^[[evar:E↦q]] using gpi
{[ψ1^[[evar:E↦p]] ↾ well_formed_free_evar_subst_0 E ψ1 p wfp wfψ1; ψ1^[[evar:E↦q]] ↾ well_formed_free_evar_subst_0 E ψ1 q wfq wfψ1; ψ2^[[evar:E↦p]] ↾ well_formed_free_evar_subst_0 E ψ2 p wfp wfψ2; ψ2^[[evar:E↦q]] ↾ well_formed_free_evar_subst_0 E ψ2 q wfq wfψ2]} ⊆ gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E (ψ1 $ ψ2) p q wfψ wfp wfq)
Σ: Signature
sz: nat
Γ: Theory
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
E: evar
exdepth, mudepth: nat
gpi: ProofInfo
pf: Γ ⊢i p <---> q using gpi
IHsz: (ψ : Pattern) (wfψ : well_formed ψ), size' ψ ≤ sz → (EvS : EVarSet) (SvS : SVarSet), ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ p q wfψ wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ ⊆ SvS → Γ ⊢i ψ^[[evar:E↦p]] <---> ψ^[[evar:E↦q]] using gpi
ψ1, ψ2: Pattern
wfψ: well_formed (ψ1 $ ψ2)
Hsz: S (size' ψ1 + size' ψ2) ≤ S sz
EvS: EVarSet
SvS: SVarSet
i':= ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (ψ1 $ ψ2))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (ψ1 $ ψ2))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (ψ1 $ ψ2)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E (ψ1 $ ψ2) p q wfψ wfp wfq): ProofInfo
pile: ProofInfoLe i' gpi
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
E_in_EvS: E ∈ EvS
ψ_sub_EvS: free_evars (ψ1 $ ψ2) ⊆ EvS
p_sub_SvS: free_svars p ⊆ SvS
q_sub_SvS: free_svars q ⊆ SvS
ψ_sub_SvS: free_svars (ψ1 $ ψ2) ⊆ SvS
HEinψ: E ∈ free_evars (ψ1 $ ψ2)
wfψ1: well_formed ψ1 = true
H: size' ψ1 ≤ sz
wfψ2: well_formed ψ2 = true
H0: size' ψ2 ≤ sz
pf₁: Γ ⊢i ψ1^[[evar:E↦p]] <---> ψ1^[[evar:E↦q]] using gpi
pf₂: Γ ⊢i ψ2^[[evar:E↦p]] <---> ψ2^[[evar:E↦q]] using gpi

∅ ⊆ list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (ψ1 $ ψ2)))
clear; set_solver.
Σ: Signature
sz: nat
Γ: Theory
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
E: evar
exdepth, mudepth: nat
gpi: ProofInfo
pf: Γ ⊢i p <---> q using gpi
IHsz: (ψ : Pattern) (wfψ : well_formed ψ), size' ψ ≤ sz → (EvS : EVarSet) (SvS : SVarSet), ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ p q wfψ wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ ⊆ SvS → Γ ⊢i ψ^[[evar:E↦p]] <---> ψ^[[evar:E↦q]] using gpi
ψ1, ψ2: Pattern
wfψ: well_formed (ψ1 $ ψ2)
Hsz: S (size' ψ1 + size' ψ2) ≤ S sz
EvS: EVarSet
SvS: SVarSet
i':= ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (ψ1 $ ψ2))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (ψ1 $ ψ2))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (ψ1 $ ψ2)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E (ψ1 $ ψ2) p q wfψ wfp wfq): ProofInfo
pile: ProofInfoLe i' gpi
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
E_in_EvS: E ∈ EvS
ψ_sub_EvS: free_evars (ψ1 $ ψ2) ⊆ EvS
p_sub_SvS: free_svars p ⊆ SvS
q_sub_SvS: free_svars q ⊆ SvS
ψ_sub_SvS: free_svars (ψ1 $ ψ2) ⊆ SvS
HEinψ: E ∈ free_evars (ψ1 $ ψ2)
wfψ1: well_formed ψ1 = true
H: size' ψ1 ≤ sz
wfψ2: well_formed ψ2 = true
H0: size' ψ2 ≤ sz
pf₁: Γ ⊢i ψ1^[[evar:E↦p]] <---> ψ1^[[evar:E↦q]] using gpi
pf₂: Γ ⊢i ψ2^[[evar:E↦p]] <---> ψ2^[[evar:E↦q]] using gpi

∅ ⊆ list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (ψ1 $ ψ2)))
Σ: Signature
sz: nat
Γ: Theory
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
E: evar
exdepth, mudepth: nat
gpi: ProofInfo
pf: Γ ⊢i p <---> q using gpi
IHsz: (ψ : Pattern) (wfψ : well_formed ψ), size' ψ ≤ sz → (EvS : EVarSet) (SvS : SVarSet), ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ p q wfψ wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ ⊆ SvS → Γ ⊢i ψ^[[evar:E↦p]] <---> ψ^[[evar:E↦q]] using gpi
ψ1, ψ2: Pattern
wfψ: well_formed (ψ1 $ ψ2)
Hsz: S (size' ψ1 + size' ψ2) ≤ S sz
EvS: EVarSet
SvS: SVarSet
i':= ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (ψ1 $ ψ2))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (ψ1 $ ψ2))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (ψ1 $ ψ2)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E (ψ1 $ ψ2) p q wfψ wfp wfq): ProofInfo
pile: ProofInfoLe i' gpi
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
E_in_EvS: E ∈ EvS
ψ_sub_EvS: free_evars (ψ1 $ ψ2) ⊆ EvS
p_sub_SvS: free_svars p ⊆ SvS
q_sub_SvS: free_svars q ⊆ SvS
ψ_sub_SvS: free_svars (ψ1 $ ψ2) ⊆ SvS
HEinψ: E ∈ free_evars (ψ1 $ ψ2)
wfψ1: well_formed ψ1 = true
H: size' ψ1 ≤ sz
wfψ2: well_formed ψ2 = true
H0: size' ψ2 ≤ sz
pf₁: Γ ⊢i ψ1^[[evar:E↦p]] <---> ψ1^[[evar:E↦q]] using gpi
pf₂: Γ ⊢i ψ2^[[evar:E↦p]] <---> ψ2^[[evar:E↦q]] using gpi
false ==> (if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (ψ1 $ ψ2)) then false else true)
Σ: Signature
sz: nat
Γ: Theory
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
E: evar
exdepth, mudepth: nat
gpi: ProofInfo
pf: Γ ⊢i p <---> q using gpi
IHsz: (ψ : Pattern) (wfψ : well_formed ψ), size' ψ ≤ sz → (EvS : EVarSet) (SvS : SVarSet), ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ p q wfψ wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ ⊆ SvS → Γ ⊢i ψ^[[evar:E↦p]] <---> ψ^[[evar:E↦q]] using gpi
ψ1, ψ2: Pattern
wfψ: well_formed (ψ1 $ ψ2)
Hsz: S (size' ψ1 + size' ψ2) ≤ S sz
EvS: EVarSet
SvS: SVarSet
i':= ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (ψ1 $ ψ2))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (ψ1 $ ψ2))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (ψ1 $ ψ2)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E (ψ1 $ ψ2) p q wfψ wfp wfq): ProofInfo
pile: ProofInfoLe i' gpi
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
E_in_EvS: E ∈ EvS
ψ_sub_EvS: free_evars (ψ1 $ ψ2) ⊆ EvS
p_sub_SvS: free_svars p ⊆ SvS
q_sub_SvS: free_svars q ⊆ SvS
ψ_sub_SvS: free_svars (ψ1 $ ψ2) ⊆ SvS
HEinψ: E ∈ free_evars (ψ1 $ ψ2)
wfψ1: well_formed ψ1 = true
H: size' ψ1 ≤ sz
wfψ2: well_formed ψ2 = true
H0: size' ψ2 ≤ sz
pf₁: Γ ⊢i ψ1^[[evar:E↦p]] <---> ψ1^[[evar:E↦q]] using gpi
pf₂: Γ ⊢i ψ2^[[evar:E↦p]] <---> ψ2^[[evar:E↦q]] using gpi
{[ψ1^[[evar:E↦p]] ↾ well_formed_free_evar_subst_0 E ψ1 p wfp wfψ1; ψ1^[[evar:E↦q]] ↾ well_formed_free_evar_subst_0 E ψ1 q wfq wfψ1; ψ2^[[evar:E↦p]] ↾ well_formed_free_evar_subst_0 E ψ2 p wfp wfψ2; ψ2^[[evar:E↦q]] ↾ well_formed_free_evar_subst_0 E ψ2 q wfq wfψ2]} ⊆ gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E (ψ1 $ ψ2) p q wfψ wfp wfq)
Σ: Signature
sz: nat
Γ: Theory
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
E: evar
exdepth, mudepth: nat
gpi: ProofInfo
pf: Γ ⊢i p <---> q using gpi
IHsz: (ψ : Pattern) (wfψ : well_formed ψ), size' ψ ≤ sz → (EvS : EVarSet) (SvS : SVarSet), ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ p q wfψ wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ ⊆ SvS → Γ ⊢i ψ^[[evar:E↦p]] <---> ψ^[[evar:E↦q]] using gpi
ψ1, ψ2: Pattern
wfψ: well_formed (ψ1 $ ψ2)
Hsz: S (size' ψ1 + size' ψ2) ≤ S sz
EvS: EVarSet
SvS: SVarSet
i':= ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (ψ1 $ ψ2))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (ψ1 $ ψ2))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (ψ1 $ ψ2)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E (ψ1 $ ψ2) p q wfψ wfp wfq): ProofInfo
pile: ProofInfoLe i' gpi
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
E_in_EvS: E ∈ EvS
ψ_sub_EvS: free_evars (ψ1 $ ψ2) ⊆ EvS
p_sub_SvS: free_svars p ⊆ SvS
q_sub_SvS: free_svars q ⊆ SvS
ψ_sub_SvS: free_svars (ψ1 $ ψ2) ⊆ SvS
HEinψ: E ∈ free_evars (ψ1 $ ψ2)
wfψ1: well_formed ψ1 = true
H: size' ψ1 ≤ sz
wfψ2: well_formed ψ2 = true
H0: size' ψ2 ≤ sz
pf₁: Γ ⊢i ψ1^[[evar:E↦p]] <---> ψ1^[[evar:E↦q]] using gpi
pf₂: Γ ⊢i ψ2^[[evar:E↦p]] <---> ψ2^[[evar:E↦q]] using gpi

∅ ⊆ list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (ψ1 $ ψ2)))
clear; set_solver.
Σ: Signature
sz: nat
Γ: Theory
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
E: evar
exdepth, mudepth: nat
gpi: ProofInfo
pf: Γ ⊢i p <---> q using gpi
IHsz: (ψ : Pattern) (wfψ : well_formed ψ), size' ψ ≤ sz → (EvS : EVarSet) (SvS : SVarSet), ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ p q wfψ wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ ⊆ SvS → Γ ⊢i ψ^[[evar:E↦p]] <---> ψ^[[evar:E↦q]] using gpi
ψ1, ψ2: Pattern
wfψ: well_formed (ψ1 $ ψ2)
Hsz: S (size' ψ1 + size' ψ2) ≤ S sz
EvS: EVarSet
SvS: SVarSet
i':= ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (ψ1 $ ψ2))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (ψ1 $ ψ2))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (ψ1 $ ψ2)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E (ψ1 $ ψ2) p q wfψ wfp wfq): ProofInfo
pile: ProofInfoLe i' gpi
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
E_in_EvS: E ∈ EvS
ψ_sub_EvS: free_evars (ψ1 $ ψ2) ⊆ EvS
p_sub_SvS: free_svars p ⊆ SvS
q_sub_SvS: free_svars q ⊆ SvS
ψ_sub_SvS: free_svars (ψ1 $ ψ2) ⊆ SvS
HEinψ: E ∈ free_evars (ψ1 $ ψ2)
wfψ1: well_formed ψ1 = true
H: size' ψ1 ≤ sz
wfψ2: well_formed ψ2 = true
H0: size' ψ2 ≤ sz
pf₁: Γ ⊢i ψ1^[[evar:E↦p]] <---> ψ1^[[evar:E↦q]] using gpi
pf₂: Γ ⊢i ψ2^[[evar:E↦p]] <---> ψ2^[[evar:E↦q]] using gpi

false ==> (if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (ψ1 $ ψ2)) then false else true)
Σ: Signature
sz: nat
Γ: Theory
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
E: evar
exdepth, mudepth: nat
gpi: ProofInfo
pf: Γ ⊢i p <---> q using gpi
IHsz: (ψ : Pattern) (wfψ : well_formed ψ), size' ψ ≤ sz → (EvS : EVarSet) (SvS : SVarSet), ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ p q wfψ wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ ⊆ SvS → Γ ⊢i ψ^[[evar:E↦p]] <---> ψ^[[evar:E↦q]] using gpi
ψ1, ψ2: Pattern
wfψ: well_formed (ψ1 $ ψ2)
Hsz: S (size' ψ1 + size' ψ2) ≤ S sz
EvS: EVarSet
SvS: SVarSet
i':= ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (ψ1 $ ψ2))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (ψ1 $ ψ2))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (ψ1 $ ψ2)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E (ψ1 $ ψ2) p q wfψ wfp wfq): ProofInfo
pile: ProofInfoLe i' gpi
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
E_in_EvS: E ∈ EvS
ψ_sub_EvS: free_evars (ψ1 $ ψ2) ⊆ EvS
p_sub_SvS: free_svars p ⊆ SvS
q_sub_SvS: free_svars q ⊆ SvS
ψ_sub_SvS: free_svars (ψ1 $ ψ2) ⊆ SvS
HEinψ: E ∈ free_evars (ψ1 $ ψ2)
wfψ1: well_formed ψ1 = true
H: size' ψ1 ≤ sz
wfψ2: well_formed ψ2 = true
H0: size' ψ2 ≤ sz
pf₁: Γ ⊢i ψ1^[[evar:E↦p]] <---> ψ1^[[evar:E↦q]] using gpi
pf₂: Γ ⊢i ψ2^[[evar:E↦p]] <---> ψ2^[[evar:E↦q]] using gpi
{[ψ1^[[evar:E↦p]] ↾ well_formed_free_evar_subst_0 E ψ1 p wfp wfψ1; ψ1^[[evar:E↦q]] ↾ well_formed_free_evar_subst_0 E ψ1 q wfq wfψ1; ψ2^[[evar:E↦p]] ↾ well_formed_free_evar_subst_0 E ψ2 p wfp wfψ2; ψ2^[[evar:E↦q]] ↾ well_formed_free_evar_subst_0 E ψ2 q wfq wfψ2]} ⊆ gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E (ψ1 $ ψ2) p q wfψ wfp wfq)
Σ: Signature
sz: nat
Γ: Theory
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
E: evar
exdepth, mudepth: nat
gpi: ProofInfo
pf: Γ ⊢i p <---> q using gpi
IHsz: (ψ : Pattern) (wfψ : well_formed ψ), size' ψ ≤ sz → (EvS : EVarSet) (SvS : SVarSet), ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ p q wfψ wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ ⊆ SvS → Γ ⊢i ψ^[[evar:E↦p]] <---> ψ^[[evar:E↦q]] using gpi
ψ1, ψ2: Pattern
wfψ: well_formed (ψ1 $ ψ2)
Hsz: S (size' ψ1 + size' ψ2) ≤ S sz
EvS: EVarSet
SvS: SVarSet
i':= ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (ψ1 $ ψ2))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (ψ1 $ ψ2))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (ψ1 $ ψ2)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E (ψ1 $ ψ2) p q wfψ wfp wfq): ProofInfo
pile: ProofInfoLe i' gpi
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
E_in_EvS: E ∈ EvS
ψ_sub_EvS: free_evars (ψ1 $ ψ2) ⊆ EvS
p_sub_SvS: free_svars p ⊆ SvS
q_sub_SvS: free_svars q ⊆ SvS
ψ_sub_SvS: free_svars (ψ1 $ ψ2) ⊆ SvS
HEinψ: E ∈ free_evars (ψ1 $ ψ2)
wfψ1: well_formed ψ1 = true
H: size' ψ1 ≤ sz
wfψ2: well_formed ψ2 = true
H0: size' ψ2 ≤ sz
pf₁: Γ ⊢i ψ1^[[evar:E↦p]] <---> ψ1^[[evar:E↦q]] using gpi
pf₂: Γ ⊢i ψ2^[[evar:E↦p]] <---> ψ2^[[evar:E↦q]] using gpi

false ==> (if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (ψ1 $ ψ2)) then false else true)
reflexivity.
Σ: Signature
sz: nat
Γ: Theory
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
E: evar
exdepth, mudepth: nat
gpi: ProofInfo
pf: Γ ⊢i p <---> q using gpi
IHsz: (ψ : Pattern) (wfψ : well_formed ψ), size' ψ ≤ sz → (EvS : EVarSet) (SvS : SVarSet), ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ p q wfψ wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ ⊆ SvS → Γ ⊢i ψ^[[evar:E↦p]] <---> ψ^[[evar:E↦q]] using gpi
ψ1, ψ2: Pattern
wfψ: well_formed (ψ1 $ ψ2)
Hsz: S (size' ψ1 + size' ψ2) ≤ S sz
EvS: EVarSet
SvS: SVarSet
i':= ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (ψ1 $ ψ2))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (ψ1 $ ψ2))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (ψ1 $ ψ2)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E (ψ1 $ ψ2) p q wfψ wfp wfq): ProofInfo
pile: ProofInfoLe i' gpi
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
E_in_EvS: E ∈ EvS
ψ_sub_EvS: free_evars (ψ1 $ ψ2) ⊆ EvS
p_sub_SvS: free_svars p ⊆ SvS
q_sub_SvS: free_svars q ⊆ SvS
ψ_sub_SvS: free_svars (ψ1 $ ψ2) ⊆ SvS
HEinψ: E ∈ free_evars (ψ1 $ ψ2)
wfψ1: well_formed ψ1 = true
H: size' ψ1 ≤ sz
wfψ2: well_formed ψ2 = true
H0: size' ψ2 ≤ sz
pf₁: Γ ⊢i ψ1^[[evar:E↦p]] <---> ψ1^[[evar:E↦q]] using gpi
pf₂: Γ ⊢i ψ2^[[evar:E↦p]] <---> ψ2^[[evar:E↦q]] using gpi

{[ψ1^[[evar:E↦p]] ↾ well_formed_free_evar_subst_0 E ψ1 p wfp wfψ1; ψ1^[[evar:E↦q]] ↾ well_formed_free_evar_subst_0 E ψ1 q wfq wfψ1; ψ2^[[evar:E↦p]] ↾ well_formed_free_evar_subst_0 E ψ2 p wfp wfψ2; ψ2^[[evar:E↦q]] ↾ well_formed_free_evar_subst_0 E ψ2 q wfq wfψ2]} ⊆ gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E (ψ1 $ ψ2) p q wfψ wfp wfq)
Σ: Signature
sz: nat
Γ: Theory
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
E: evar
exdepth, mudepth: nat
gpi: ProofInfo
pf: Γ ⊢i p <---> q using gpi
IHsz: (ψ : Pattern) (wfψ : well_formed ψ), size' ψ ≤ sz → (EvS : EVarSet) (SvS : SVarSet), ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ p q wfψ wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ ⊆ SvS → Γ ⊢i ψ^[[evar:E↦p]] <---> ψ^[[evar:E↦q]] using gpi
ψ1, ψ2: Pattern
wfψ: well_formed (ψ1 $ ψ2)
Hsz: S (size' ψ1 + size' ψ2) ≤ S sz
EvS: EVarSet
SvS: SVarSet
i':= ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (ψ1 $ ψ2))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (ψ1 $ ψ2))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (ψ1 $ ψ2)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E (ψ1 $ ψ2) p q wfψ wfp wfq): ProofInfo
pile: ProofInfoLe i' gpi
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
E_in_EvS: E ∈ EvS
ψ_sub_EvS: free_evars (ψ1 $ ψ2) ⊆ EvS
p_sub_SvS: free_svars p ⊆ SvS
q_sub_SvS: free_svars q ⊆ SvS
ψ_sub_SvS: free_svars (ψ1 $ ψ2) ⊆ SvS
HEinψ: E ∈ free_evars (ψ1 $ ψ2)
wfψ1: well_formed ψ1 = true
H: size' ψ1 ≤ sz
wfψ2: well_formed ψ2 = true
H0: size' ψ2 ≤ sz
pf₁: Γ ⊢i ψ1^[[evar:E↦p]] <---> ψ1^[[evar:E↦q]] using gpi
pf₂: Γ ⊢i ψ2^[[evar:E↦p]] <---> ψ2^[[evar:E↦q]] using gpi

{[ψ1^[[evar:E↦p]] ↾ well_formed_free_evar_subst_0 E ψ1 p wfp wfψ1; ψ1^[[evar:E↦q]] ↾ well_formed_free_evar_subst_0 E ψ1 q wfq wfψ1; ψ2^[[evar:E↦p]] ↾ well_formed_free_evar_subst_0 E ψ2 p wfp wfψ2; ψ2^[[evar:E↦q]] ↾ well_formed_free_evar_subst_0 E ψ2 q wfq wfψ2]} ⊆ gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E (ψ1 $ ψ2) p q wfψ wfp wfq)
Σ: Signature
sz: nat
Γ: Theory
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
E: evar
exdepth, mudepth: nat
gpi: ProofInfo
pf: Γ ⊢i p <---> q using gpi
IHsz: (ψ : Pattern) (wfψ : well_formed ψ), size' ψ ≤ sz → (EvS : EVarSet) (SvS : SVarSet), ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ p q wfψ wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ ⊆ SvS → Γ ⊢i ψ^[[evar:E↦p]] <---> ψ^[[evar:E↦q]] using gpi
ψ1, ψ2: Pattern
wfψ: well_formed (ψ1 $ ψ2)
Hsz: S (size' ψ1 + size' ψ2) ≤ S sz
EvS: EVarSet
SvS: SVarSet
i':= ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (ψ1 $ ψ2))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (ψ1 $ ψ2))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (ψ1 $ ψ2)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E (ψ1 $ ψ2) p q wfψ wfp wfq): ProofInfo
pile: ProofInfoLe i' gpi
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
E_in_EvS: E ∈ EvS
ψ_sub_EvS: free_evars (ψ1 $ ψ2) ⊆ EvS
p_sub_SvS: free_svars p ⊆ SvS
q_sub_SvS: free_svars q ⊆ SvS
ψ_sub_SvS: free_svars (ψ1 $ ψ2) ⊆ SvS
HEinψ: E ∈ free_evars (ψ1 $ ψ2)
wfψ1: well_formed ψ1 = true
H: size' ψ1 ≤ sz
wfψ2: well_formed ψ2 = true
H0: size' ψ2 ≤ sz
pf₁: Γ ⊢i ψ1^[[evar:E↦p]] <---> ψ1^[[evar:E↦q]] using gpi
pf₂: Γ ⊢i ψ2^[[evar:E↦p]] <---> ψ2^[[evar:E↦q]] using gpi

{[ψ1^[[evar:E↦p]] ↾ well_formed_free_evar_subst_0 E ψ1 p wfp wfψ1; ψ1^[[evar:E↦q]] ↾ well_formed_free_evar_subst_0 E ψ1 q wfq wfψ1; ψ2^[[evar:E↦p]] ↾ well_formed_free_evar_subst_0 E ψ2 p wfp wfψ2; ψ2^[[evar:E↦q]] ↾ well_formed_free_evar_subst_0 E ψ2 q wfq wfψ2]} ⊆ gset_to_coGset ({[ψ1^[[evar:E↦p]] ↾ frames_on_the_way_to_hole'_obligation_1 E ψ1 ψ2 p q wfψ wfp wfq; ψ2^[[evar:E↦p]] ↾ frames_on_the_way_to_hole'_obligation_2 E ψ1 ψ2 p q wfψ wfp wfq; ψ1^[[evar:E↦q]] ↾ frames_on_the_way_to_hole'_obligation_3 E ψ1 ψ2 p q wfψ wfp wfq; ψ2^[[evar:E↦q]] ↾ frames_on_the_way_to_hole'_obligation_4 E ψ1 ψ2 p q wfψ wfp wfq]} ∪ frames_on_the_way_to_hole' EvS SvS E ψ1 p q (frames_on_the_way_to_hole'_obligation_5 ψ1 ψ2 p q wfψ wfp wfq) (frames_on_the_way_to_hole'_obligation_6 p wfp) (frames_on_the_way_to_hole'_obligation_7 q wfq) ∪ frames_on_the_way_to_hole' EvS SvS E ψ2 p q (frames_on_the_way_to_hole'_obligation_9 ψ1 ψ2 p q wfψ wfp wfq) (frames_on_the_way_to_hole'_obligation_10 p wfp) (frames_on_the_way_to_hole'_obligation_11 q wfq))
(* This should be automatable! *)
Σ: Signature
sz: nat
Γ: Theory
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
E: evar
exdepth, mudepth: nat
gpi: ProofInfo
pf: Γ ⊢i p <---> q using gpi
IHsz: (ψ : Pattern) (wfψ : well_formed ψ), size' ψ ≤ sz → (EvS : EVarSet) (SvS : SVarSet), ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ p q wfψ wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ ⊆ SvS → Γ ⊢i ψ^[[evar:E↦p]] <---> ψ^[[evar:E↦q]] using gpi
ψ1, ψ2: Pattern
wfψ: well_formed (ψ1 $ ψ2)
Hsz: S (size' ψ1 + size' ψ2) ≤ S sz
EvS: EVarSet
SvS: SVarSet
i':= ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (ψ1 $ ψ2))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (ψ1 $ ψ2))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (ψ1 $ ψ2)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E (ψ1 $ ψ2) p q wfψ wfp wfq): ProofInfo
pile: ProofInfoLe i' gpi
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
E_in_EvS: E ∈ EvS
ψ_sub_EvS: free_evars (ψ1 $ ψ2) ⊆ EvS
p_sub_SvS: free_svars p ⊆ SvS
q_sub_SvS: free_svars q ⊆ SvS
ψ_sub_SvS: free_svars (ψ1 $ ψ2) ⊆ SvS
HEinψ: E ∈ free_evars (ψ1 $ ψ2)
wfψ1: well_formed ψ1 = true
H: size' ψ1 ≤ sz
wfψ2: well_formed ψ2 = true
H0: size' ψ2 ≤ sz
pf₁: Γ ⊢i ψ1^[[evar:E↦p]] <---> ψ1^[[evar:E↦q]] using gpi
pf₂: Γ ⊢i ψ2^[[evar:E↦p]] <---> ψ2^[[evar:E↦q]] using gpi
wf1: well_formed ψ1^[[evar:E↦p]] = true
Heqwf1: wf1 = well_formed_free_evar_subst_0 E ψ1 p wfp wfψ1

{[ψ1^[[evar:E↦p]] ↾ wf1; ψ1^[[evar:E↦q]] ↾ well_formed_free_evar_subst_0 E ψ1 q wfq wfψ1; ψ2^[[evar:E↦p]] ↾ well_formed_free_evar_subst_0 E ψ2 p wfp wfψ2; ψ2^[[evar:E↦q]] ↾ well_formed_free_evar_subst_0 E ψ2 q wfq wfψ2]} ⊆ gset_to_coGset ({[ψ1^[[evar:E↦p]] ↾ frames_on_the_way_to_hole'_obligation_1 E ψ1 ψ2 p q wfψ wfp wfq; ψ2^[[evar:E↦p]] ↾ frames_on_the_way_to_hole'_obligation_2 E ψ1 ψ2 p q wfψ wfp wfq; ψ1^[[evar:E↦q]] ↾ frames_on_the_way_to_hole'_obligation_3 E ψ1 ψ2 p q wfψ wfp wfq; ψ2^[[evar:E↦q]] ↾ frames_on_the_way_to_hole'_obligation_4 E ψ1 ψ2 p q wfψ wfp wfq]} ∪ frames_on_the_way_to_hole' EvS SvS E ψ1 p q (frames_on_the_way_to_hole'_obligation_5 ψ1 ψ2 p q wfψ wfp wfq) (frames_on_the_way_to_hole'_obligation_6 p wfp) (frames_on_the_way_to_hole'_obligation_7 q wfq) ∪ frames_on_the_way_to_hole' EvS SvS E ψ2 p q (frames_on_the_way_to_hole'_obligation_9 ψ1 ψ2 p q wfψ wfp wfq) (frames_on_the_way_to_hole'_obligation_10 p wfp) (frames_on_the_way_to_hole'_obligation_11 q wfq))
Σ: Signature
sz: nat
Γ: Theory
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
E: evar
exdepth, mudepth: nat
gpi: ProofInfo
pf: Γ ⊢i p <---> q using gpi
IHsz: (ψ : Pattern) (wfψ : well_formed ψ), size' ψ ≤ sz → (EvS : EVarSet) (SvS : SVarSet), ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ p q wfψ wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ ⊆ SvS → Γ ⊢i ψ^[[evar:E↦p]] <---> ψ^[[evar:E↦q]] using gpi
ψ1, ψ2: Pattern
wfψ: well_formed (ψ1 $ ψ2)
Hsz: S (size' ψ1 + size' ψ2) ≤ S sz
EvS: EVarSet
SvS: SVarSet
i':= ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (ψ1 $ ψ2))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (ψ1 $ ψ2))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (ψ1 $ ψ2)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E (ψ1 $ ψ2) p q wfψ wfp wfq): ProofInfo
pile: ProofInfoLe i' gpi
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
E_in_EvS: E ∈ EvS
ψ_sub_EvS: free_evars (ψ1 $ ψ2) ⊆ EvS
p_sub_SvS: free_svars p ⊆ SvS
q_sub_SvS: free_svars q ⊆ SvS
ψ_sub_SvS: free_svars (ψ1 $ ψ2) ⊆ SvS
HEinψ: E ∈ free_evars (ψ1 $ ψ2)
wfψ1: well_formed ψ1 = true
H: size' ψ1 ≤ sz
wfψ2: well_formed ψ2 = true
H0: size' ψ2 ≤ sz
pf₁: Γ ⊢i ψ1^[[evar:E↦p]] <---> ψ1^[[evar:E↦q]] using gpi
pf₂: Γ ⊢i ψ2^[[evar:E↦p]] <---> ψ2^[[evar:E↦q]] using gpi
wf1: well_formed ψ1^[[evar:E↦p]] = true
Heqwf1: wf1 = well_formed_free_evar_subst_0 E ψ1 p wfp wfψ1
wf2: well_formed ψ2^[[evar:E↦p]] = true
Heqwf2: wf2 = well_formed_free_evar_subst_0 E ψ2 p wfp wfψ2

{[ψ1^[[evar:E↦p]] ↾ wf1; ψ1^[[evar:E↦q]] ↾ well_formed_free_evar_subst_0 E ψ1 q wfq wfψ1; ψ2^[[evar:E↦p]] ↾ wf2; ψ2^[[evar:E↦q]] ↾ well_formed_free_evar_subst_0 E ψ2 q wfq wfψ2]} ⊆ gset_to_coGset ({[ψ1^[[evar:E↦p]] ↾ frames_on_the_way_to_hole'_obligation_1 E ψ1 ψ2 p q wfψ wfp wfq; ψ2^[[evar:E↦p]] ↾ frames_on_the_way_to_hole'_obligation_2 E ψ1 ψ2 p q wfψ wfp wfq; ψ1^[[evar:E↦q]] ↾ frames_on_the_way_to_hole'_obligation_3 E ψ1 ψ2 p q wfψ wfp wfq; ψ2^[[evar:E↦q]] ↾ frames_on_the_way_to_hole'_obligation_4 E ψ1 ψ2 p q wfψ wfp wfq]} ∪ frames_on_the_way_to_hole' EvS SvS E ψ1 p q (frames_on_the_way_to_hole'_obligation_5 ψ1 ψ2 p q wfψ wfp wfq) (frames_on_the_way_to_hole'_obligation_6 p wfp) (frames_on_the_way_to_hole'_obligation_7 q wfq) ∪ frames_on_the_way_to_hole' EvS SvS E ψ2 p q (frames_on_the_way_to_hole'_obligation_9 ψ1 ψ2 p q wfψ wfp wfq) (frames_on_the_way_to_hole'_obligation_10 p wfp) (frames_on_the_way_to_hole'_obligation_11 q wfq))
Σ: Signature
sz: nat
Γ: Theory
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
E: evar
exdepth, mudepth: nat
gpi: ProofInfo
pf: Γ ⊢i p <---> q using gpi
IHsz: (ψ : Pattern) (wfψ : well_formed ψ), size' ψ ≤ sz → (EvS : EVarSet) (SvS : SVarSet), ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ p q wfψ wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ ⊆ SvS → Γ ⊢i ψ^[[evar:E↦p]] <---> ψ^[[evar:E↦q]] using gpi
ψ1, ψ2: Pattern
wfψ: well_formed (ψ1 $ ψ2)
Hsz: S (size' ψ1 + size' ψ2) ≤ S sz
EvS: EVarSet
SvS: SVarSet
i':= ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (ψ1 $ ψ2))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (ψ1 $ ψ2))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (ψ1 $ ψ2)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E (ψ1 $ ψ2) p q wfψ wfp wfq): ProofInfo
pile: ProofInfoLe i' gpi
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
E_in_EvS: E ∈ EvS
ψ_sub_EvS: free_evars (ψ1 $ ψ2) ⊆ EvS
p_sub_SvS: free_svars p ⊆ SvS
q_sub_SvS: free_svars q ⊆ SvS
ψ_sub_SvS: free_svars (ψ1 $ ψ2) ⊆ SvS
HEinψ: E ∈ free_evars (ψ1 $ ψ2)
wfψ1: well_formed ψ1 = true
H: size' ψ1 ≤ sz
wfψ2: well_formed ψ2 = true
H0: size' ψ2 ≤ sz
pf₁: Γ ⊢i ψ1^[[evar:E↦p]] <---> ψ1^[[evar:E↦q]] using gpi
pf₂: Γ ⊢i ψ2^[[evar:E↦p]] <---> ψ2^[[evar:E↦q]] using gpi
wf1: well_formed ψ1^[[evar:E↦p]] = true
Heqwf1: wf1 = well_formed_free_evar_subst_0 E ψ1 p wfp wfψ1
wf2: well_formed ψ2^[[evar:E↦p]] = true
Heqwf2: wf2 = well_formed_free_evar_subst_0 E ψ2 p wfp wfψ2
wf3: well_formed ψ1^[[evar:E↦q]] = true
Heqwf3: wf3 = well_formed_free_evar_subst_0 E ψ1 q wfq wfψ1

{[ψ1^[[evar:E↦p]] ↾ wf1; ψ1^[[evar:E↦q]] ↾ wf3; ψ2^[[evar:E↦p]] ↾ wf2; ψ2^[[evar:E↦q]] ↾ well_formed_free_evar_subst_0 E ψ2 q wfq wfψ2]} ⊆ gset_to_coGset ({[ψ1^[[evar:E↦p]] ↾ frames_on_the_way_to_hole'_obligation_1 E ψ1 ψ2 p q wfψ wfp wfq; ψ2^[[evar:E↦p]] ↾ frames_on_the_way_to_hole'_obligation_2 E ψ1 ψ2 p q wfψ wfp wfq; ψ1^[[evar:E↦q]] ↾ frames_on_the_way_to_hole'_obligation_3 E ψ1 ψ2 p q wfψ wfp wfq; ψ2^[[evar:E↦q]] ↾ frames_on_the_way_to_hole'_obligation_4 E ψ1 ψ2 p q wfψ wfp wfq]} ∪ frames_on_the_way_to_hole' EvS SvS E ψ1 p q (frames_on_the_way_to_hole'_obligation_5 ψ1 ψ2 p q wfψ wfp wfq) (frames_on_the_way_to_hole'_obligation_6 p wfp) (frames_on_the_way_to_hole'_obligation_7 q wfq) ∪ frames_on_the_way_to_hole' EvS SvS E ψ2 p q (frames_on_the_way_to_hole'_obligation_9 ψ1 ψ2 p q wfψ wfp wfq) (frames_on_the_way_to_hole'_obligation_10 p wfp) (frames_on_the_way_to_hole'_obligation_11 q wfq))
Σ: Signature
sz: nat
Γ: Theory
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
E: evar
exdepth, mudepth: nat
gpi: ProofInfo
pf: Γ ⊢i p <---> q using gpi
IHsz: (ψ : Pattern) (wfψ : well_formed ψ), size' ψ ≤ sz → (EvS : EVarSet) (SvS : SVarSet), ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ p q wfψ wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ ⊆ SvS → Γ ⊢i ψ^[[evar:E↦p]] <---> ψ^[[evar:E↦q]] using gpi
ψ1, ψ2: Pattern
wfψ: well_formed (ψ1 $ ψ2)
Hsz: S (size' ψ1 + size' ψ2) ≤ S sz
EvS: EVarSet
SvS: SVarSet
i':= ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (ψ1 $ ψ2))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (ψ1 $ ψ2))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (ψ1 $ ψ2)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E (ψ1 $ ψ2) p q wfψ wfp wfq): ProofInfo
pile: ProofInfoLe i' gpi
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
E_in_EvS: E ∈ EvS
ψ_sub_EvS: free_evars (ψ1 $ ψ2) ⊆ EvS
p_sub_SvS: free_svars p ⊆ SvS
q_sub_SvS: free_svars q ⊆ SvS
ψ_sub_SvS: free_svars (ψ1 $ ψ2) ⊆ SvS
HEinψ: E ∈ free_evars (ψ1 $ ψ2)
wfψ1: well_formed ψ1 = true
H: size' ψ1 ≤ sz
wfψ2: well_formed ψ2 = true
H0: size' ψ2 ≤ sz
pf₁: Γ ⊢i ψ1^[[evar:E↦p]] <---> ψ1^[[evar:E↦q]] using gpi
pf₂: Γ ⊢i ψ2^[[evar:E↦p]] <---> ψ2^[[evar:E↦q]] using gpi
wf1: well_formed ψ1^[[evar:E↦p]] = true
Heqwf1: wf1 = well_formed_free_evar_subst_0 E ψ1 p wfp wfψ1
wf2: well_formed ψ2^[[evar:E↦p]] = true
Heqwf2: wf2 = well_formed_free_evar_subst_0 E ψ2 p wfp wfψ2
wf3: well_formed ψ1^[[evar:E↦q]] = true
Heqwf3: wf3 = well_formed_free_evar_subst_0 E ψ1 q wfq wfψ1
wf4: well_formed ψ2^[[evar:E↦q]] = true
Heqwf4: wf4 = well_formed_free_evar_subst_0 E ψ2 q wfq wfψ2

{[ψ1^[[evar:E↦p]] ↾ wf1; ψ1^[[evar:E↦q]] ↾ wf3; ψ2^[[evar:E↦p]] ↾ wf2; ψ2^[[evar:E↦q]] ↾ wf4]} ⊆ gset_to_coGset ({[ψ1^[[evar:E↦p]] ↾ frames_on_the_way_to_hole'_obligation_1 E ψ1 ψ2 p q wfψ wfp wfq; ψ2^[[evar:E↦p]] ↾ frames_on_the_way_to_hole'_obligation_2 E ψ1 ψ2 p q wfψ wfp wfq; ψ1^[[evar:E↦q]] ↾ frames_on_the_way_to_hole'_obligation_3 E ψ1 ψ2 p q wfψ wfp wfq; ψ2^[[evar:E↦q]] ↾ frames_on_the_way_to_hole'_obligation_4 E ψ1 ψ2 p q wfψ wfp wfq]} ∪ frames_on_the_way_to_hole' EvS SvS E ψ1 p q (frames_on_the_way_to_hole'_obligation_5 ψ1 ψ2 p q wfψ wfp wfq) (frames_on_the_way_to_hole'_obligation_6 p wfp) (frames_on_the_way_to_hole'_obligation_7 q wfq) ∪ frames_on_the_way_to_hole' EvS SvS E ψ2 p q (frames_on_the_way_to_hole'_obligation_9 ψ1 ψ2 p q wfψ wfp wfq) (frames_on_the_way_to_hole'_obligation_10 p wfp) (frames_on_the_way_to_hole'_obligation_11 q wfq))
Σ: Signature
sz: nat
Γ: Theory
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
E: evar
exdepth, mudepth: nat
gpi: ProofInfo
pf: Γ ⊢i p <---> q using gpi
IHsz: (ψ : Pattern) (wfψ : well_formed ψ), size' ψ ≤ sz → (EvS : EVarSet) (SvS : SVarSet), ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ p q wfψ wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ ⊆ SvS → Γ ⊢i ψ^[[evar:E↦p]] <---> ψ^[[evar:E↦q]] using gpi
ψ1, ψ2: Pattern
wfψ: well_formed (ψ1 $ ψ2)
Hsz: S (size' ψ1 + size' ψ2) ≤ S sz
EvS: EVarSet
SvS: SVarSet
i':= ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (ψ1 $ ψ2))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (ψ1 $ ψ2))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (ψ1 $ ψ2)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E (ψ1 $ ψ2) p q wfψ wfp wfq): ProofInfo
pile: ProofInfoLe i' gpi
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
E_in_EvS: E ∈ EvS
ψ_sub_EvS: free_evars (ψ1 $ ψ2) ⊆ EvS
p_sub_SvS: free_svars p ⊆ SvS
q_sub_SvS: free_svars q ⊆ SvS
ψ_sub_SvS: free_svars (ψ1 $ ψ2) ⊆ SvS
HEinψ: E ∈ free_evars (ψ1 $ ψ2)
wfψ1: well_formed ψ1 = true
H: size' ψ1 ≤ sz
wfψ2: well_formed ψ2 = true
H0: size' ψ2 ≤ sz
pf₁: Γ ⊢i ψ1^[[evar:E↦p]] <---> ψ1^[[evar:E↦q]] using gpi
pf₂: Γ ⊢i ψ2^[[evar:E↦p]] <---> ψ2^[[evar:E↦q]] using gpi
wf1: well_formed ψ1^[[evar:E↦p]] = true
Heqwf1: wf1 = well_formed_free_evar_subst_0 E ψ1 p wfp wfψ1
wf2: well_formed ψ2^[[evar:E↦p]] = true
Heqwf2: wf2 = well_formed_free_evar_subst_0 E ψ2 p wfp wfψ2
wf3: well_formed ψ1^[[evar:E↦q]] = true
Heqwf3: wf3 = well_formed_free_evar_subst_0 E ψ1 q wfq wfψ1
wf4: well_formed ψ2^[[evar:E↦q]] = true
Heqwf4: wf4 = well_formed_free_evar_subst_0 E ψ2 q wfq wfψ2
wf1': well_formed ψ1^[[evar:E↦p]] = true
Heqwf1': wf1' = frames_on_the_way_to_hole'_obligation_1 E ψ1 ψ2 p q wfψ wfp wfq

{[ψ1^[[evar:E↦p]] ↾ wf1; ψ1^[[evar:E↦q]] ↾ wf3; ψ2^[[evar:E↦p]] ↾ wf2; ψ2^[[evar:E↦q]] ↾ wf4]} ⊆ gset_to_coGset ({[ψ1^[[evar:E↦p]] ↾ wf1'; ψ2^[[evar:E↦p]] ↾ frames_on_the_way_to_hole'_obligation_2 E ψ1 ψ2 p q wfψ wfp wfq; ψ1^[[evar:E↦q]] ↾ frames_on_the_way_to_hole'_obligation_3 E ψ1 ψ2 p q wfψ wfp wfq; ψ2^[[evar:E↦q]] ↾ frames_on_the_way_to_hole'_obligation_4 E ψ1 ψ2 p q wfψ wfp wfq]} ∪ frames_on_the_way_to_hole' EvS SvS E ψ1 p q (frames_on_the_way_to_hole'_obligation_5 ψ1 ψ2 p q wfψ wfp wfq) (frames_on_the_way_to_hole'_obligation_6 p wfp) (frames_on_the_way_to_hole'_obligation_7 q wfq) ∪ frames_on_the_way_to_hole' EvS SvS E ψ2 p q (frames_on_the_way_to_hole'_obligation_9 ψ1 ψ2 p q wfψ wfp wfq) (frames_on_the_way_to_hole'_obligation_10 p wfp) (frames_on_the_way_to_hole'_obligation_11 q wfq))
Σ: Signature
sz: nat
Γ: Theory
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
E: evar
exdepth, mudepth: nat
gpi: ProofInfo
pf: Γ ⊢i p <---> q using gpi
IHsz: (ψ : Pattern) (wfψ : well_formed ψ), size' ψ ≤ sz → (EvS : EVarSet) (SvS : SVarSet), ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ p q wfψ wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ ⊆ SvS → Γ ⊢i ψ^[[evar:E↦p]] <---> ψ^[[evar:E↦q]] using gpi
ψ1, ψ2: Pattern
wfψ: well_formed (ψ1 $ ψ2)
Hsz: S (size' ψ1 + size' ψ2) ≤ S sz
EvS: EVarSet
SvS: SVarSet
i':= ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (ψ1 $ ψ2))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (ψ1 $ ψ2))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (ψ1 $ ψ2)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E (ψ1 $ ψ2) p q wfψ wfp wfq): ProofInfo
pile: ProofInfoLe i' gpi
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
E_in_EvS: E ∈ EvS
ψ_sub_EvS: free_evars (ψ1 $ ψ2) ⊆ EvS
p_sub_SvS: free_svars p ⊆ SvS
q_sub_SvS: free_svars q ⊆ SvS
ψ_sub_SvS: free_svars (ψ1 $ ψ2) ⊆ SvS
HEinψ: E ∈ free_evars (ψ1 $ ψ2)
wfψ1: well_formed ψ1 = true
H: size' ψ1 ≤ sz
wfψ2: well_formed ψ2 = true
H0: size' ψ2 ≤ sz
pf₁: Γ ⊢i ψ1^[[evar:E↦p]] <---> ψ1^[[evar:E↦q]] using gpi
pf₂: Γ ⊢i ψ2^[[evar:E↦p]] <---> ψ2^[[evar:E↦q]] using gpi
wf1: well_formed ψ1^[[evar:E↦p]] = true
Heqwf1: wf1 = well_formed_free_evar_subst_0 E ψ1 p wfp wfψ1
wf2: well_formed ψ2^[[evar:E↦p]] = true
Heqwf2: wf2 = well_formed_free_evar_subst_0 E ψ2 p wfp wfψ2
wf3: well_formed ψ1^[[evar:E↦q]] = true
Heqwf3: wf3 = well_formed_free_evar_subst_0 E ψ1 q wfq wfψ1
wf4: well_formed ψ2^[[evar:E↦q]] = true
Heqwf4: wf4 = well_formed_free_evar_subst_0 E ψ2 q wfq wfψ2
wf1': well_formed ψ1^[[evar:E↦p]] = true
Heqwf1': wf1' = frames_on_the_way_to_hole'_obligation_1 E ψ1 ψ2 p q wfψ wfp wfq
wf2': well_formed ψ2^[[evar:E↦p]] = true
Heqwf2': wf2' = frames_on_the_way_to_hole'_obligation_2 E ψ1 ψ2 p q wfψ wfp wfq

{[ψ1^[[evar:E↦p]] ↾ wf1; ψ1^[[evar:E↦q]] ↾ wf3; ψ2^[[evar:E↦p]] ↾ wf2; ψ2^[[evar:E↦q]] ↾ wf4]} ⊆ gset_to_coGset ({[ψ1^[[evar:E↦p]] ↾ wf1'; ψ2^[[evar:E↦p]] ↾ wf2'; ψ1^[[evar:E↦q]] ↾ frames_on_the_way_to_hole'_obligation_3 E ψ1 ψ2 p q wfψ wfp wfq; ψ2^[[evar:E↦q]] ↾ frames_on_the_way_to_hole'_obligation_4 E ψ1 ψ2 p q wfψ wfp wfq]} ∪ frames_on_the_way_to_hole' EvS SvS E ψ1 p q (frames_on_the_way_to_hole'_obligation_5 ψ1 ψ2 p q wfψ wfp wfq) (frames_on_the_way_to_hole'_obligation_6 p wfp) (frames_on_the_way_to_hole'_obligation_7 q wfq) ∪ frames_on_the_way_to_hole' EvS SvS E ψ2 p q (frames_on_the_way_to_hole'_obligation_9 ψ1 ψ2 p q wfψ wfp wfq) (frames_on_the_way_to_hole'_obligation_10 p wfp) (frames_on_the_way_to_hole'_obligation_11 q wfq))
Σ: Signature
sz: nat
Γ: Theory
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
E: evar
exdepth, mudepth: nat
gpi: ProofInfo
pf: Γ ⊢i p <---> q using gpi
IHsz: (ψ : Pattern) (wfψ : well_formed ψ), size' ψ ≤ sz → (EvS : EVarSet) (SvS : SVarSet), ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ p q wfψ wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ ⊆ SvS → Γ ⊢i ψ^[[evar:E↦p]] <---> ψ^[[evar:E↦q]] using gpi
ψ1, ψ2: Pattern
wfψ: well_formed (ψ1 $ ψ2)
Hsz: S (size' ψ1 + size' ψ2) ≤ S sz
EvS: EVarSet
SvS: SVarSet
i':= ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (ψ1 $ ψ2))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (ψ1 $ ψ2))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (ψ1 $ ψ2)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E (ψ1 $ ψ2) p q wfψ wfp wfq): ProofInfo
pile: ProofInfoLe i' gpi
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
E_in_EvS: E ∈ EvS
ψ_sub_EvS: free_evars (ψ1 $ ψ2) ⊆ EvS
p_sub_SvS: free_svars p ⊆ SvS
q_sub_SvS: free_svars q ⊆ SvS
ψ_sub_SvS: free_svars (ψ1 $ ψ2) ⊆ SvS
HEinψ: E ∈ free_evars (ψ1 $ ψ2)
wfψ1: well_formed ψ1 = true
H: size' ψ1 ≤ sz
wfψ2: well_formed ψ2 = true
H0: size' ψ2 ≤ sz
pf₁: Γ ⊢i ψ1^[[evar:E↦p]] <---> ψ1^[[evar:E↦q]] using gpi
pf₂: Γ ⊢i ψ2^[[evar:E↦p]] <---> ψ2^[[evar:E↦q]] using gpi
wf1: well_formed ψ1^[[evar:E↦p]] = true
Heqwf1: wf1 = well_formed_free_evar_subst_0 E ψ1 p wfp wfψ1
wf2: well_formed ψ2^[[evar:E↦p]] = true
Heqwf2: wf2 = well_formed_free_evar_subst_0 E ψ2 p wfp wfψ2
wf3: well_formed ψ1^[[evar:E↦q]] = true
Heqwf3: wf3 = well_formed_free_evar_subst_0 E ψ1 q wfq wfψ1
wf4: well_formed ψ2^[[evar:E↦q]] = true
Heqwf4: wf4 = well_formed_free_evar_subst_0 E ψ2 q wfq wfψ2
wf1': well_formed ψ1^[[evar:E↦p]] = true
Heqwf1': wf1' = frames_on_the_way_to_hole'_obligation_1 E ψ1 ψ2 p q wfψ wfp wfq
wf2': well_formed ψ2^[[evar:E↦p]] = true
Heqwf2': wf2' = frames_on_the_way_to_hole'_obligation_2 E ψ1 ψ2 p q wfψ wfp wfq
wf3': well_formed ψ1^[[evar:E↦q]] = true
Heqwf3': wf3' = frames_on_the_way_to_hole'_obligation_3 E ψ1 ψ2 p q wfψ wfp wfq

{[ψ1^[[evar:E↦p]] ↾ wf1; ψ1^[[evar:E↦q]] ↾ wf3; ψ2^[[evar:E↦p]] ↾ wf2; ψ2^[[evar:E↦q]] ↾ wf4]} ⊆ gset_to_coGset ({[ψ1^[[evar:E↦p]] ↾ wf1'; ψ2^[[evar:E↦p]] ↾ wf2'; ψ1^[[evar:E↦q]] ↾ wf3'; ψ2^[[evar:E↦q]] ↾ frames_on_the_way_to_hole'_obligation_4 E ψ1 ψ2 p q wfψ wfp wfq]} ∪ frames_on_the_way_to_hole' EvS SvS E ψ1 p q (frames_on_the_way_to_hole'_obligation_5 ψ1 ψ2 p q wfψ wfp wfq) (frames_on_the_way_to_hole'_obligation_6 p wfp) (frames_on_the_way_to_hole'_obligation_7 q wfq) ∪ frames_on_the_way_to_hole' EvS SvS E ψ2 p q (frames_on_the_way_to_hole'_obligation_9 ψ1 ψ2 p q wfψ wfp wfq) (frames_on_the_way_to_hole'_obligation_10 p wfp) (frames_on_the_way_to_hole'_obligation_11 q wfq))
Σ: Signature
sz: nat
Γ: Theory
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
E: evar
exdepth, mudepth: nat
gpi: ProofInfo
pf: Γ ⊢i p <---> q using gpi
IHsz: (ψ : Pattern) (wfψ : well_formed ψ), size' ψ ≤ sz → (EvS : EVarSet) (SvS : SVarSet), ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ p q wfψ wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ ⊆ SvS → Γ ⊢i ψ^[[evar:E↦p]] <---> ψ^[[evar:E↦q]] using gpi
ψ1, ψ2: Pattern
wfψ: well_formed (ψ1 $ ψ2)
Hsz: S (size' ψ1 + size' ψ2) ≤ S sz
EvS: EVarSet
SvS: SVarSet
i':= ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (ψ1 $ ψ2))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (ψ1 $ ψ2))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (ψ1 $ ψ2)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E (ψ1 $ ψ2) p q wfψ wfp wfq): ProofInfo
pile: ProofInfoLe i' gpi
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
E_in_EvS: E ∈ EvS
ψ_sub_EvS: free_evars (ψ1 $ ψ2) ⊆ EvS
p_sub_SvS: free_svars p ⊆ SvS
q_sub_SvS: free_svars q ⊆ SvS
ψ_sub_SvS: free_svars (ψ1 $ ψ2) ⊆ SvS
HEinψ: E ∈ free_evars (ψ1 $ ψ2)
wfψ1: well_formed ψ1 = true
H: size' ψ1 ≤ sz
wfψ2: well_formed ψ2 = true
H0: size' ψ2 ≤ sz
pf₁: Γ ⊢i ψ1^[[evar:E↦p]] <---> ψ1^[[evar:E↦q]] using gpi
pf₂: Γ ⊢i ψ2^[[evar:E↦p]] <---> ψ2^[[evar:E↦q]] using gpi
wf1: well_formed ψ1^[[evar:E↦p]] = true
Heqwf1: wf1 = well_formed_free_evar_subst_0 E ψ1 p wfp wfψ1
wf2: well_formed ψ2^[[evar:E↦p]] = true
Heqwf2: wf2 = well_formed_free_evar_subst_0 E ψ2 p wfp wfψ2
wf3: well_formed ψ1^[[evar:E↦q]] = true
Heqwf3: wf3 = well_formed_free_evar_subst_0 E ψ1 q wfq wfψ1
wf4: well_formed ψ2^[[evar:E↦q]] = true
Heqwf4: wf4 = well_formed_free_evar_subst_0 E ψ2 q wfq wfψ2
wf1': well_formed ψ1^[[evar:E↦p]] = true
Heqwf1': wf1' = frames_on_the_way_to_hole'_obligation_1 E ψ1 ψ2 p q wfψ wfp wfq
wf2': well_formed ψ2^[[evar:E↦p]] = true
Heqwf2': wf2' = frames_on_the_way_to_hole'_obligation_2 E ψ1 ψ2 p q wfψ wfp wfq
wf3': well_formed ψ1^[[evar:E↦q]] = true
Heqwf3': wf3' = frames_on_the_way_to_hole'_obligation_3 E ψ1 ψ2 p q wfψ wfp wfq
wf4': well_formed ψ2^[[evar:E↦q]] = true
Heqwf4': wf4' = frames_on_the_way_to_hole'_obligation_4 E ψ1 ψ2 p q wfψ wfp wfq

{[ψ1^[[evar:E↦p]] ↾ wf1; ψ1^[[evar:E↦q]] ↾ wf3; ψ2^[[evar:E↦p]] ↾ wf2; ψ2^[[evar:E↦q]] ↾ wf4]} ⊆ gset_to_coGset ({[ψ1^[[evar:E↦p]] ↾ wf1'; ψ2^[[evar:E↦p]] ↾ wf2'; ψ1^[[evar:E↦q]] ↾ wf3'; ψ2^[[evar:E↦q]] ↾ wf4']} ∪ frames_on_the_way_to_hole' EvS SvS E ψ1 p q (frames_on_the_way_to_hole'_obligation_5 ψ1 ψ2 p q wfψ wfp wfq) (frames_on_the_way_to_hole'_obligation_6 p wfp) (frames_on_the_way_to_hole'_obligation_7 q wfq) ∪ frames_on_the_way_to_hole' EvS SvS E ψ2 p q (frames_on_the_way_to_hole'_obligation_9 ψ1 ψ2 p q wfψ wfp wfq) (frames_on_the_way_to_hole'_obligation_10 p wfp) (frames_on_the_way_to_hole'_obligation_11 q wfq))
Σ: Signature
sz: nat
Γ: Theory
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
E: evar
exdepth, mudepth: nat
gpi: ProofInfo
pf: Γ ⊢i p <---> q using gpi
IHsz: (ψ : Pattern) (wfψ : well_formed ψ), size' ψ ≤ sz → (EvS : EVarSet) (SvS : SVarSet), ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ p q wfψ wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ ⊆ SvS → Γ ⊢i ψ^[[evar:E↦p]] <---> ψ^[[evar:E↦q]] using gpi
ψ1, ψ2: Pattern
wfψ: well_formed (ψ1 $ ψ2)
Hsz: S (size' ψ1 + size' ψ2) ≤ S sz
EvS: EVarSet
SvS: SVarSet
i':= ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (ψ1 $ ψ2))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (ψ1 $ ψ2))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (ψ1 $ ψ2)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E (ψ1 $ ψ2) p q wfψ wfp wfq): ProofInfo
pile: ProofInfoLe i' gpi
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
E_in_EvS: E ∈ EvS
ψ_sub_EvS: free_evars (ψ1 $ ψ2) ⊆ EvS
p_sub_SvS: free_svars p ⊆ SvS
q_sub_SvS: free_svars q ⊆ SvS
ψ_sub_SvS: free_svars (ψ1 $ ψ2) ⊆ SvS
HEinψ: E ∈ free_evars (ψ1 $ ψ2)
wfψ1: well_formed ψ1 = true
H: size' ψ1 ≤ sz
wfψ2: well_formed ψ2 = true
H0: size' ψ2 ≤ sz
pf₁: Γ ⊢i ψ1^[[evar:E↦p]] <---> ψ1^[[evar:E↦q]] using gpi
pf₂: Γ ⊢i ψ2^[[evar:E↦p]] <---> ψ2^[[evar:E↦q]] using gpi
wf1: well_formed ψ1^[[evar:E↦p]] = true
Heqwf1: wf1 = well_formed_free_evar_subst_0 E ψ1 p wfp wfψ1
wf2: well_formed ψ2^[[evar:E↦p]] = true
Heqwf2: wf2 = well_formed_free_evar_subst_0 E ψ2 p wfp wfψ2
wf3: well_formed ψ1^[[evar:E↦q]] = true
Heqwf3: wf3 = well_formed_free_evar_subst_0 E ψ1 q wfq wfψ1
wf4: well_formed ψ2^[[evar:E↦q]] = true
Heqwf4: wf4 = well_formed_free_evar_subst_0 E ψ2 q wfq wfψ2
wf1': well_formed ψ1^[[evar:E↦p]] = true
Heqwf1': wf1' = frames_on_the_way_to_hole'_obligation_1 E ψ1 ψ2 p q wfψ wfp wfq
wf2': well_formed ψ2^[[evar:E↦p]] = true
Heqwf2': wf2' = frames_on_the_way_to_hole'_obligation_2 E ψ1 ψ2 p q wfψ wfp wfq
wf3': well_formed ψ1^[[evar:E↦q]] = true
Heqwf3': wf3' = frames_on_the_way_to_hole'_obligation_3 E ψ1 ψ2 p q wfψ wfp wfq
wf4': well_formed ψ2^[[evar:E↦q]] = true
Heqwf4': wf4' = frames_on_the_way_to_hole'_obligation_4 E ψ1 ψ2 p q wfψ wfp wfq
rest1: gset wfPattern
Heqrest1: rest1 = frames_on_the_way_to_hole' EvS SvS E ψ1 p q (frames_on_the_way_to_hole'_obligation_5 ψ1 ψ2 p q wfψ wfp wfq) (frames_on_the_way_to_hole'_obligation_6 p wfp) (frames_on_the_way_to_hole'_obligation_7 q wfq)
rest2: gset wfPattern
Heqrest2: rest2 = frames_on_the_way_to_hole' EvS SvS E ψ2 p q (frames_on_the_way_to_hole'_obligation_9 ψ1 ψ2 p q wfψ wfp wfq) (frames_on_the_way_to_hole'_obligation_10 p wfp) (frames_on_the_way_to_hole'_obligation_11 q wfq)

{[ψ1^[[evar:E↦p]] ↾ wf1; ψ1^[[evar:E↦q]] ↾ wf3; ψ2^[[evar:E↦p]] ↾ wf2; ψ2^[[evar:E↦q]] ↾ wf4]} ⊆ gset_to_coGset ({[ψ1^[[evar:E↦p]] ↾ wf1'; ψ2^[[evar:E↦p]] ↾ wf2'; ψ1^[[evar:E↦q]] ↾ wf3'; ψ2^[[evar:E↦q]] ↾ wf4']} ∪ rest1 ∪ rest2)
Σ: Signature
p, q: Pattern
E: evar
ψ1, ψ2: Pattern
wf1: well_formed ψ1^[[evar:E↦p]] = true
wf2: well_formed ψ2^[[evar:E↦p]] = true
wf3: well_formed ψ1^[[evar:E↦q]] = true
wf4: well_formed ψ2^[[evar:E↦q]] = true
wf1': well_formed ψ1^[[evar:E↦p]] = true
wf2': well_formed ψ2^[[evar:E↦p]] = true
wf3': well_formed ψ1^[[evar:E↦q]] = true
wf4': well_formed ψ2^[[evar:E↦q]] = true
rest1, rest2: gset wfPattern

{[ψ1^[[evar:E↦p]] ↾ wf1; ψ1^[[evar:E↦q]] ↾ wf3; ψ2^[[evar:E↦p]] ↾ wf2; ψ2^[[evar:E↦q]] ↾ wf4]} ⊆ gset_to_coGset ({[ψ1^[[evar:E↦p]] ↾ wf1'; ψ2^[[evar:E↦p]] ↾ wf2'; ψ1^[[evar:E↦q]] ↾ wf3'; ψ2^[[evar:E↦q]] ↾ wf4']} ∪ rest1 ∪ rest2)
Σ: Signature
p, q: Pattern
E: evar
ψ1, ψ2, A: Pattern
HeqA: A = ψ1^[[evar:E↦p]]
wf1: well_formed A = true
wf2: well_formed ψ2^[[evar:E↦p]] = true
wf3: well_formed ψ1^[[evar:E↦q]] = true
wf4: well_formed ψ2^[[evar:E↦q]] = true
wf1': well_formed A = true
wf2': well_formed ψ2^[[evar:E↦p]] = true
wf3': well_formed ψ1^[[evar:E↦q]] = true
wf4': well_formed ψ2^[[evar:E↦q]] = true
rest1, rest2: gset wfPattern

{[A ↾ wf1; ψ1^[[evar:E↦q]] ↾ wf3; ψ2^[[evar:E↦p]] ↾ wf2; ψ2^[[evar:E↦q]] ↾ wf4]} ⊆ gset_to_coGset ({[A ↾ wf1'; ψ2^[[evar:E↦p]] ↾ wf2'; ψ1^[[evar:E↦q]] ↾ wf3'; ψ2^[[evar:E↦q]] ↾ wf4']} ∪ rest1 ∪ rest2)
Σ: Signature
p, q: Pattern
E: evar
ψ1, ψ2, A: Pattern
HeqA: A = ψ1^[[evar:E↦p]]
wf1: well_formed A = true
wf2: well_formed ψ2^[[evar:E↦p]] = true
B: Pattern
HeqB: B = ψ1^[[evar:E↦q]]
wf3: well_formed B = true
wf4: well_formed ψ2^[[evar:E↦q]] = true
wf1': well_formed A = true
wf2': well_formed ψ2^[[evar:E↦p]] = true
wf3': well_formed B = true
wf4': well_formed ψ2^[[evar:E↦q]] = true
rest1, rest2: gset wfPattern

{[A ↾ wf1; B ↾ wf3; ψ2^[[evar:E↦p]] ↾ wf2; ψ2^[[evar:E↦q]] ↾ wf4]} ⊆ gset_to_coGset ({[A ↾ wf1'; ψ2^[[evar:E↦p]] ↾ wf2'; B ↾ wf3'; ψ2^[[evar:E↦q]] ↾ wf4']} ∪ rest1 ∪ rest2)
Σ: Signature
p, q: Pattern
E: evar
ψ1, ψ2, A: Pattern
HeqA: A = ψ1^[[evar:E↦p]]
wf1: well_formed A = true
C: Pattern
HeqC: C = ψ2^[[evar:E↦p]]
wf2: well_formed C = true
B: Pattern
HeqB: B = ψ1^[[evar:E↦q]]
wf3: well_formed B = true
wf4: well_formed ψ2^[[evar:E↦q]] = true
wf1': well_formed A = true
wf2': well_formed C = true
wf3': well_formed B = true
wf4': well_formed ψ2^[[evar:E↦q]] = true
rest1, rest2: gset wfPattern

{[A ↾ wf1; B ↾ wf3; C ↾ wf2; ψ2^[[evar:E↦q]] ↾ wf4]} ⊆ gset_to_coGset ({[A ↾ wf1'; C ↾ wf2'; B ↾ wf3'; ψ2^[[evar:E↦q]] ↾ wf4']} ∪ rest1 ∪ rest2)
Σ: Signature
p, q: Pattern
E: evar
ψ1, ψ2, A: Pattern
HeqA: A = ψ1^[[evar:E↦p]]
wf1: well_formed A = true
C: Pattern
HeqC: C = ψ2^[[evar:E↦p]]
wf2: well_formed C = true
B: Pattern
HeqB: B = ψ1^[[evar:E↦q]]
wf3: well_formed B = true
D: Pattern
HeqD: D = ψ2^[[evar:E↦q]]
wf4: well_formed D = true
wf1': well_formed A = true
wf2': well_formed C = true
wf3': well_formed B = true
wf4': well_formed D = true
rest1, rest2: gset wfPattern

{[A ↾ wf1; B ↾ wf3; C ↾ wf2; D ↾ wf4]} ⊆ gset_to_coGset ({[A ↾ wf1'; C ↾ wf2'; B ↾ wf3'; D ↾ wf4']} ∪ rest1 ∪ rest2)
Σ: Signature
A: Pattern
wf1: well_formed A = true
C: Pattern
wf2: well_formed C = true
B: Pattern
wf3: well_formed B = true
D: Pattern
wf4: well_formed D = true
wf1': well_formed A = true
wf2': well_formed C = true
wf3': well_formed B = true
wf4': well_formed D = true
rest1, rest2: gset wfPattern

{[A ↾ wf1; B ↾ wf3; C ↾ wf2; D ↾ wf4]} ⊆ gset_to_coGset ({[A ↾ wf1'; C ↾ wf2'; B ↾ wf3'; D ↾ wf4']} ∪ rest1 ∪ rest2)
Σ: Signature
A: Pattern
wf1: well_formed A = true
C: Pattern
wf2: well_formed C = true
B: Pattern
wf3: well_formed B = true
D: Pattern
wf4: well_formed D = true
wf1': well_formed A = true
wf2': well_formed C = true
wf3': well_formed B = true
wf4': well_formed D = true
rest1, rest2: gset wfPattern

x : wfPattern, ((x = A ↾ wf1 ∨ x = B ↾ wf3) ∨ x = C ↾ wf2) ∨ x = D ↾ wf4 → ((((x = A ↾ wf1' ∨ x = C ↾ wf2') ∨ x = B ↾ wf3') ∨ x = D ↾ wf4') ∨ x ∈ rest1) ∨ x ∈ rest2
Σ: Signature
A: Pattern
wf1: well_formed A = true
C: Pattern
wf2: well_formed C = true
B: Pattern
wf3: well_formed B = true
D: Pattern
wf4: well_formed D = true
wf1': well_formed A = true
wf2': well_formed C = true
wf3': well_formed B = true
wf4': well_formed D = true
rest1, rest2: gset wfPattern
x: wfPattern
H: ((x = A ↾ wf1 ∨ x = B ↾ wf3) ∨ x = C ↾ wf2) ∨ x = D ↾ wf4

((((x = A ↾ wf1' ∨ x = C ↾ wf2') ∨ x = B ↾ wf3') ∨ x = D ↾ wf4') ∨ x ∈ rest1) ∨ x ∈ rest2
Σ: Signature
A: Pattern
wf1: well_formed A = true
C: Pattern
wf2: well_formed C = true
B: Pattern
wf3: well_formed B = true
D: Pattern
wf4: well_formed D = true
wf1': well_formed A = true
wf2': well_formed C = true
wf3': well_formed B = true
wf4': well_formed D = true
rest1, rest2: gset wfPattern
x: wfPattern
H: x = A ↾ wf1

((((x = A ↾ wf1' ∨ x = C ↾ wf2') ∨ x = B ↾ wf3') ∨ x = D ↾ wf4') ∨ x ∈ rest1) ∨ x ∈ rest2
Σ: Signature
A: Pattern
wf1: well_formed A = true
C: Pattern
wf2: well_formed C = true
B: Pattern
wf3: well_formed B = true
D: Pattern
wf4: well_formed D = true
wf1': well_formed A = true
wf2': well_formed C = true
wf3': well_formed B = true
wf4': well_formed D = true
rest1, rest2: gset wfPattern
x: wfPattern
H: x = B ↾ wf3
((((x = A ↾ wf1' ∨ x = C ↾ wf2') ∨ x = B ↾ wf3') ∨ x = D ↾ wf4') ∨ x ∈ rest1) ∨ x ∈ rest2
Σ: Signature
A: Pattern
wf1: well_formed A = true
C: Pattern
wf2: well_formed C = true
B: Pattern
wf3: well_formed B = true
D: Pattern
wf4: well_formed D = true
wf1': well_formed A = true
wf2': well_formed C = true
wf3': well_formed B = true
wf4': well_formed D = true
rest1, rest2: gset wfPattern
x: wfPattern
H: x = C ↾ wf2
((((x = A ↾ wf1' ∨ x = C ↾ wf2') ∨ x = B ↾ wf3') ∨ x = D ↾ wf4') ∨ x ∈ rest1) ∨ x ∈ rest2
Σ: Signature
A: Pattern
wf1: well_formed A = true
C: Pattern
wf2: well_formed C = true
B: Pattern
wf3: well_formed B = true
D: Pattern
wf4: well_formed D = true
wf1': well_formed A = true
wf2': well_formed C = true
wf3': well_formed B = true
wf4': well_formed D = true
rest1, rest2: gset wfPattern
x: wfPattern
H: x = D ↾ wf4
((((x = A ↾ wf1' ∨ x = C ↾ wf2') ∨ x = B ↾ wf3') ∨ x = D ↾ wf4') ∨ x ∈ rest1) ∨ x ∈ rest2
Σ: Signature
A: Pattern
wf1: well_formed A = true
C: Pattern
wf2: well_formed C = true
B: Pattern
wf3: well_formed B = true
D: Pattern
wf4: well_formed D = true
wf1': well_formed A = true
wf2': well_formed C = true
wf3': well_formed B = true
wf4': well_formed D = true
rest1, rest2: gset wfPattern
x: wfPattern
H: x = A ↾ wf1

((((x = A ↾ wf1' ∨ x = C ↾ wf2') ∨ x = B ↾ wf3') ∨ x = D ↾ wf4') ∨ x ∈ rest1) ∨ x ∈ rest2
Σ: Signature
A: Pattern
wf1: well_formed A = true
C: Pattern
wf2: well_formed C = true
B: Pattern
wf3: well_formed B = true
D: Pattern
wf4: well_formed D = true
wf1': well_formed A = true
wf2': well_formed C = true
wf3': well_formed B = true
wf4': well_formed D = true
rest1, rest2: gset wfPattern
x: wfPattern
H: x = A ↾ wf1

(((x = A ↾ wf1' ∨ x = C ↾ wf2') ∨ x = B ↾ wf3') ∨ x = D ↾ wf4') ∨ x ∈ rest1
Σ: Signature
A: Pattern
wf1: well_formed A = true
C: Pattern
wf2: well_formed C = true
B: Pattern
wf3: well_formed B = true
D: Pattern
wf4: well_formed D = true
wf1': well_formed A = true
wf2': well_formed C = true
wf3': well_formed B = true
wf4': well_formed D = true
rest1, rest2: gset wfPattern
x: wfPattern
H: x = A ↾ wf1

((x = A ↾ wf1' ∨ x = C ↾ wf2') ∨ x = B ↾ wf3') ∨ x = D ↾ wf4'
Σ: Signature
A: Pattern
wf1: well_formed A = true
C: Pattern
wf2: well_formed C = true
B: Pattern
wf3: well_formed B = true
D: Pattern
wf4: well_formed D = true
wf1': well_formed A = true
wf2': well_formed C = true
wf3': well_formed B = true
wf4': well_formed D = true
rest1, rest2: gset wfPattern
x: wfPattern
H: x = A ↾ wf1

(x = A ↾ wf1' ∨ x = C ↾ wf2') ∨ x = B ↾ wf3'
Σ: Signature
A: Pattern
wf1: well_formed A = true
C: Pattern
wf2: well_formed C = true
B: Pattern
wf3: well_formed B = true
D: Pattern
wf4: well_formed D = true
wf1': well_formed A = true
wf2': well_formed C = true
wf3': well_formed B = true
wf4': well_formed D = true
rest1, rest2: gset wfPattern
x: wfPattern
H: x = A ↾ wf1

x = A ↾ wf1' ∨ x = C ↾ wf2'
Σ: Signature
A: Pattern
wf1: well_formed A = true
C: Pattern
wf2: well_formed C = true
B: Pattern
wf3: well_formed B = true
D: Pattern
wf4: well_formed D = true
wf1': well_formed A = true
wf2': well_formed C = true
wf3': well_formed B = true
wf4': well_formed D = true
rest1, rest2: gset wfPattern
x: wfPattern
H: x = A ↾ wf1

x = A ↾ wf1'
pi_assumption.
Σ: Signature
A: Pattern
wf1: well_formed A = true
C: Pattern
wf2: well_formed C = true
B: Pattern
wf3: well_formed B = true
D: Pattern
wf4: well_formed D = true
wf1': well_formed A = true
wf2': well_formed C = true
wf3': well_formed B = true
wf4': well_formed D = true
rest1, rest2: gset wfPattern
x: wfPattern
H: x = B ↾ wf3

((((x = A ↾ wf1' ∨ x = C ↾ wf2') ∨ x = B ↾ wf3') ∨ x = D ↾ wf4') ∨ x ∈ rest1) ∨ x ∈ rest2
Σ: Signature
A: Pattern
wf1: well_formed A = true
C: Pattern
wf2: well_formed C = true
B: Pattern
wf3: well_formed B = true
D: Pattern
wf4: well_formed D = true
wf1': well_formed A = true
wf2': well_formed C = true
wf3': well_formed B = true
wf4': well_formed D = true
rest1, rest2: gset wfPattern
x: wfPattern
H: x = C ↾ wf2
((((x = A ↾ wf1' ∨ x = C ↾ wf2') ∨ x = B ↾ wf3') ∨ x = D ↾ wf4') ∨ x ∈ rest1) ∨ x ∈ rest2
Σ: Signature
A: Pattern
wf1: well_formed A = true
C: Pattern
wf2: well_formed C = true
B: Pattern
wf3: well_formed B = true
D: Pattern
wf4: well_formed D = true
wf1': well_formed A = true
wf2': well_formed C = true
wf3': well_formed B = true
wf4': well_formed D = true
rest1, rest2: gset wfPattern
x: wfPattern
H: x = D ↾ wf4
((((x = A ↾ wf1' ∨ x = C ↾ wf2') ∨ x = B ↾ wf3') ∨ x = D ↾ wf4') ∨ x ∈ rest1) ∨ x ∈ rest2
Σ: Signature
A: Pattern
wf1: well_formed A = true
C: Pattern
wf2: well_formed C = true
B: Pattern
wf3: well_formed B = true
D: Pattern
wf4: well_formed D = true
wf1': well_formed A = true
wf2': well_formed C = true
wf3': well_formed B = true
wf4': well_formed D = true
rest1, rest2: gset wfPattern
x: wfPattern
H: x = B ↾ wf3

((((x = A ↾ wf1' ∨ x = C ↾ wf2') ∨ x = B ↾ wf3') ∨ x = D ↾ wf4') ∨ x ∈ rest1) ∨ x ∈ rest2
Σ: Signature
A: Pattern
wf1: well_formed A = true
C: Pattern
wf2: well_formed C = true
B: Pattern
wf3: well_formed B = true
D: Pattern
wf4: well_formed D = true
wf1': well_formed A = true
wf2': well_formed C = true
wf3': well_formed B = true
wf4': well_formed D = true
rest1, rest2: gset wfPattern
x: wfPattern
H: x = B ↾ wf3

(((x = A ↾ wf1' ∨ x = C ↾ wf2') ∨ x = B ↾ wf3') ∨ x = D ↾ wf4') ∨ x ∈ rest1
Σ: Signature
A: Pattern
wf1: well_formed A = true
C: Pattern
wf2: well_formed C = true
B: Pattern
wf3: well_formed B = true
D: Pattern
wf4: well_formed D = true
wf1': well_formed A = true
wf2': well_formed C = true
wf3': well_formed B = true
wf4': well_formed D = true
rest1, rest2: gset wfPattern
x: wfPattern
H: x = B ↾ wf3

((x = A ↾ wf1' ∨ x = C ↾ wf2') ∨ x = B ↾ wf3') ∨ x = D ↾ wf4'
Σ: Signature
A: Pattern
wf1: well_formed A = true
C: Pattern
wf2: well_formed C = true
B: Pattern
wf3: well_formed B = true
D: Pattern
wf4: well_formed D = true
wf1': well_formed A = true
wf2': well_formed C = true
wf3': well_formed B = true
wf4': well_formed D = true
rest1, rest2: gset wfPattern
x: wfPattern
H: x = B ↾ wf3

(x = A ↾ wf1' ∨ x = C ↾ wf2') ∨ x = B ↾ wf3'
Σ: Signature
A: Pattern
wf1: well_formed A = true
C: Pattern
wf2: well_formed C = true
B: Pattern
wf3: well_formed B = true
D: Pattern
wf4: well_formed D = true
wf1': well_formed A = true
wf2': well_formed C = true
wf3': well_formed B = true
wf4': well_formed D = true
rest1, rest2: gset wfPattern
x: wfPattern
H: x = B ↾ wf3

x = B ↾ wf3'
pi_assumption.
Σ: Signature
A: Pattern
wf1: well_formed A = true
C: Pattern
wf2: well_formed C = true
B: Pattern
wf3: well_formed B = true
D: Pattern
wf4: well_formed D = true
wf1': well_formed A = true
wf2': well_formed C = true
wf3': well_formed B = true
wf4': well_formed D = true
rest1, rest2: gset wfPattern
x: wfPattern
H: x = C ↾ wf2

((((x = A ↾ wf1' ∨ x = C ↾ wf2') ∨ x = B ↾ wf3') ∨ x = D ↾ wf4') ∨ x ∈ rest1) ∨ x ∈ rest2
Σ: Signature
A: Pattern
wf1: well_formed A = true
C: Pattern
wf2: well_formed C = true
B: Pattern
wf3: well_formed B = true
D: Pattern
wf4: well_formed D = true
wf1': well_formed A = true
wf2': well_formed C = true
wf3': well_formed B = true
wf4': well_formed D = true
rest1, rest2: gset wfPattern
x: wfPattern
H: x = D ↾ wf4
((((x = A ↾ wf1' ∨ x = C ↾ wf2') ∨ x = B ↾ wf3') ∨ x = D ↾ wf4') ∨ x ∈ rest1) ∨ x ∈ rest2
Σ: Signature
A: Pattern
wf1: well_formed A = true
C: Pattern
wf2: well_formed C = true
B: Pattern
wf3: well_formed B = true
D: Pattern
wf4: well_formed D = true
wf1': well_formed A = true
wf2': well_formed C = true
wf3': well_formed B = true
wf4': well_formed D = true
rest1, rest2: gset wfPattern
x: wfPattern
H: x = C ↾ wf2

((((x = A ↾ wf1' ∨ x = C ↾ wf2') ∨ x = B ↾ wf3') ∨ x = D ↾ wf4') ∨ x ∈ rest1) ∨ x ∈ rest2
Σ: Signature
A: Pattern
wf1: well_formed A = true
C: Pattern
wf2: well_formed C = true
B: Pattern
wf3: well_formed B = true
D: Pattern
wf4: well_formed D = true
wf1': well_formed A = true
wf2': well_formed C = true
wf3': well_formed B = true
wf4': well_formed D = true
rest1, rest2: gset wfPattern
x: wfPattern
H: x = C ↾ wf2

(((x = A ↾ wf1' ∨ x = C ↾ wf2') ∨ x = B ↾ wf3') ∨ x = D ↾ wf4') ∨ x ∈ rest1
Σ: Signature
A: Pattern
wf1: well_formed A = true
C: Pattern
wf2: well_formed C = true
B: Pattern
wf3: well_formed B = true
D: Pattern
wf4: well_formed D = true
wf1': well_formed A = true
wf2': well_formed C = true
wf3': well_formed B = true
wf4': well_formed D = true
rest1, rest2: gset wfPattern
x: wfPattern
H: x = C ↾ wf2

((x = A ↾ wf1' ∨ x = C ↾ wf2') ∨ x = B ↾ wf3') ∨ x = D ↾ wf4'
Σ: Signature
A: Pattern
wf1: well_formed A = true
C: Pattern
wf2: well_formed C = true
B: Pattern
wf3: well_formed B = true
D: Pattern
wf4: well_formed D = true
wf1': well_formed A = true
wf2': well_formed C = true
wf3': well_formed B = true
wf4': well_formed D = true
rest1, rest2: gset wfPattern
x: wfPattern
H: x = C ↾ wf2

(x = A ↾ wf1' ∨ x = C ↾ wf2') ∨ x = B ↾ wf3'
Σ: Signature
A: Pattern
wf1: well_formed A = true
C: Pattern
wf2: well_formed C = true
B: Pattern
wf3: well_formed B = true
D: Pattern
wf4: well_formed D = true
wf1': well_formed A = true
wf2': well_formed C = true
wf3': well_formed B = true
wf4': well_formed D = true
rest1, rest2: gset wfPattern
x: wfPattern
H: x = C ↾ wf2

x = A ↾ wf1' ∨ x = C ↾ wf2'
Σ: Signature
A: Pattern
wf1: well_formed A = true
C: Pattern
wf2: well_formed C = true
B: Pattern
wf3: well_formed B = true
D: Pattern
wf4: well_formed D = true
wf1': well_formed A = true
wf2': well_formed C = true
wf3': well_formed B = true
wf4': well_formed D = true
rest1, rest2: gset wfPattern
x: wfPattern
H: x = C ↾ wf2

x = C ↾ wf2'
pi_assumption.
Σ: Signature
A: Pattern
wf1: well_formed A = true
C: Pattern
wf2: well_formed C = true
B: Pattern
wf3: well_formed B = true
D: Pattern
wf4: well_formed D = true
wf1': well_formed A = true
wf2': well_formed C = true
wf3': well_formed B = true
wf4': well_formed D = true
rest1, rest2: gset wfPattern
x: wfPattern
H: x = D ↾ wf4

((((x = A ↾ wf1' ∨ x = C ↾ wf2') ∨ x = B ↾ wf3') ∨ x = D ↾ wf4') ∨ x ∈ rest1) ∨ x ∈ rest2
Σ: Signature
A: Pattern
wf1: well_formed A = true
C: Pattern
wf2: well_formed C = true
B: Pattern
wf3: well_formed B = true
D: Pattern
wf4: well_formed D = true
wf1': well_formed A = true
wf2': well_formed C = true
wf3': well_formed B = true
wf4': well_formed D = true
rest1, rest2: gset wfPattern
x: wfPattern
H: x = D ↾ wf4

((((x = A ↾ wf1' ∨ x = C ↾ wf2') ∨ x = B ↾ wf3') ∨ x = D ↾ wf4') ∨ x ∈ rest1) ∨ x ∈ rest2
Σ: Signature
A: Pattern
wf1: well_formed A = true
C: Pattern
wf2: well_formed C = true
B: Pattern
wf3: well_formed B = true
D: Pattern
wf4: well_formed D = true
wf1': well_formed A = true
wf2': well_formed C = true
wf3': well_formed B = true
wf4': well_formed D = true
rest1, rest2: gset wfPattern
x: wfPattern
H: x = D ↾ wf4

(((x = A ↾ wf1' ∨ x = C ↾ wf2') ∨ x = B ↾ wf3') ∨ x = D ↾ wf4') ∨ x ∈ rest1
Σ: Signature
A: Pattern
wf1: well_formed A = true
C: Pattern
wf2: well_formed C = true
B: Pattern
wf3: well_formed B = true
D: Pattern
wf4: well_formed D = true
wf1': well_formed A = true
wf2': well_formed C = true
wf3': well_formed B = true
wf4': well_formed D = true
rest1, rest2: gset wfPattern
x: wfPattern
H: x = D ↾ wf4

((x = A ↾ wf1' ∨ x = C ↾ wf2') ∨ x = B ↾ wf3') ∨ x = D ↾ wf4'
Σ: Signature
A: Pattern
wf1: well_formed A = true
C: Pattern
wf2: well_formed C = true
B: Pattern
wf3: well_formed B = true
D: Pattern
wf4: well_formed D = true
wf1': well_formed A = true
wf2': well_formed C = true
wf3': well_formed B = true
wf4': well_formed D = true
rest1, rest2: gset wfPattern
x: wfPattern
H: x = D ↾ wf4

x = D ↾ wf4'
pi_assumption. } }
Σ: Signature
sz: nat
Γ: Theory
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
E: evar
exdepth, mudepth: nat
gpi: ProofInfo
pf: Γ ⊢i p <---> q using gpi
IHsz: (ψ : Pattern) (wfψ : well_formed ψ), size' ψ ≤ sz → (EvS : EVarSet) (SvS : SVarSet), ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ p q wfψ wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ ⊆ SvS → Γ ⊢i ψ^[[evar:E↦p]] <---> ψ^[[evar:E↦q]] using gpi
wfψ: well_formed ⊥
Hsz: 1 ≤ S sz
EvS: EVarSet
SvS: SVarSet
i':= ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ⊥)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ⊥)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ⊥) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ⊥ p q wfψ wfp wfq): ProofInfo
pile: ProofInfoLe i' gpi
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
E_in_EvS: E ∈ EvS
ψ_sub_EvS: free_evars ⊥ ⊆ EvS
p_sub_SvS: free_svars p ⊆ SvS
q_sub_SvS: free_svars q ⊆ SvS
ψ_sub_SvS: free_svars ⊥ ⊆ SvS
HEinψ: E ∈ free_evars ⊥

Γ ⊢i ⊥ <---> ⊥ using gpi
Σ: Signature
sz: nat
Γ: Theory
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
E: evar
exdepth, mudepth: nat
gpi: ProofInfo
pf: Γ ⊢i p <---> q using gpi
IHsz: (ψ : Pattern) (wfψ : well_formed ψ), size' ψ ≤ sz → (EvS : EVarSet) (SvS : SVarSet), ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ p q wfψ wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ ⊆ SvS → Γ ⊢i ψ^[[evar:E↦p]] <---> ψ^[[evar:E↦q]] using gpi
ψ1, ψ2: Pattern
wfψ: well_formed (ψ1 ---> ψ2)
Hsz: S (size' ψ1 + size' ψ2) ≤ S sz
EvS: EVarSet
SvS: SVarSet
i':= ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (ψ1 ---> ψ2))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (ψ1 ---> ψ2))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (ψ1 ---> ψ2)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E (ψ1 ---> ψ2) p q wfψ wfp wfq): ProofInfo
pile: ProofInfoLe i' gpi
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
E_in_EvS: E ∈ EvS
ψ_sub_EvS: free_evars (ψ1 ---> ψ2) ⊆ EvS
p_sub_SvS: free_svars p ⊆ SvS
q_sub_SvS: free_svars q ⊆ SvS
ψ_sub_SvS: free_svars (ψ1 ---> ψ2) ⊆ SvS
HEinψ: E ∈ free_evars (ψ1 ---> ψ2)
Γ ⊢i (ψ1^[[evar:E↦p]] ---> ψ2^[[evar:E↦p]]) <---> (ψ1^[[evar:E↦q]] ---> ψ2^[[evar:E↦q]]) using gpi
Σ: Signature
sz: nat
Γ: Theory
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
E: evar
exdepth, mudepth: nat
gpi: ProofInfo
pf: Γ ⊢i p <---> q using gpi
IHsz: (ψ : Pattern) (wfψ : well_formed ψ), size' ψ ≤ sz → (EvS : EVarSet) (SvS : SVarSet), ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ p q wfψ wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ ⊆ SvS → Γ ⊢i ψ^[[evar:E↦p]] <---> ψ^[[evar:E↦q]] using gpi
ψ: Pattern
wfψ: well_formed (ex , ψ)
Hsz: S (size' ψ) ≤ S sz
EvS: EVarSet
SvS: SVarSet
i':= ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (ex , ψ))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (ex , ψ))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (ex , ψ)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E (ex , ψ) p q wfψ wfp wfq): ProofInfo
pile: ProofInfoLe i' gpi
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
E_in_EvS: E ∈ EvS
ψ_sub_EvS: free_evars (ex , ψ) ⊆ EvS
p_sub_SvS: free_svars p ⊆ SvS
q_sub_SvS: free_svars q ⊆ SvS
ψ_sub_SvS: free_svars (ex , ψ) ⊆ SvS
HEinψ: E ∈ free_evars (ex , ψ)
Γ ⊢i (ex , ψ^[[evar:E↦p]]) <---> (ex , ψ^[[evar:E↦q]]) using gpi
Σ: Signature
sz: nat
Γ: Theory
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
E: evar
exdepth, mudepth: nat
gpi: ProofInfo
pf: Γ ⊢i p <---> q using gpi
IHsz: (ψ : Pattern) (wfψ : well_formed ψ), size' ψ ≤ sz → (EvS : EVarSet) (SvS : SVarSet), ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ p q wfψ wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ ⊆ SvS → Γ ⊢i ψ^[[evar:E↦p]] <---> ψ^[[evar:E↦q]] using gpi
ψ: Pattern
wfψ: well_formed (mu , ψ)
Hsz: S (size' ψ) ≤ S sz
EvS: EVarSet
SvS: SVarSet
i':= ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (mu , ψ))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (mu , ψ))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (mu , ψ)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E (mu , ψ) p q wfψ wfp wfq): ProofInfo
pile: ProofInfoLe i' gpi
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
E_in_EvS: E ∈ EvS
ψ_sub_EvS: free_evars (mu , ψ) ⊆ EvS
p_sub_SvS: free_svars p ⊆ SvS
q_sub_SvS: free_svars q ⊆ SvS
ψ_sub_SvS: free_svars (mu , ψ) ⊆ SvS
HEinψ: E ∈ free_evars (mu , ψ)
Γ ⊢i (mu , ψ^[[evar:E↦p]]) <---> (mu , ψ^[[evar:E↦q]]) using gpi
Σ: Signature
sz: nat
Γ: Theory
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
E: evar
exdepth, mudepth: nat
gpi: ProofInfo
pf: Γ ⊢i p <---> q using gpi
IHsz: (ψ : Pattern) (wfψ : well_formed ψ), size' ψ ≤ sz → (EvS : EVarSet) (SvS : SVarSet), ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ p q wfψ wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ ⊆ SvS → Γ ⊢i ψ^[[evar:E↦p]] <---> ψ^[[evar:E↦q]] using gpi
wfψ: well_formed ⊥
Hsz: 1 ≤ S sz
EvS: EVarSet
SvS: SVarSet
i':= ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ⊥)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ⊥)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ⊥) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ⊥ p q wfψ wfp wfq): ProofInfo
pile: ProofInfoLe i' gpi
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
E_in_EvS: E ∈ EvS
ψ_sub_EvS: free_evars ⊥ ⊆ EvS
p_sub_SvS: free_svars p ⊆ SvS
q_sub_SvS: free_svars q ⊆ SvS
ψ_sub_SvS: free_svars ⊥ ⊆ SvS
HEinψ: E ∈ free_evars ⊥

Γ ⊢i ⊥ <---> ⊥ using gpi
Σ: Signature
sz: nat
Γ: Theory
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
E: evar
exdepth, mudepth: nat
gpi: ProofInfo
pf: Γ ⊢i p <---> q using gpi
IHsz: (ψ : Pattern) (wfψ : well_formed ψ), size' ψ ≤ sz → (EvS : EVarSet) (SvS : SVarSet), ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ p q wfψ wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ ⊆ SvS → Γ ⊢i ψ^[[evar:E↦p]] <---> ψ^[[evar:E↦q]] using gpi
wfψ: well_formed ⊥
Hsz: 1 ≤ S sz
EvS: EVarSet
SvS: SVarSet
i':= ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ⊥)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ⊥)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ⊥) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ⊥ p q wfψ wfp wfq): ProofInfo
pile: ProofInfoLe i' gpi
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
E_in_EvS: E ∈ EvS
ψ_sub_EvS: free_evars ⊥ ⊆ EvS
p_sub_SvS: free_svars p ⊆ SvS
q_sub_SvS: free_svars q ⊆ SvS
ψ_sub_SvS: free_svars ⊥ ⊆ SvS
HEinψ: E ∈ free_evars ⊥

Γ ⊢i ⊥ <---> ⊥ using BasicReasoning
Σ: Signature
sz: nat
Γ: Theory
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
E: evar
exdepth, mudepth: nat
gpi: ProofInfo
pf: Γ ⊢i p <---> q using gpi
IHsz: (ψ : Pattern) (wfψ : well_formed ψ), size' ψ ≤ sz → (EvS : EVarSet) (SvS : SVarSet), ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ p q wfψ wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ ⊆ SvS → Γ ⊢i ψ^[[evar:E↦p]] <---> ψ^[[evar:E↦q]] using gpi
wfψ: well_formed ⊥
Hsz: 1 ≤ S sz
EvS: EVarSet
SvS: SVarSet
i':= ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ⊥)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ⊥)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ⊥) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ⊥ p q wfψ wfp wfq): ProofInfo
pile: ProofInfoLe i' gpi
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
E_in_EvS: E ∈ EvS
ψ_sub_EvS: free_evars ⊥ ⊆ EvS
p_sub_SvS: free_svars p ⊆ SvS
q_sub_SvS: free_svars q ⊆ SvS
ψ_sub_SvS: free_svars ⊥ ⊆ SvS
HEinψ: E ∈ free_evars ⊥

well_formed ⊥
abstract (wf_auto2).
Σ: Signature
sz: nat
Γ: Theory
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
E: evar
exdepth, mudepth: nat
gpi: ProofInfo
pf: Γ ⊢i p <---> q using gpi
IHsz: (ψ : Pattern) (wfψ : well_formed ψ), size' ψ ≤ sz → (EvS : EVarSet) (SvS : SVarSet), ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ p q wfψ wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ ⊆ SvS → Γ ⊢i ψ^[[evar:E↦p]] <---> ψ^[[evar:E↦q]] using gpi
ψ1, ψ2: Pattern
wfψ: well_formed (ψ1 ---> ψ2)
Hsz: S (size' ψ1 + size' ψ2) ≤ S sz
EvS: EVarSet
SvS: SVarSet
i':= ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (ψ1 ---> ψ2))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (ψ1 ---> ψ2))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (ψ1 ---> ψ2)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E (ψ1 ---> ψ2) p q wfψ wfp wfq): ProofInfo
pile: ProofInfoLe i' gpi
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
E_in_EvS: E ∈ EvS
ψ_sub_EvS: free_evars (ψ1 ---> ψ2) ⊆ EvS
p_sub_SvS: free_svars p ⊆ SvS
q_sub_SvS: free_svars q ⊆ SvS
ψ_sub_SvS: free_svars (ψ1 ---> ψ2) ⊆ SvS
HEinψ: E ∈ free_evars (ψ1 ---> ψ2)

Γ ⊢i (ψ1^[[evar:E↦p]] ---> ψ2^[[evar:E↦p]]) <---> (ψ1^[[evar:E↦q]] ---> ψ2^[[evar:E↦q]]) using gpi
Σ: Signature
sz: nat
Γ: Theory
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
E: evar
exdepth, mudepth: nat
gpi: ProofInfo
pf: Γ ⊢i p <---> q using gpi
IHsz: (ψ : Pattern) (wfψ : well_formed ψ), size' ψ ≤ sz → (EvS : EVarSet) (SvS : SVarSet), ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ p q wfψ wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ ⊆ SvS → Γ ⊢i ψ^[[evar:E↦p]] <---> ψ^[[evar:E↦q]] using gpi
ψ: Pattern
wfψ: well_formed (ex , ψ)
Hsz: S (size' ψ) ≤ S sz
EvS: EVarSet
SvS: SVarSet
i':= ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (ex , ψ))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (ex , ψ))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (ex , ψ)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E (ex , ψ) p q wfψ wfp wfq): ProofInfo
pile: ProofInfoLe i' gpi
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
E_in_EvS: E ∈ EvS
ψ_sub_EvS: free_evars (ex , ψ) ⊆ EvS
p_sub_SvS: free_svars p ⊆ SvS
q_sub_SvS: free_svars q ⊆ SvS
ψ_sub_SvS: free_svars (ex , ψ) ⊆ SvS
HEinψ: E ∈ free_evars (ex , ψ)
Γ ⊢i (ex , ψ^[[evar:E↦p]]) <---> (ex , ψ^[[evar:E↦q]]) using gpi
Σ: Signature
sz: nat
Γ: Theory
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
E: evar
exdepth, mudepth: nat
gpi: ProofInfo
pf: Γ ⊢i p <---> q using gpi
IHsz: (ψ : Pattern) (wfψ : well_formed ψ), size' ψ ≤ sz → (EvS : EVarSet) (SvS : SVarSet), ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ p q wfψ wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ ⊆ SvS → Γ ⊢i ψ^[[evar:E↦p]] <---> ψ^[[evar:E↦q]] using gpi
ψ: Pattern
wfψ: well_formed (mu , ψ)
Hsz: S (size' ψ) ≤ S sz
EvS: EVarSet
SvS: SVarSet
i':= ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (mu , ψ))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (mu , ψ))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (mu , ψ)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E (mu , ψ) p q wfψ wfp wfq): ProofInfo
pile: ProofInfoLe i' gpi
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
E_in_EvS: E ∈ EvS
ψ_sub_EvS: free_evars (mu , ψ) ⊆ EvS
p_sub_SvS: free_svars p ⊆ SvS
q_sub_SvS: free_svars q ⊆ SvS
ψ_sub_SvS: free_svars (mu , ψ) ⊆ SvS
HEinψ: E ∈ free_evars (mu , ψ)
Γ ⊢i (mu , ψ^[[evar:E↦p]]) <---> (mu , ψ^[[evar:E↦q]]) using gpi
Σ: Signature
sz: nat
Γ: Theory
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
E: evar
exdepth, mudepth: nat
gpi: ProofInfo
pf: Γ ⊢i p <---> q using gpi
IHsz: (ψ : Pattern) (wfψ : well_formed ψ), size' ψ ≤ sz → (EvS : EVarSet) (SvS : SVarSet), ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ p q wfψ wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ ⊆ SvS → Γ ⊢i ψ^[[evar:E↦p]] <---> ψ^[[evar:E↦q]] using gpi
ψ1, ψ2: Pattern
wfψ: well_formed (ψ1 ---> ψ2)
Hsz: S (size' ψ1 + size' ψ2) ≤ S sz
EvS: EVarSet
SvS: SVarSet
i':= ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (ψ1 ---> ψ2))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (ψ1 ---> ψ2))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (ψ1 ---> ψ2)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E (ψ1 ---> ψ2) p q wfψ wfp wfq): ProofInfo
pile: ProofInfoLe i' gpi
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
E_in_EvS: E ∈ EvS
ψ_sub_EvS: free_evars (ψ1 ---> ψ2) ⊆ EvS
p_sub_SvS: free_svars p ⊆ SvS
q_sub_SvS: free_svars q ⊆ SvS
ψ_sub_SvS: free_svars (ψ1 ---> ψ2) ⊆ SvS
HEinψ: E ∈ free_evars (ψ1 ---> ψ2)

Γ ⊢i (ψ1^[[evar:E↦p]] ---> ψ2^[[evar:E↦p]]) <---> (ψ1^[[evar:E↦q]] ---> ψ2^[[evar:E↦q]]) using gpi
Σ: Signature
sz: nat
Γ: Theory
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
E: evar
exdepth, mudepth: nat
gpi: ProofInfo
pf: Γ ⊢i p <---> q using gpi
IHsz: (ψ : Pattern) (wfψ : well_formed ψ), size' ψ ≤ sz → (EvS : EVarSet) (SvS : SVarSet), ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ p q wfψ wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ ⊆ SvS → Γ ⊢i ψ^[[evar:E↦p]] <---> ψ^[[evar:E↦q]] using gpi
ψ1, ψ2: Pattern
wfψ: well_formed (ψ1 ---> ψ2)
Hsz: S (size' ψ1 + size' ψ2) ≤ S sz
EvS: EVarSet
SvS: SVarSet
i':= ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (ψ1 ---> ψ2))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (ψ1 ---> ψ2))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (ψ1 ---> ψ2)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E (ψ1 ---> ψ2) p q wfψ wfp wfq): ProofInfo
pile: ProofInfoLe i' gpi
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
E_in_EvS: E ∈ EvS
ψ_sub_EvS: free_evars (ψ1 ---> ψ2) ⊆ EvS
p_sub_SvS: free_svars p ⊆ SvS
q_sub_SvS: free_svars q ⊆ SvS
ψ_sub_SvS: free_svars (ψ1 ---> ψ2) ⊆ SvS
HEinψ: E ∈ free_evars (ψ1 ---> ψ2)

well_formed ψ1 = true
Σ: Signature
sz: nat
Γ: Theory
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
E: evar
exdepth, mudepth: nat
gpi: ProofInfo
pf: Γ ⊢i p <---> q using gpi
IHsz: (ψ : Pattern) (wfψ : well_formed ψ), size' ψ ≤ sz → (EvS : EVarSet) (SvS : SVarSet), ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ p q wfψ wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ ⊆ SvS → Γ ⊢i ψ^[[evar:E↦p]] <---> ψ^[[evar:E↦q]] using gpi
ψ1, ψ2: Pattern
wfψ: well_formed (ψ1 ---> ψ2)
Hsz: S (size' ψ1 + size' ψ2) ≤ S sz
EvS: EVarSet
SvS: SVarSet
i':= ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (ψ1 ---> ψ2))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (ψ1 ---> ψ2))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (ψ1 ---> ψ2)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E (ψ1 ---> ψ2) p q wfψ wfp wfq): ProofInfo
pile: ProofInfoLe i' gpi
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
E_in_EvS: E ∈ EvS
ψ_sub_EvS: free_evars (ψ1 ---> ψ2) ⊆ EvS
p_sub_SvS: free_svars p ⊆ SvS
q_sub_SvS: free_svars q ⊆ SvS
ψ_sub_SvS: free_svars (ψ1 ---> ψ2) ⊆ SvS
HEinψ: E ∈ free_evars (ψ1 ---> ψ2)
wfψ1: well_formed ψ1 = true
Γ ⊢i (ψ1^[[evar:E↦p]] ---> ψ2^[[evar:E↦p]]) <---> (ψ1^[[evar:E↦q]] ---> ψ2^[[evar:E↦q]]) using gpi
Σ: Signature
sz: nat
Γ: Theory
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
E: evar
exdepth, mudepth: nat
gpi: ProofInfo
pf: Γ ⊢i p <---> q using gpi
IHsz: (ψ : Pattern) (wfψ : well_formed ψ), size' ψ ≤ sz → (EvS : EVarSet) (SvS : SVarSet), ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ p q wfψ wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ ⊆ SvS → Γ ⊢i ψ^[[evar:E↦p]] <---> ψ^[[evar:E↦q]] using gpi
ψ1, ψ2: Pattern
wfψ: well_formed (ψ1 ---> ψ2)
Hsz: S (size' ψ1 + size' ψ2) ≤ S sz
EvS: EVarSet
SvS: SVarSet
i':= ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (ψ1 ---> ψ2))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (ψ1 ---> ψ2))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (ψ1 ---> ψ2)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E (ψ1 ---> ψ2) p q wfψ wfp wfq): ProofInfo
pile: ProofInfoLe i' gpi
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
E_in_EvS: E ∈ EvS
ψ_sub_EvS: free_evars (ψ1 ---> ψ2) ⊆ EvS
p_sub_SvS: free_svars p ⊆ SvS
q_sub_SvS: free_svars q ⊆ SvS
ψ_sub_SvS: free_svars (ψ1 ---> ψ2) ⊆ SvS
HEinψ: E ∈ free_evars (ψ1 ---> ψ2)

well_formed ψ1 = true
Σ: Signature
ψ1, ψ2: Pattern
wfψ: well_formed (ψ1 ---> ψ2)

well_formed ψ1 = true
abstract (wf_auto2).
Σ: Signature
sz: nat
Γ: Theory
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
E: evar
exdepth, mudepth: nat
gpi: ProofInfo
pf: Γ ⊢i p <---> q using gpi
IHsz: (ψ : Pattern) (wfψ : well_formed ψ), size' ψ ≤ sz → (EvS : EVarSet) (SvS : SVarSet), ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ p q wfψ wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ ⊆ SvS → Γ ⊢i ψ^[[evar:E↦p]] <---> ψ^[[evar:E↦q]] using gpi
ψ1, ψ2: Pattern
wfψ: well_formed (ψ1 ---> ψ2)
Hsz: S (size' ψ1 + size' ψ2) ≤ S sz
EvS: EVarSet
SvS: SVarSet
i':= ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (ψ1 ---> ψ2))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (ψ1 ---> ψ2))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (ψ1 ---> ψ2)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E (ψ1 ---> ψ2) p q wfψ wfp wfq): ProofInfo
pile: ProofInfoLe i' gpi
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
E_in_EvS: E ∈ EvS
ψ_sub_EvS: free_evars (ψ1 ---> ψ2) ⊆ EvS
p_sub_SvS: free_svars p ⊆ SvS
q_sub_SvS: free_svars q ⊆ SvS
ψ_sub_SvS: free_svars (ψ1 ---> ψ2) ⊆ SvS
HEinψ: E ∈ free_evars (ψ1 ---> ψ2)
wfψ1: well_formed ψ1 = true

Γ ⊢i (ψ1^[[evar:E↦p]] ---> ψ2^[[evar:E↦p]]) <---> (ψ1^[[evar:E↦q]] ---> ψ2^[[evar:E↦q]]) using gpi
Σ: Signature
sz: nat
Γ: Theory
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
E: evar
exdepth, mudepth: nat
gpi: ProofInfo
pf: Γ ⊢i p <---> q using gpi
IHsz: (ψ : Pattern) (wfψ : well_formed ψ), size' ψ ≤ sz → (EvS : EVarSet) (SvS : SVarSet), ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ p q wfψ wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ ⊆ SvS → Γ ⊢i ψ^[[evar:E↦p]] <---> ψ^[[evar:E↦q]] using gpi
ψ1, ψ2: Pattern
wfψ: well_formed (ψ1 ---> ψ2)
Hsz: S (size' ψ1 + size' ψ2) ≤ S sz
EvS: EVarSet
SvS: SVarSet
i':= ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (ψ1 ---> ψ2))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (ψ1 ---> ψ2))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (ψ1 ---> ψ2)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E (ψ1 ---> ψ2) p q wfψ wfp wfq): ProofInfo
pile: ProofInfoLe i' gpi
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
E_in_EvS: E ∈ EvS
ψ_sub_EvS: free_evars (ψ1 ---> ψ2) ⊆ EvS
p_sub_SvS: free_svars p ⊆ SvS
q_sub_SvS: free_svars q ⊆ SvS
ψ_sub_SvS: free_svars (ψ1 ---> ψ2) ⊆ SvS
HEinψ: E ∈ free_evars (ψ1 ---> ψ2)
wfψ1: well_formed ψ1 = true
H: size' ψ1 ≤ sz

Γ ⊢i (ψ1^[[evar:E↦p]] ---> ψ2^[[evar:E↦p]]) <---> (ψ1^[[evar:E↦q]] ---> ψ2^[[evar:E↦q]]) using gpi
Σ: Signature
sz: nat
Γ: Theory
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
E: evar
exdepth, mudepth: nat
gpi: ProofInfo
pf: Γ ⊢i p <---> q using gpi
IHsz: (ψ : Pattern) (wfψ : well_formed ψ), size' ψ ≤ sz → (EvS : EVarSet) (SvS : SVarSet), ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ p q wfψ wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ ⊆ SvS → Γ ⊢i ψ^[[evar:E↦p]] <---> ψ^[[evar:E↦q]] using gpi
ψ1, ψ2: Pattern
wfψ: well_formed (ψ1 ---> ψ2)
Hsz: S (size' ψ1 + size' ψ2) ≤ S sz
EvS: EVarSet
SvS: SVarSet
i':= ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (ψ1 ---> ψ2))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (ψ1 ---> ψ2))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (ψ1 ---> ψ2)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E (ψ1 ---> ψ2) p q wfψ wfp wfq): ProofInfo
pile: ProofInfoLe i' gpi
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
E_in_EvS: E ∈ EvS
ψ_sub_EvS: free_evars (ψ1 ---> ψ2) ⊆ EvS
p_sub_SvS: free_svars p ⊆ SvS
q_sub_SvS: free_svars q ⊆ SvS
ψ_sub_SvS: free_svars (ψ1 ---> ψ2) ⊆ SvS
HEinψ: E ∈ free_evars (ψ1 ---> ψ2)
wfψ1: well_formed ψ1 = true
H: size' ψ1 ≤ sz

well_formed ψ2 = true
Σ: Signature
sz: nat
Γ: Theory
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
E: evar
exdepth, mudepth: nat
gpi: ProofInfo
pf: Γ ⊢i p <---> q using gpi
IHsz: (ψ : Pattern) (wfψ : well_formed ψ), size' ψ ≤ sz → (EvS : EVarSet) (SvS : SVarSet), ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ p q wfψ wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ ⊆ SvS → Γ ⊢i ψ^[[evar:E↦p]] <---> ψ^[[evar:E↦q]] using gpi
ψ1, ψ2: Pattern
wfψ: well_formed (ψ1 ---> ψ2)
Hsz: S (size' ψ1 + size' ψ2) ≤ S sz
EvS: EVarSet
SvS: SVarSet
i':= ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (ψ1 ---> ψ2))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (ψ1 ---> ψ2))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (ψ1 ---> ψ2)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E (ψ1 ---> ψ2) p q wfψ wfp wfq): ProofInfo
pile: ProofInfoLe i' gpi
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
E_in_EvS: E ∈ EvS
ψ_sub_EvS: free_evars (ψ1 ---> ψ2) ⊆ EvS
p_sub_SvS: free_svars p ⊆ SvS
q_sub_SvS: free_svars q ⊆ SvS
ψ_sub_SvS: free_svars (ψ1 ---> ψ2) ⊆ SvS
HEinψ: E ∈ free_evars (ψ1 ---> ψ2)
wfψ1: well_formed ψ1 = true
H: size' ψ1 ≤ sz
wfψ2: well_formed ψ2 = true
Γ ⊢i (ψ1^[[evar:E↦p]] ---> ψ2^[[evar:E↦p]]) <---> (ψ1^[[evar:E↦q]] ---> ψ2^[[evar:E↦q]]) using gpi
Σ: Signature
sz: nat
Γ: Theory
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
E: evar
exdepth, mudepth: nat
gpi: ProofInfo
pf: Γ ⊢i p <---> q using gpi
IHsz: (ψ : Pattern) (wfψ : well_formed ψ), size' ψ ≤ sz → (EvS : EVarSet) (SvS : SVarSet), ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ p q wfψ wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ ⊆ SvS → Γ ⊢i ψ^[[evar:E↦p]] <---> ψ^[[evar:E↦q]] using gpi
ψ1, ψ2: Pattern
wfψ: well_formed (ψ1 ---> ψ2)
Hsz: S (size' ψ1 + size' ψ2) ≤ S sz
EvS: EVarSet
SvS: SVarSet
i':= ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (ψ1 ---> ψ2))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (ψ1 ---> ψ2))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (ψ1 ---> ψ2)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E (ψ1 ---> ψ2) p q wfψ wfp wfq): ProofInfo
pile: ProofInfoLe i' gpi
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
E_in_EvS: E ∈ EvS
ψ_sub_EvS: free_evars (ψ1 ---> ψ2) ⊆ EvS
p_sub_SvS: free_svars p ⊆ SvS
q_sub_SvS: free_svars q ⊆ SvS
ψ_sub_SvS: free_svars (ψ1 ---> ψ2) ⊆ SvS
HEinψ: E ∈ free_evars (ψ1 ---> ψ2)
wfψ1: well_formed ψ1 = true
H: size' ψ1 ≤ sz

well_formed ψ2 = true
Σ: Signature
ψ1, ψ2: Pattern
wfψ: well_formed (ψ1 ---> ψ2)

well_formed ψ2 = true
abstract (wf_auto2).
Σ: Signature
sz: nat
Γ: Theory
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
E: evar
exdepth, mudepth: nat
gpi: ProofInfo
pf: Γ ⊢i p <---> q using gpi
IHsz: (ψ : Pattern) (wfψ : well_formed ψ), size' ψ ≤ sz → (EvS : EVarSet) (SvS : SVarSet), ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ p q wfψ wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ ⊆ SvS → Γ ⊢i ψ^[[evar:E↦p]] <---> ψ^[[evar:E↦q]] using gpi
ψ1, ψ2: Pattern
wfψ: well_formed (ψ1 ---> ψ2)
Hsz: S (size' ψ1 + size' ψ2) ≤ S sz
EvS: EVarSet
SvS: SVarSet
i':= ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (ψ1 ---> ψ2))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (ψ1 ---> ψ2))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (ψ1 ---> ψ2)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E (ψ1 ---> ψ2) p q wfψ wfp wfq): ProofInfo
pile: ProofInfoLe i' gpi
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
E_in_EvS: E ∈ EvS
ψ_sub_EvS: free_evars (ψ1 ---> ψ2) ⊆ EvS
p_sub_SvS: free_svars p ⊆ SvS
q_sub_SvS: free_svars q ⊆ SvS
ψ_sub_SvS: free_svars (ψ1 ---> ψ2) ⊆ SvS
HEinψ: E ∈ free_evars (ψ1 ---> ψ2)
wfψ1: well_formed ψ1 = true
H: size' ψ1 ≤ sz
wfψ2: well_formed ψ2 = true

Γ ⊢i (ψ1^[[evar:E↦p]] ---> ψ2^[[evar:E↦p]]) <---> (ψ1^[[evar:E↦q]] ---> ψ2^[[evar:E↦q]]) using gpi
Σ: Signature
sz: nat
Γ: Theory
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
E: evar
exdepth, mudepth: nat
gpi: ProofInfo
pf: Γ ⊢i p <---> q using gpi
IHsz: (ψ : Pattern) (wfψ : well_formed ψ), size' ψ ≤ sz → (EvS : EVarSet) (SvS : SVarSet), ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ p q wfψ wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ ⊆ SvS → Γ ⊢i ψ^[[evar:E↦p]] <---> ψ^[[evar:E↦q]] using gpi
ψ1, ψ2: Pattern
wfψ: well_formed (ψ1 ---> ψ2)
Hsz: S (size' ψ1 + size' ψ2) ≤ S sz
EvS: EVarSet
SvS: SVarSet
i':= ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (ψ1 ---> ψ2))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (ψ1 ---> ψ2))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (ψ1 ---> ψ2)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E (ψ1 ---> ψ2) p q wfψ wfp wfq): ProofInfo
pile: ProofInfoLe i' gpi
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
E_in_EvS: E ∈ EvS
ψ_sub_EvS: free_evars (ψ1 ---> ψ2) ⊆ EvS
p_sub_SvS: free_svars p ⊆ SvS
q_sub_SvS: free_svars q ⊆ SvS
ψ_sub_SvS: free_svars (ψ1 ---> ψ2) ⊆ SvS
HEinψ: E ∈ free_evars (ψ1 ---> ψ2)
wfψ1: well_formed ψ1 = true
H: size' ψ1 ≤ sz
wfψ2: well_formed ψ2 = true
H0: size' ψ2 ≤ sz

Γ ⊢i (ψ1^[[evar:E↦p]] ---> ψ2^[[evar:E↦p]]) <---> (ψ1^[[evar:E↦q]] ---> ψ2^[[evar:E↦q]]) using gpi
Σ: Signature
sz: nat
Γ: Theory
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
E: evar
exdepth, mudepth: nat
gpi: ProofInfo
pf: Γ ⊢i p <---> q using gpi
IHsz: (ψ : Pattern) (wfψ : well_formed ψ), size' ψ ≤ sz → (EvS : EVarSet) (SvS : SVarSet), ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ p q wfψ wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ ⊆ SvS → Γ ⊢i ψ^[[evar:E↦p]] <---> ψ^[[evar:E↦q]] using gpi
ψ1, ψ2: Pattern
wfψ: well_formed (ψ1 ---> ψ2)
Hsz: S (size' ψ1 + size' ψ2) ≤ S sz
EvS: EVarSet
SvS: SVarSet
i':= ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (ψ1 ---> ψ2))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (ψ1 ---> ψ2))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (ψ1 ---> ψ2)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E (ψ1 ---> ψ2) p q wfψ wfp wfq): ProofInfo
pile: ProofInfoLe i' gpi
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
E_in_EvS: E ∈ EvS
ψ_sub_EvS: free_evars (ψ1 ---> ψ2) ⊆ EvS
p_sub_SvS: free_svars p ⊆ SvS
q_sub_SvS: free_svars q ⊆ SvS
ψ_sub_SvS: free_svars (ψ1 ---> ψ2) ⊆ SvS
HEinψ: E ∈ free_evars (ψ1 ---> ψ2)
wfψ1: well_formed ψ1 = true
H: size' ψ1 ≤ sz
wfψ2: well_formed ψ2 = true
H0: size' ψ2 ≤ sz
pf₁: (EvS : EVarSet) (SvS : SVarSet), ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ1)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ1)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ1) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ1 p q wfψ1 wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ1 ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ1 ⊆ SvS → Γ ⊢i ψ1^[[evar:E↦p]] <---> ψ1^[[evar:E↦q]] using gpi

Γ ⊢i (ψ1^[[evar:E↦p]] ---> ψ2^[[evar:E↦p]]) <---> (ψ1^[[evar:E↦q]] ---> ψ2^[[evar:E↦q]]) using gpi
Σ: Signature
sz: nat
Γ: Theory
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
E: evar
exdepth, mudepth: nat
gpi: ProofInfo
pf: Γ ⊢i p <---> q using gpi
IHsz: (ψ : Pattern) (wfψ : well_formed ψ), size' ψ ≤ sz → (EvS : EVarSet) (SvS : SVarSet), ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ p q wfψ wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ ⊆ SvS → Γ ⊢i ψ^[[evar:E↦p]] <---> ψ^[[evar:E↦q]] using gpi
ψ1, ψ2: Pattern
wfψ: well_formed (ψ1 ---> ψ2)
Hsz: S (size' ψ1 + size' ψ2) ≤ S sz
EvS: EVarSet
SvS: SVarSet
i':= ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (ψ1 ---> ψ2))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (ψ1 ---> ψ2))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (ψ1 ---> ψ2)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E (ψ1 ---> ψ2) p q wfψ wfp wfq): ProofInfo
pile: ProofInfoLe i' gpi
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
E_in_EvS: E ∈ EvS
ψ_sub_EvS: free_evars (ψ1 ---> ψ2) ⊆ EvS
p_sub_SvS: free_svars p ⊆ SvS
q_sub_SvS: free_svars q ⊆ SvS
ψ_sub_SvS: free_svars (ψ1 ---> ψ2) ⊆ SvS
HEinψ: E ∈ free_evars (ψ1 ---> ψ2)
wfψ1: well_formed ψ1 = true
H: size' ψ1 ≤ sz
wfψ2: well_formed ψ2 = true
H0: size' ψ2 ≤ sz
pf₁: ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ1)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ1)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ1) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ1 p q wfψ1 wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ1 ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ1 ⊆ SvS → Γ ⊢i ψ1^[[evar:E↦p]] <---> ψ1^[[evar:E↦q]] using gpi

Γ ⊢i (ψ1^[[evar:E↦p]] ---> ψ2^[[evar:E↦p]]) <---> (ψ1^[[evar:E↦q]] ---> ψ2^[[evar:E↦q]]) using gpi
Σ: Signature
sz: nat
Γ: Theory
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
E: evar
exdepth, mudepth: nat
gpi: ProofInfo
pf: Γ ⊢i p <---> q using gpi
IHsz: (ψ : Pattern) (wfψ : well_formed ψ), size' ψ ≤ sz → (EvS : EVarSet) (SvS : SVarSet), ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ p q wfψ wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ ⊆ SvS → Γ ⊢i ψ^[[evar:E↦p]] <---> ψ^[[evar:E↦q]] using gpi
ψ1, ψ2: Pattern
wfψ: well_formed (ψ1 ---> ψ2)
Hsz: S (size' ψ1 + size' ψ2) ≤ S sz
EvS: EVarSet
SvS: SVarSet
i':= ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (ψ1 ---> ψ2))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (ψ1 ---> ψ2))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (ψ1 ---> ψ2)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E (ψ1 ---> ψ2) p q wfψ wfp wfq): ProofInfo
pile: ProofInfoLe i' gpi
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
E_in_EvS: E ∈ EvS
ψ_sub_EvS: free_evars (ψ1 ---> ψ2) ⊆ EvS
p_sub_SvS: free_svars p ⊆ SvS
q_sub_SvS: free_svars q ⊆ SvS
ψ_sub_SvS: free_svars (ψ1 ---> ψ2) ⊆ SvS
HEinψ: E ∈ free_evars (ψ1 ---> ψ2)
wfψ1: well_formed ψ1 = true
H: size' ψ1 ≤ sz
wfψ2: well_formed ψ2 = true
H0: size' ψ2 ≤ sz
pf₁: ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ1)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ1)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ1) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ1 p q wfψ1 wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ1 ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ1 ⊆ SvS → Γ ⊢i ψ1^[[evar:E↦p]] <---> ψ1^[[evar:E↦q]] using gpi

ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ1)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ1)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ1) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ1 p q wfψ1 wfp wfq)) gpi
Σ: Signature
sz: nat
Γ: Theory
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
E: evar
exdepth, mudepth: nat
gpi: ProofInfo
pf: Γ ⊢i p <---> q using gpi
IHsz: (ψ : Pattern) (wfψ : well_formed ψ), size' ψ ≤ sz → (EvS : EVarSet) (SvS : SVarSet), ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ p q wfψ wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ ⊆ SvS → Γ ⊢i ψ^[[evar:E↦p]] <---> ψ^[[evar:E↦q]] using gpi
ψ1, ψ2: Pattern
wfψ: well_formed (ψ1 ---> ψ2)
Hsz: S (size' ψ1 + size' ψ2) ≤ S sz
EvS: EVarSet
SvS: SVarSet
i':= ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (ψ1 ---> ψ2))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (ψ1 ---> ψ2))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (ψ1 ---> ψ2)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E (ψ1 ---> ψ2) p q wfψ wfp wfq): ProofInfo
pile: ProofInfoLe i' gpi
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
E_in_EvS: E ∈ EvS
ψ_sub_EvS: free_evars (ψ1 ---> ψ2) ⊆ EvS
p_sub_SvS: free_svars p ⊆ SvS
q_sub_SvS: free_svars q ⊆ SvS
ψ_sub_SvS: free_svars (ψ1 ---> ψ2) ⊆ SvS
HEinψ: E ∈ free_evars (ψ1 ---> ψ2)
wfψ1: well_formed ψ1 = true
H: size' ψ1 ≤ sz
wfψ2: well_formed ψ2 = true
H0: size' ψ2 ≤ sz
pf₁: ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ1)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ1)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ1) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ1 p q wfψ1 wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ1 ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ1 ⊆ SvS → Γ ⊢i ψ1^[[evar:E↦p]] <---> ψ1^[[evar:E↦q]] using gpi
free_evars p ⊆ EvS
Σ: Signature
sz: nat
Γ: Theory
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
E: evar
exdepth, mudepth: nat
gpi: ProofInfo
pf: Γ ⊢i p <---> q using gpi
IHsz: (ψ : Pattern) (wfψ : well_formed ψ), size' ψ ≤ sz → (EvS : EVarSet) (SvS : SVarSet), ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ p q wfψ wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ ⊆ SvS → Γ ⊢i ψ^[[evar:E↦p]] <---> ψ^[[evar:E↦q]] using gpi
ψ1, ψ2: Pattern
wfψ: well_formed (ψ1 ---> ψ2)
Hsz: S (size' ψ1 + size' ψ2) ≤ S sz
EvS: EVarSet
SvS: SVarSet
i':= ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (ψ1 ---> ψ2))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (ψ1 ---> ψ2))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (ψ1 ---> ψ2)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E (ψ1 ---> ψ2) p q wfψ wfp wfq): ProofInfo
pile: ProofInfoLe i' gpi
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
E_in_EvS: E ∈ EvS
ψ_sub_EvS: free_evars (ψ1 ---> ψ2) ⊆ EvS
p_sub_SvS: free_svars p ⊆ SvS
q_sub_SvS: free_svars q ⊆ SvS
ψ_sub_SvS: free_svars (ψ1 ---> ψ2) ⊆ SvS
HEinψ: E ∈ free_evars (ψ1 ---> ψ2)
wfψ1: well_formed ψ1 = true
H: size' ψ1 ≤ sz
wfψ2: well_formed ψ2 = true
H0: size' ψ2 ≤ sz
pf₁: ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ1)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ1)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ1) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ1 p q wfψ1 wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ1 ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ1 ⊆ SvS → Γ ⊢i ψ1^[[evar:E↦p]] <---> ψ1^[[evar:E↦q]] using gpi
free_evars q ⊆ EvS
Σ: Signature
sz: nat
Γ: Theory
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
E: evar
exdepth, mudepth: nat
gpi: ProofInfo
pf: Γ ⊢i p <---> q using gpi
IHsz: (ψ : Pattern) (wfψ : well_formed ψ), size' ψ ≤ sz → (EvS : EVarSet) (SvS : SVarSet), ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ p q wfψ wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ ⊆ SvS → Γ ⊢i ψ^[[evar:E↦p]] <---> ψ^[[evar:E↦q]] using gpi
ψ1, ψ2: Pattern
wfψ: well_formed (ψ1 ---> ψ2)
Hsz: S (size' ψ1 + size' ψ2) ≤ S sz
EvS: EVarSet
SvS: SVarSet
i':= ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (ψ1 ---> ψ2))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (ψ1 ---> ψ2))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (ψ1 ---> ψ2)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E (ψ1 ---> ψ2) p q wfψ wfp wfq): ProofInfo
pile: ProofInfoLe i' gpi
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
E_in_EvS: E ∈ EvS
ψ_sub_EvS: free_evars (ψ1 ---> ψ2) ⊆ EvS
p_sub_SvS: free_svars p ⊆ SvS
q_sub_SvS: free_svars q ⊆ SvS
ψ_sub_SvS: free_svars (ψ1 ---> ψ2) ⊆ SvS
HEinψ: E ∈ free_evars (ψ1 ---> ψ2)
wfψ1: well_formed ψ1 = true
H: size' ψ1 ≤ sz
wfψ2: well_formed ψ2 = true
H0: size' ψ2 ≤ sz
pf₁: ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ1)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ1)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ1) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ1 p q wfψ1 wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ1 ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ1 ⊆ SvS → Γ ⊢i ψ1^[[evar:E↦p]] <---> ψ1^[[evar:E↦q]] using gpi
E ∈ EvS
Σ: Signature
sz: nat
Γ: Theory
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
E: evar
exdepth, mudepth: nat
gpi: ProofInfo
pf: Γ ⊢i p <---> q using gpi
IHsz: (ψ : Pattern) (wfψ : well_formed ψ), size' ψ ≤ sz → (EvS : EVarSet) (SvS : SVarSet), ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ p q wfψ wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ ⊆ SvS → Γ ⊢i ψ^[[evar:E↦p]] <---> ψ^[[evar:E↦q]] using gpi
ψ1, ψ2: Pattern
wfψ: well_formed (ψ1 ---> ψ2)
Hsz: S (size' ψ1 + size' ψ2) ≤ S sz
EvS: EVarSet
SvS: SVarSet
i':= ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (ψ1 ---> ψ2))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (ψ1 ---> ψ2))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (ψ1 ---> ψ2)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E (ψ1 ---> ψ2) p q wfψ wfp wfq): ProofInfo
pile: ProofInfoLe i' gpi
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
E_in_EvS: E ∈ EvS
ψ_sub_EvS: free_evars (ψ1 ---> ψ2) ⊆ EvS
p_sub_SvS: free_svars p ⊆ SvS
q_sub_SvS: free_svars q ⊆ SvS
ψ_sub_SvS: free_svars (ψ1 ---> ψ2) ⊆ SvS
HEinψ: E ∈ free_evars (ψ1 ---> ψ2)
wfψ1: well_formed ψ1 = true
H: size' ψ1 ≤ sz
wfψ2: well_formed ψ2 = true
H0: size' ψ2 ≤ sz
pf₁: ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ1)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ1)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ1) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ1 p q wfψ1 wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ1 ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ1 ⊆ SvS → Γ ⊢i ψ1^[[evar:E↦p]] <---> ψ1^[[evar:E↦q]] using gpi
free_evars ψ1 ⊆ EvS
Σ: Signature
sz: nat
Γ: Theory
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
E: evar
exdepth, mudepth: nat
gpi: ProofInfo
pf: Γ ⊢i p <---> q using gpi
IHsz: (ψ : Pattern) (wfψ : well_formed ψ), size' ψ ≤ sz → (EvS : EVarSet) (SvS : SVarSet), ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ p q wfψ wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ ⊆ SvS → Γ ⊢i ψ^[[evar:E↦p]] <---> ψ^[[evar:E↦q]] using gpi
ψ1, ψ2: Pattern
wfψ: well_formed (ψ1 ---> ψ2)
Hsz: S (size' ψ1 + size' ψ2) ≤ S sz
EvS: EVarSet
SvS: SVarSet
i':= ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (ψ1 ---> ψ2))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (ψ1 ---> ψ2))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (ψ1 ---> ψ2)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E (ψ1 ---> ψ2) p q wfψ wfp wfq): ProofInfo
pile: ProofInfoLe i' gpi
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
E_in_EvS: E ∈ EvS
ψ_sub_EvS: free_evars (ψ1 ---> ψ2) ⊆ EvS
p_sub_SvS: free_svars p ⊆ SvS
q_sub_SvS: free_svars q ⊆ SvS
ψ_sub_SvS: free_svars (ψ1 ---> ψ2) ⊆ SvS
HEinψ: E ∈ free_evars (ψ1 ---> ψ2)
wfψ1: well_formed ψ1 = true
H: size' ψ1 ≤ sz
wfψ2: well_formed ψ2 = true
H0: size' ψ2 ≤ sz
pf₁: ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ1)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ1)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ1) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ1 p q wfψ1 wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ1 ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ1 ⊆ SvS → Γ ⊢i ψ1^[[evar:E↦p]] <---> ψ1^[[evar:E↦q]] using gpi
free_svars p ⊆ SvS
Σ: Signature
sz: nat
Γ: Theory
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
E: evar
exdepth, mudepth: nat
gpi: ProofInfo
pf: Γ ⊢i p <---> q using gpi
IHsz: (ψ : Pattern) (wfψ : well_formed ψ), size' ψ ≤ sz → (EvS : EVarSet) (SvS : SVarSet), ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ p q wfψ wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ ⊆ SvS → Γ ⊢i ψ^[[evar:E↦p]] <---> ψ^[[evar:E↦q]] using gpi
ψ1, ψ2: Pattern
wfψ: well_formed (ψ1 ---> ψ2)
Hsz: S (size' ψ1 + size' ψ2) ≤ S sz
EvS: EVarSet
SvS: SVarSet
i':= ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (ψ1 ---> ψ2))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (ψ1 ---> ψ2))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (ψ1 ---> ψ2)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E (ψ1 ---> ψ2) p q wfψ wfp wfq): ProofInfo
pile: ProofInfoLe i' gpi
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
E_in_EvS: E ∈ EvS
ψ_sub_EvS: free_evars (ψ1 ---> ψ2) ⊆ EvS
p_sub_SvS: free_svars p ⊆ SvS
q_sub_SvS: free_svars q ⊆ SvS
ψ_sub_SvS: free_svars (ψ1 ---> ψ2) ⊆ SvS
HEinψ: E ∈ free_evars (ψ1 ---> ψ2)
wfψ1: well_formed ψ1 = true
H: size' ψ1 ≤ sz
wfψ2: well_formed ψ2 = true
H0: size' ψ2 ≤ sz
pf₁: ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ1)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ1)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ1) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ1 p q wfψ1 wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ1 ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ1 ⊆ SvS → Γ ⊢i ψ1^[[evar:E↦p]] <---> ψ1^[[evar:E↦q]] using gpi
free_svars q ⊆ SvS
Σ: Signature
sz: nat
Γ: Theory
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
E: evar
exdepth, mudepth: nat
gpi: ProofInfo
pf: Γ ⊢i p <---> q using gpi
IHsz: (ψ : Pattern) (wfψ : well_formed ψ), size' ψ ≤ sz → (EvS : EVarSet) (SvS : SVarSet), ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ p q wfψ wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ ⊆ SvS → Γ ⊢i ψ^[[evar:E↦p]] <---> ψ^[[evar:E↦q]] using gpi
ψ1, ψ2: Pattern
wfψ: well_formed (ψ1 ---> ψ2)
Hsz: S (size' ψ1 + size' ψ2) ≤ S sz
EvS: EVarSet
SvS: SVarSet
i':= ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (ψ1 ---> ψ2))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (ψ1 ---> ψ2))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (ψ1 ---> ψ2)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E (ψ1 ---> ψ2) p q wfψ wfp wfq): ProofInfo
pile: ProofInfoLe i' gpi
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
E_in_EvS: E ∈ EvS
ψ_sub_EvS: free_evars (ψ1 ---> ψ2) ⊆ EvS
p_sub_SvS: free_svars p ⊆ SvS
q_sub_SvS: free_svars q ⊆ SvS
ψ_sub_SvS: free_svars (ψ1 ---> ψ2) ⊆ SvS
HEinψ: E ∈ free_evars (ψ1 ---> ψ2)
wfψ1: well_formed ψ1 = true
H: size' ψ1 ≤ sz
wfψ2: well_formed ψ2 = true
H0: size' ψ2 ≤ sz
pf₁: ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ1)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ1)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ1) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ1 p q wfψ1 wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ1 ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ1 ⊆ SvS → Γ ⊢i ψ1^[[evar:E↦p]] <---> ψ1^[[evar:E↦q]] using gpi
free_svars ψ1 ⊆ SvS
Σ: Signature
sz: nat
Γ: Theory
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
E: evar
exdepth, mudepth: nat
gpi: ProofInfo
pf: Γ ⊢i p <---> q using gpi
IHsz: (ψ : Pattern) (wfψ : well_formed ψ), size' ψ ≤ sz → (EvS : EVarSet) (SvS : SVarSet), ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ p q wfψ wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ ⊆ SvS → Γ ⊢i ψ^[[evar:E↦p]] <---> ψ^[[evar:E↦q]] using gpi
ψ1, ψ2: Pattern
wfψ: well_formed (ψ1 ---> ψ2)
Hsz: S (size' ψ1 + size' ψ2) ≤ S sz
EvS: EVarSet
SvS: SVarSet
i':= ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (ψ1 ---> ψ2))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (ψ1 ---> ψ2))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (ψ1 ---> ψ2)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E (ψ1 ---> ψ2) p q wfψ wfp wfq): ProofInfo
pile: ProofInfoLe i' gpi
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
E_in_EvS: E ∈ EvS
ψ_sub_EvS: free_evars (ψ1 ---> ψ2) ⊆ EvS
p_sub_SvS: free_svars p ⊆ SvS
q_sub_SvS: free_svars q ⊆ SvS
ψ_sub_SvS: free_svars (ψ1 ---> ψ2) ⊆ SvS
HEinψ: E ∈ free_evars (ψ1 ---> ψ2)
wfψ1: well_formed ψ1 = true
H: size' ψ1 ≤ sz
wfψ2: well_formed ψ2 = true
H0: size' ψ2 ≤ sz
pf₁: Γ ⊢i ψ1^[[evar:E↦p]] <---> ψ1^[[evar:E↦q]] using gpi
Γ ⊢i (ψ1^[[evar:E↦p]] ---> ψ2^[[evar:E↦p]]) <---> (ψ1^[[evar:E↦q]] ---> ψ2^[[evar:E↦q]]) using gpi
Σ: Signature
sz: nat
Γ: Theory
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
E: evar
exdepth, mudepth: nat
gpi: ProofInfo
pf: Γ ⊢i p <---> q using gpi
IHsz: (ψ : Pattern) (wfψ : well_formed ψ), size' ψ ≤ sz → (EvS : EVarSet) (SvS : SVarSet), ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ p q wfψ wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ ⊆ SvS → Γ ⊢i ψ^[[evar:E↦p]] <---> ψ^[[evar:E↦q]] using gpi
ψ1, ψ2: Pattern
wfψ: well_formed (ψ1 ---> ψ2)
Hsz: S (size' ψ1 + size' ψ2) ≤ S sz
EvS: EVarSet
SvS: SVarSet
i':= ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (ψ1 ---> ψ2))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (ψ1 ---> ψ2))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (ψ1 ---> ψ2)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E (ψ1 ---> ψ2) p q wfψ wfp wfq): ProofInfo
pile: ProofInfoLe i' gpi
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
E_in_EvS: E ∈ EvS
ψ_sub_EvS: free_evars (ψ1 ---> ψ2) ⊆ EvS
p_sub_SvS: free_svars p ⊆ SvS
q_sub_SvS: free_svars q ⊆ SvS
ψ_sub_SvS: free_svars (ψ1 ---> ψ2) ⊆ SvS
HEinψ: E ∈ free_evars (ψ1 ---> ψ2)
wfψ1: well_formed ψ1 = true
H: size' ψ1 ≤ sz
wfψ2: well_formed ψ2 = true
H0: size' ψ2 ≤ sz
pf₁: ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ1)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ1)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ1) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ1 p q wfψ1 wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ1 ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ1 ⊆ SvS → Γ ⊢i ψ1^[[evar:E↦p]] <---> ψ1^[[evar:E↦q]] using gpi

ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ1)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ1)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ1) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ1 p q wfψ1 wfp wfq)) gpi
abstract ( subst i'; eapply pile_trans; [|apply pile]; apply pile_evs_svs_kt; [(simpl; pose proof evar_fresh_seq_max; set_solver) |(simpl; pose proof svar_fresh_seq_max; set_solver) |(clear pf₁;repeat case_match; simpl; try reflexivity; simpl in *; lia) |(apply frames_on_the_way_to_hole'_imp_1) ] ).
Σ: Signature
sz: nat
Γ: Theory
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
E: evar
exdepth, mudepth: nat
gpi: ProofInfo
pf: Γ ⊢i p <---> q using gpi
IHsz: (ψ : Pattern) (wfψ : well_formed ψ), size' ψ ≤ sz → (EvS : EVarSet) (SvS : SVarSet), ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ p q wfψ wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ ⊆ SvS → Γ ⊢i ψ^[[evar:E↦p]] <---> ψ^[[evar:E↦q]] using gpi
ψ1, ψ2: Pattern
wfψ: well_formed (ψ1 ---> ψ2)
Hsz: S (size' ψ1 + size' ψ2) ≤ S sz
EvS: EVarSet
SvS: SVarSet
i':= ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (ψ1 ---> ψ2))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (ψ1 ---> ψ2))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (ψ1 ---> ψ2)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E (ψ1 ---> ψ2) p q wfψ wfp wfq): ProofInfo
pile: ProofInfoLe i' gpi
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
E_in_EvS: E ∈ EvS
ψ_sub_EvS: free_evars (ψ1 ---> ψ2) ⊆ EvS
p_sub_SvS: free_svars p ⊆ SvS
q_sub_SvS: free_svars q ⊆ SvS
ψ_sub_SvS: free_svars (ψ1 ---> ψ2) ⊆ SvS
HEinψ: E ∈ free_evars (ψ1 ---> ψ2)
wfψ1: well_formed ψ1 = true
H: size' ψ1 ≤ sz
wfψ2: well_formed ψ2 = true
H0: size' ψ2 ≤ sz
pf₁: ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ1)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ1)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ1) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ1 p q wfψ1 wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ1 ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ1 ⊆ SvS → Γ ⊢i ψ1^[[evar:E↦p]] <---> ψ1^[[evar:E↦q]] using gpi

free_evars p ⊆ EvS
Σ: Signature
sz: nat
Γ: Theory
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
E: evar
exdepth, mudepth: nat
gpi: ProofInfo
pf: Γ ⊢i p <---> q using gpi
IHsz: (ψ : Pattern) (wfψ : well_formed ψ), size' ψ ≤ sz → (EvS : EVarSet) (SvS : SVarSet), ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ p q wfψ wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ ⊆ SvS → Γ ⊢i ψ^[[evar:E↦p]] <---> ψ^[[evar:E↦q]] using gpi
ψ1, ψ2: Pattern
wfψ: well_formed (ψ1 ---> ψ2)
Hsz: S (size' ψ1 + size' ψ2) ≤ S sz
EvS: EVarSet
SvS: SVarSet
i':= ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (ψ1 ---> ψ2))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (ψ1 ---> ψ2))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (ψ1 ---> ψ2)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E (ψ1 ---> ψ2) p q wfψ wfp wfq): ProofInfo
pile: ProofInfoLe i' gpi
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
E_in_EvS: E ∈ EvS
ψ_sub_EvS: free_evars (ψ1 ---> ψ2) ⊆ EvS
p_sub_SvS: free_svars p ⊆ SvS
q_sub_SvS: free_svars q ⊆ SvS
ψ_sub_SvS: free_svars (ψ1 ---> ψ2) ⊆ SvS
HEinψ: E ∈ free_evars (ψ1 ---> ψ2)
wfψ1: well_formed ψ1 = true
H: size' ψ1 ≤ sz
wfψ2: well_formed ψ2 = true
H0: size' ψ2 ≤ sz
pf₁: ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ1)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ1)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ1) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ1 p q wfψ1 wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ1 ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ1 ⊆ SvS → Γ ⊢i ψ1^[[evar:E↦p]] <---> ψ1^[[evar:E↦q]] using gpi
free_evars q ⊆ EvS
Σ: Signature
sz: nat
Γ: Theory
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
E: evar
exdepth, mudepth: nat
gpi: ProofInfo
pf: Γ ⊢i p <---> q using gpi
IHsz: (ψ : Pattern) (wfψ : well_formed ψ), size' ψ ≤ sz → (EvS : EVarSet) (SvS : SVarSet), ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ p q wfψ wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ ⊆ SvS → Γ ⊢i ψ^[[evar:E↦p]] <---> ψ^[[evar:E↦q]] using gpi
ψ1, ψ2: Pattern
wfψ: well_formed (ψ1 ---> ψ2)
Hsz: S (size' ψ1 + size' ψ2) ≤ S sz
EvS: EVarSet
SvS: SVarSet
i':= ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (ψ1 ---> ψ2))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (ψ1 ---> ψ2))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (ψ1 ---> ψ2)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E (ψ1 ---> ψ2) p q wfψ wfp wfq): ProofInfo
pile: ProofInfoLe i' gpi
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
E_in_EvS: E ∈ EvS
ψ_sub_EvS: free_evars (ψ1 ---> ψ2) ⊆ EvS
p_sub_SvS: free_svars p ⊆ SvS
q_sub_SvS: free_svars q ⊆ SvS
ψ_sub_SvS: free_svars (ψ1 ---> ψ2) ⊆ SvS
HEinψ: E ∈ free_evars (ψ1 ---> ψ2)
wfψ1: well_formed ψ1 = true
H: size' ψ1 ≤ sz
wfψ2: well_formed ψ2 = true
H0: size' ψ2 ≤ sz
pf₁: ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ1)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ1)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ1) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ1 p q wfψ1 wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ1 ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ1 ⊆ SvS → Γ ⊢i ψ1^[[evar:E↦p]] <---> ψ1^[[evar:E↦q]] using gpi
E ∈ EvS
Σ: Signature
sz: nat
Γ: Theory
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
E: evar
exdepth, mudepth: nat
gpi: ProofInfo
pf: Γ ⊢i p <---> q using gpi
IHsz: (ψ : Pattern) (wfψ : well_formed ψ), size' ψ ≤ sz → (EvS : EVarSet) (SvS : SVarSet), ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ p q wfψ wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ ⊆ SvS → Γ ⊢i ψ^[[evar:E↦p]] <---> ψ^[[evar:E↦q]] using gpi
ψ1, ψ2: Pattern
wfψ: well_formed (ψ1 ---> ψ2)
Hsz: S (size' ψ1 + size' ψ2) ≤ S sz
EvS: EVarSet
SvS: SVarSet
i':= ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (ψ1 ---> ψ2))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (ψ1 ---> ψ2))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (ψ1 ---> ψ2)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E (ψ1 ---> ψ2) p q wfψ wfp wfq): ProofInfo
pile: ProofInfoLe i' gpi
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
E_in_EvS: E ∈ EvS
ψ_sub_EvS: free_evars (ψ1 ---> ψ2) ⊆ EvS
p_sub_SvS: free_svars p ⊆ SvS
q_sub_SvS: free_svars q ⊆ SvS
ψ_sub_SvS: free_svars (ψ1 ---> ψ2) ⊆ SvS
HEinψ: E ∈ free_evars (ψ1 ---> ψ2)
wfψ1: well_formed ψ1 = true
H: size' ψ1 ≤ sz
wfψ2: well_formed ψ2 = true
H0: size' ψ2 ≤ sz
pf₁: ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ1)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ1)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ1) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ1 p q wfψ1 wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ1 ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ1 ⊆ SvS → Γ ⊢i ψ1^[[evar:E↦p]] <---> ψ1^[[evar:E↦q]] using gpi
free_evars ψ1 ⊆ EvS
Σ: Signature
sz: nat
Γ: Theory
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
E: evar
exdepth, mudepth: nat
gpi: ProofInfo
pf: Γ ⊢i p <---> q using gpi
IHsz: (ψ : Pattern) (wfψ : well_formed ψ), size' ψ ≤ sz → (EvS : EVarSet) (SvS : SVarSet), ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ p q wfψ wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ ⊆ SvS → Γ ⊢i ψ^[[evar:E↦p]] <---> ψ^[[evar:E↦q]] using gpi
ψ1, ψ2: Pattern
wfψ: well_formed (ψ1 ---> ψ2)
Hsz: S (size' ψ1 + size' ψ2) ≤ S sz
EvS: EVarSet
SvS: SVarSet
i':= ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (ψ1 ---> ψ2))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (ψ1 ---> ψ2))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (ψ1 ---> ψ2)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E (ψ1 ---> ψ2) p q wfψ wfp wfq): ProofInfo
pile: ProofInfoLe i' gpi
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
E_in_EvS: E ∈ EvS
ψ_sub_EvS: free_evars (ψ1 ---> ψ2) ⊆ EvS
p_sub_SvS: free_svars p ⊆ SvS
q_sub_SvS: free_svars q ⊆ SvS
ψ_sub_SvS: free_svars (ψ1 ---> ψ2) ⊆ SvS
HEinψ: E ∈ free_evars (ψ1 ---> ψ2)
wfψ1: well_formed ψ1 = true
H: size' ψ1 ≤ sz
wfψ2: well_formed ψ2 = true
H0: size' ψ2 ≤ sz
pf₁: ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ1)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ1)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ1) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ1 p q wfψ1 wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ1 ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ1 ⊆ SvS → Γ ⊢i ψ1^[[evar:E↦p]] <---> ψ1^[[evar:E↦q]] using gpi
free_svars p ⊆ SvS
Σ: Signature
sz: nat
Γ: Theory
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
E: evar
exdepth, mudepth: nat
gpi: ProofInfo
pf: Γ ⊢i p <---> q using gpi
IHsz: (ψ : Pattern) (wfψ : well_formed ψ), size' ψ ≤ sz → (EvS : EVarSet) (SvS : SVarSet), ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ p q wfψ wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ ⊆ SvS → Γ ⊢i ψ^[[evar:E↦p]] <---> ψ^[[evar:E↦q]] using gpi
ψ1, ψ2: Pattern
wfψ: well_formed (ψ1 ---> ψ2)
Hsz: S (size' ψ1 + size' ψ2) ≤ S sz
EvS: EVarSet
SvS: SVarSet
i':= ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (ψ1 ---> ψ2))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (ψ1 ---> ψ2))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (ψ1 ---> ψ2)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E (ψ1 ---> ψ2) p q wfψ wfp wfq): ProofInfo
pile: ProofInfoLe i' gpi
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
E_in_EvS: E ∈ EvS
ψ_sub_EvS: free_evars (ψ1 ---> ψ2) ⊆ EvS
p_sub_SvS: free_svars p ⊆ SvS
q_sub_SvS: free_svars q ⊆ SvS
ψ_sub_SvS: free_svars (ψ1 ---> ψ2) ⊆ SvS
HEinψ: E ∈ free_evars (ψ1 ---> ψ2)
wfψ1: well_formed ψ1 = true
H: size' ψ1 ≤ sz
wfψ2: well_formed ψ2 = true
H0: size' ψ2 ≤ sz
pf₁: ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ1)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ1)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ1) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ1 p q wfψ1 wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ1 ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ1 ⊆ SvS → Γ ⊢i ψ1^[[evar:E↦p]] <---> ψ1^[[evar:E↦q]] using gpi
free_svars q ⊆ SvS
Σ: Signature
sz: nat
Γ: Theory
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
E: evar
exdepth, mudepth: nat
gpi: ProofInfo
pf: Γ ⊢i p <---> q using gpi
IHsz: (ψ : Pattern) (wfψ : well_formed ψ), size' ψ ≤ sz → (EvS : EVarSet) (SvS : SVarSet), ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ p q wfψ wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ ⊆ SvS → Γ ⊢i ψ^[[evar:E↦p]] <---> ψ^[[evar:E↦q]] using gpi
ψ1, ψ2: Pattern
wfψ: well_formed (ψ1 ---> ψ2)
Hsz: S (size' ψ1 + size' ψ2) ≤ S sz
EvS: EVarSet
SvS: SVarSet
i':= ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (ψ1 ---> ψ2))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (ψ1 ---> ψ2))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (ψ1 ---> ψ2)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E (ψ1 ---> ψ2) p q wfψ wfp wfq): ProofInfo
pile: ProofInfoLe i' gpi
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
E_in_EvS: E ∈ EvS
ψ_sub_EvS: free_evars (ψ1 ---> ψ2) ⊆ EvS
p_sub_SvS: free_svars p ⊆ SvS
q_sub_SvS: free_svars q ⊆ SvS
ψ_sub_SvS: free_svars (ψ1 ---> ψ2) ⊆ SvS
HEinψ: E ∈ free_evars (ψ1 ---> ψ2)
wfψ1: well_formed ψ1 = true
H: size' ψ1 ≤ sz
wfψ2: well_formed ψ2 = true
H0: size' ψ2 ≤ sz
pf₁: ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ1)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ1)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ1) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ1 p q wfψ1 wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ1 ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ1 ⊆ SvS → Γ ⊢i ψ1^[[evar:E↦p]] <---> ψ1^[[evar:E↦q]] using gpi
free_svars ψ1 ⊆ SvS
Σ: Signature
sz: nat
Γ: Theory
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
E: evar
exdepth, mudepth: nat
gpi: ProofInfo
pf: Γ ⊢i p <---> q using gpi
IHsz: (ψ : Pattern) (wfψ : well_formed ψ), size' ψ ≤ sz → (EvS : EVarSet) (SvS : SVarSet), ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ p q wfψ wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ ⊆ SvS → Γ ⊢i ψ^[[evar:E↦p]] <---> ψ^[[evar:E↦q]] using gpi
ψ1, ψ2: Pattern
wfψ: well_formed (ψ1 ---> ψ2)
Hsz: S (size' ψ1 + size' ψ2) ≤ S sz
EvS: EVarSet
SvS: SVarSet
i':= ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (ψ1 ---> ψ2))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (ψ1 ---> ψ2))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (ψ1 ---> ψ2)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E (ψ1 ---> ψ2) p q wfψ wfp wfq): ProofInfo
pile: ProofInfoLe i' gpi
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
E_in_EvS: E ∈ EvS
ψ_sub_EvS: free_evars (ψ1 ---> ψ2) ⊆ EvS
p_sub_SvS: free_svars p ⊆ SvS
q_sub_SvS: free_svars q ⊆ SvS
ψ_sub_SvS: free_svars (ψ1 ---> ψ2) ⊆ SvS
HEinψ: E ∈ free_evars (ψ1 ---> ψ2)
wfψ1: well_formed ψ1 = true
H: size' ψ1 ≤ sz
wfψ2: well_formed ψ2 = true
H0: size' ψ2 ≤ sz
pf₁: Γ ⊢i ψ1^[[evar:E↦p]] <---> ψ1^[[evar:E↦q]] using gpi
Γ ⊢i (ψ1^[[evar:E↦p]] ---> ψ2^[[evar:E↦p]]) <---> (ψ1^[[evar:E↦q]] ---> ψ2^[[evar:E↦q]]) using gpi
Σ: Signature
sz: nat
Γ: Theory
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
E: evar
exdepth, mudepth: nat
gpi: ProofInfo
pf: Γ ⊢i p <---> q using gpi
IHsz: (ψ : Pattern) (wfψ : well_formed ψ), size' ψ ≤ sz → (EvS : EVarSet) (SvS : SVarSet), ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ p q wfψ wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ ⊆ SvS → Γ ⊢i ψ^[[evar:E↦p]] <---> ψ^[[evar:E↦q]] using gpi
ψ1, ψ2: Pattern
wfψ: well_formed (ψ1 ---> ψ2)
Hsz: S (size' ψ1 + size' ψ2) ≤ S sz
EvS: EVarSet
SvS: SVarSet
i':= ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (ψ1 ---> ψ2))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (ψ1 ---> ψ2))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (ψ1 ---> ψ2)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E (ψ1 ---> ψ2) p q wfψ wfp wfq): ProofInfo
pile: ProofInfoLe i' gpi
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
E_in_EvS: E ∈ EvS
ψ_sub_EvS: free_evars (ψ1 ---> ψ2) ⊆ EvS
p_sub_SvS: free_svars p ⊆ SvS
q_sub_SvS: free_svars q ⊆ SvS
ψ_sub_SvS: free_svars (ψ1 ---> ψ2) ⊆ SvS
HEinψ: E ∈ free_evars (ψ1 ---> ψ2)
wfψ1: well_formed ψ1 = true
H: size' ψ1 ≤ sz
wfψ2: well_formed ψ2 = true
H0: size' ψ2 ≤ sz
pf₁: ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ1)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ1)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ1) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ1 p q wfψ1 wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ1 ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ1 ⊆ SvS → Γ ⊢i ψ1^[[evar:E↦p]] <---> ψ1^[[evar:E↦q]] using gpi

free_evars p ⊆ EvS
exact p_sub_EvS.
Σ: Signature
sz: nat
Γ: Theory
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
E: evar
exdepth, mudepth: nat
gpi: ProofInfo
pf: Γ ⊢i p <---> q using gpi
IHsz: (ψ : Pattern) (wfψ : well_formed ψ), size' ψ ≤ sz → (EvS : EVarSet) (SvS : SVarSet), ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ p q wfψ wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ ⊆ SvS → Γ ⊢i ψ^[[evar:E↦p]] <---> ψ^[[evar:E↦q]] using gpi
ψ1, ψ2: Pattern
wfψ: well_formed (ψ1 ---> ψ2)
Hsz: S (size' ψ1 + size' ψ2) ≤ S sz
EvS: EVarSet
SvS: SVarSet
i':= ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (ψ1 ---> ψ2))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (ψ1 ---> ψ2))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (ψ1 ---> ψ2)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E (ψ1 ---> ψ2) p q wfψ wfp wfq): ProofInfo
pile: ProofInfoLe i' gpi
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
E_in_EvS: E ∈ EvS
ψ_sub_EvS: free_evars (ψ1 ---> ψ2) ⊆ EvS
p_sub_SvS: free_svars p ⊆ SvS
q_sub_SvS: free_svars q ⊆ SvS
ψ_sub_SvS: free_svars (ψ1 ---> ψ2) ⊆ SvS
HEinψ: E ∈ free_evars (ψ1 ---> ψ2)
wfψ1: well_formed ψ1 = true
H: size' ψ1 ≤ sz
wfψ2: well_formed ψ2 = true
H0: size' ψ2 ≤ sz
pf₁: ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ1)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ1)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ1) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ1 p q wfψ1 wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ1 ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ1 ⊆ SvS → Γ ⊢i ψ1^[[evar:E↦p]] <---> ψ1^[[evar:E↦q]] using gpi

free_evars q ⊆ EvS
Σ: Signature
sz: nat
Γ: Theory
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
E: evar
exdepth, mudepth: nat
gpi: ProofInfo
pf: Γ ⊢i p <---> q using gpi
IHsz: (ψ : Pattern) (wfψ : well_formed ψ), size' ψ ≤ sz → (EvS : EVarSet) (SvS : SVarSet), ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ p q wfψ wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ ⊆ SvS → Γ ⊢i ψ^[[evar:E↦p]] <---> ψ^[[evar:E↦q]] using gpi
ψ1, ψ2: Pattern
wfψ: well_formed (ψ1 ---> ψ2)
Hsz: S (size' ψ1 + size' ψ2) ≤ S sz
EvS: EVarSet
SvS: SVarSet
i':= ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (ψ1 ---> ψ2))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (ψ1 ---> ψ2))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (ψ1 ---> ψ2)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E (ψ1 ---> ψ2) p q wfψ wfp wfq): ProofInfo
pile: ProofInfoLe i' gpi
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
E_in_EvS: E ∈ EvS
ψ_sub_EvS: free_evars (ψ1 ---> ψ2) ⊆ EvS
p_sub_SvS: free_svars p ⊆ SvS
q_sub_SvS: free_svars q ⊆ SvS
ψ_sub_SvS: free_svars (ψ1 ---> ψ2) ⊆ SvS
HEinψ: E ∈ free_evars (ψ1 ---> ψ2)
wfψ1: well_formed ψ1 = true
H: size' ψ1 ≤ sz
wfψ2: well_formed ψ2 = true
H0: size' ψ2 ≤ sz
pf₁: ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ1)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ1)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ1) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ1 p q wfψ1 wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ1 ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ1 ⊆ SvS → Γ ⊢i ψ1^[[evar:E↦p]] <---> ψ1^[[evar:E↦q]] using gpi
E ∈ EvS
Σ: Signature
sz: nat
Γ: Theory
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
E: evar
exdepth, mudepth: nat
gpi: ProofInfo
pf: Γ ⊢i p <---> q using gpi
IHsz: (ψ : Pattern) (wfψ : well_formed ψ), size' ψ ≤ sz → (EvS : EVarSet) (SvS : SVarSet), ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ p q wfψ wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ ⊆ SvS → Γ ⊢i ψ^[[evar:E↦p]] <---> ψ^[[evar:E↦q]] using gpi
ψ1, ψ2: Pattern
wfψ: well_formed (ψ1 ---> ψ2)
Hsz: S (size' ψ1 + size' ψ2) ≤ S sz
EvS: EVarSet
SvS: SVarSet
i':= ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (ψ1 ---> ψ2))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (ψ1 ---> ψ2))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (ψ1 ---> ψ2)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E (ψ1 ---> ψ2) p q wfψ wfp wfq): ProofInfo
pile: ProofInfoLe i' gpi
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
E_in_EvS: E ∈ EvS
ψ_sub_EvS: free_evars (ψ1 ---> ψ2) ⊆ EvS
p_sub_SvS: free_svars p ⊆ SvS
q_sub_SvS: free_svars q ⊆ SvS
ψ_sub_SvS: free_svars (ψ1 ---> ψ2) ⊆ SvS
HEinψ: E ∈ free_evars (ψ1 ---> ψ2)
wfψ1: well_formed ψ1 = true
H: size' ψ1 ≤ sz
wfψ2: well_formed ψ2 = true
H0: size' ψ2 ≤ sz
pf₁: ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ1)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ1)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ1) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ1 p q wfψ1 wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ1 ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ1 ⊆ SvS → Γ ⊢i ψ1^[[evar:E↦p]] <---> ψ1^[[evar:E↦q]] using gpi
free_evars ψ1 ⊆ EvS
Σ: Signature
sz: nat
Γ: Theory
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
E: evar
exdepth, mudepth: nat
gpi: ProofInfo
pf: Γ ⊢i p <---> q using gpi
IHsz: (ψ : Pattern) (wfψ : well_formed ψ), size' ψ ≤ sz → (EvS : EVarSet) (SvS : SVarSet), ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ p q wfψ wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ ⊆ SvS → Γ ⊢i ψ^[[evar:E↦p]] <---> ψ^[[evar:E↦q]] using gpi
ψ1, ψ2: Pattern
wfψ: well_formed (ψ1 ---> ψ2)
Hsz: S (size' ψ1 + size' ψ2) ≤ S sz
EvS: EVarSet
SvS: SVarSet
i':= ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (ψ1 ---> ψ2))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (ψ1 ---> ψ2))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (ψ1 ---> ψ2)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E (ψ1 ---> ψ2) p q wfψ wfp wfq): ProofInfo
pile: ProofInfoLe i' gpi
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
E_in_EvS: E ∈ EvS
ψ_sub_EvS: free_evars (ψ1 ---> ψ2) ⊆ EvS
p_sub_SvS: free_svars p ⊆ SvS
q_sub_SvS: free_svars q ⊆ SvS
ψ_sub_SvS: free_svars (ψ1 ---> ψ2) ⊆ SvS
HEinψ: E ∈ free_evars (ψ1 ---> ψ2)
wfψ1: well_formed ψ1 = true
H: size' ψ1 ≤ sz
wfψ2: well_formed ψ2 = true
H0: size' ψ2 ≤ sz
pf₁: ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ1)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ1)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ1) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ1 p q wfψ1 wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ1 ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ1 ⊆ SvS → Γ ⊢i ψ1^[[evar:E↦p]] <---> ψ1^[[evar:E↦q]] using gpi
free_svars p ⊆ SvS
Σ: Signature
sz: nat
Γ: Theory
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
E: evar
exdepth, mudepth: nat
gpi: ProofInfo
pf: Γ ⊢i p <---> q using gpi
IHsz: (ψ : Pattern) (wfψ : well_formed ψ), size' ψ ≤ sz → (EvS : EVarSet) (SvS : SVarSet), ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ p q wfψ wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ ⊆ SvS → Γ ⊢i ψ^[[evar:E↦p]] <---> ψ^[[evar:E↦q]] using gpi
ψ1, ψ2: Pattern
wfψ: well_formed (ψ1 ---> ψ2)
Hsz: S (size' ψ1 + size' ψ2) ≤ S sz
EvS: EVarSet
SvS: SVarSet
i':= ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (ψ1 ---> ψ2))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (ψ1 ---> ψ2))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (ψ1 ---> ψ2)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E (ψ1 ---> ψ2) p q wfψ wfp wfq): ProofInfo
pile: ProofInfoLe i' gpi
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
E_in_EvS: E ∈ EvS
ψ_sub_EvS: free_evars (ψ1 ---> ψ2) ⊆ EvS
p_sub_SvS: free_svars p ⊆ SvS
q_sub_SvS: free_svars q ⊆ SvS
ψ_sub_SvS: free_svars (ψ1 ---> ψ2) ⊆ SvS
HEinψ: E ∈ free_evars (ψ1 ---> ψ2)
wfψ1: well_formed ψ1 = true
H: size' ψ1 ≤ sz
wfψ2: well_formed ψ2 = true
H0: size' ψ2 ≤ sz
pf₁: ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ1)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ1)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ1) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ1 p q wfψ1 wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ1 ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ1 ⊆ SvS → Γ ⊢i ψ1^[[evar:E↦p]] <---> ψ1^[[evar:E↦q]] using gpi
free_svars q ⊆ SvS
Σ: Signature
sz: nat
Γ: Theory
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
E: evar
exdepth, mudepth: nat
gpi: ProofInfo
pf: Γ ⊢i p <---> q using gpi
IHsz: (ψ : Pattern) (wfψ : well_formed ψ), size' ψ ≤ sz → (EvS : EVarSet) (SvS : SVarSet), ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ p q wfψ wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ ⊆ SvS → Γ ⊢i ψ^[[evar:E↦p]] <---> ψ^[[evar:E↦q]] using gpi
ψ1, ψ2: Pattern
wfψ: well_formed (ψ1 ---> ψ2)
Hsz: S (size' ψ1 + size' ψ2) ≤ S sz
EvS: EVarSet
SvS: SVarSet
i':= ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (ψ1 ---> ψ2))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (ψ1 ---> ψ2))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (ψ1 ---> ψ2)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E (ψ1 ---> ψ2) p q wfψ wfp wfq): ProofInfo
pile: ProofInfoLe i' gpi
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
E_in_EvS: E ∈ EvS
ψ_sub_EvS: free_evars (ψ1 ---> ψ2) ⊆ EvS
p_sub_SvS: free_svars p ⊆ SvS
q_sub_SvS: free_svars q ⊆ SvS
ψ_sub_SvS: free_svars (ψ1 ---> ψ2) ⊆ SvS
HEinψ: E ∈ free_evars (ψ1 ---> ψ2)
wfψ1: well_formed ψ1 = true
H: size' ψ1 ≤ sz
wfψ2: well_formed ψ2 = true
H0: size' ψ2 ≤ sz
pf₁: ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ1)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ1)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ1) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ1 p q wfψ1 wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ1 ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ1 ⊆ SvS → Γ ⊢i ψ1^[[evar:E↦p]] <---> ψ1^[[evar:E↦q]] using gpi
free_svars ψ1 ⊆ SvS
Σ: Signature
sz: nat
Γ: Theory
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
E: evar
exdepth, mudepth: nat
gpi: ProofInfo
pf: Γ ⊢i p <---> q using gpi
IHsz: (ψ : Pattern) (wfψ : well_formed ψ), size' ψ ≤ sz → (EvS : EVarSet) (SvS : SVarSet), ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ p q wfψ wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ ⊆ SvS → Γ ⊢i ψ^[[evar:E↦p]] <---> ψ^[[evar:E↦q]] using gpi
ψ1, ψ2: Pattern
wfψ: well_formed (ψ1 ---> ψ2)
Hsz: S (size' ψ1 + size' ψ2) ≤ S sz
EvS: EVarSet
SvS: SVarSet
i':= ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (ψ1 ---> ψ2))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (ψ1 ---> ψ2))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (ψ1 ---> ψ2)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E (ψ1 ---> ψ2) p q wfψ wfp wfq): ProofInfo
pile: ProofInfoLe i' gpi
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
E_in_EvS: E ∈ EvS
ψ_sub_EvS: free_evars (ψ1 ---> ψ2) ⊆ EvS
p_sub_SvS: free_svars p ⊆ SvS
q_sub_SvS: free_svars q ⊆ SvS
ψ_sub_SvS: free_svars (ψ1 ---> ψ2) ⊆ SvS
HEinψ: E ∈ free_evars (ψ1 ---> ψ2)
wfψ1: well_formed ψ1 = true
H: size' ψ1 ≤ sz
wfψ2: well_formed ψ2 = true
H0: size' ψ2 ≤ sz
pf₁: Γ ⊢i ψ1^[[evar:E↦p]] <---> ψ1^[[evar:E↦q]] using gpi
Γ ⊢i (ψ1^[[evar:E↦p]] ---> ψ2^[[evar:E↦p]]) <---> (ψ1^[[evar:E↦q]] ---> ψ2^[[evar:E↦q]]) using gpi
Σ: Signature
sz: nat
Γ: Theory
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
E: evar
exdepth, mudepth: nat
gpi: ProofInfo
pf: Γ ⊢i p <---> q using gpi
IHsz: (ψ : Pattern) (wfψ : well_formed ψ), size' ψ ≤ sz → (EvS : EVarSet) (SvS : SVarSet), ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ p q wfψ wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ ⊆ SvS → Γ ⊢i ψ^[[evar:E↦p]] <---> ψ^[[evar:E↦q]] using gpi
ψ1, ψ2: Pattern
wfψ: well_formed (ψ1 ---> ψ2)
Hsz: S (size' ψ1 + size' ψ2) ≤ S sz
EvS: EVarSet
SvS: SVarSet
i':= ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (ψ1 ---> ψ2))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (ψ1 ---> ψ2))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (ψ1 ---> ψ2)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E (ψ1 ---> ψ2) p q wfψ wfp wfq): ProofInfo
pile: ProofInfoLe i' gpi
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
E_in_EvS: E ∈ EvS
ψ_sub_EvS: free_evars (ψ1 ---> ψ2) ⊆ EvS
p_sub_SvS: free_svars p ⊆ SvS
q_sub_SvS: free_svars q ⊆ SvS
ψ_sub_SvS: free_svars (ψ1 ---> ψ2) ⊆ SvS
HEinψ: E ∈ free_evars (ψ1 ---> ψ2)
wfψ1: well_formed ψ1 = true
H: size' ψ1 ≤ sz
wfψ2: well_formed ψ2 = true
H0: size' ψ2 ≤ sz
pf₁: ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ1)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ1)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ1) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ1 p q wfψ1 wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ1 ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ1 ⊆ SvS → Γ ⊢i ψ1^[[evar:E↦p]] <---> ψ1^[[evar:E↦q]] using gpi

free_evars q ⊆ EvS
exact q_sub_EvS.
Σ: Signature
sz: nat
Γ: Theory
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
E: evar
exdepth, mudepth: nat
gpi: ProofInfo
pf: Γ ⊢i p <---> q using gpi
IHsz: (ψ : Pattern) (wfψ : well_formed ψ), size' ψ ≤ sz → (EvS : EVarSet) (SvS : SVarSet), ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ p q wfψ wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ ⊆ SvS → Γ ⊢i ψ^[[evar:E↦p]] <---> ψ^[[evar:E↦q]] using gpi
ψ1, ψ2: Pattern
wfψ: well_formed (ψ1 ---> ψ2)
Hsz: S (size' ψ1 + size' ψ2) ≤ S sz
EvS: EVarSet
SvS: SVarSet
i':= ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (ψ1 ---> ψ2))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (ψ1 ---> ψ2))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (ψ1 ---> ψ2)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E (ψ1 ---> ψ2) p q wfψ wfp wfq): ProofInfo
pile: ProofInfoLe i' gpi
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
E_in_EvS: E ∈ EvS
ψ_sub_EvS: free_evars (ψ1 ---> ψ2) ⊆ EvS
p_sub_SvS: free_svars p ⊆ SvS
q_sub_SvS: free_svars q ⊆ SvS
ψ_sub_SvS: free_svars (ψ1 ---> ψ2) ⊆ SvS
HEinψ: E ∈ free_evars (ψ1 ---> ψ2)
wfψ1: well_formed ψ1 = true
H: size' ψ1 ≤ sz
wfψ2: well_formed ψ2 = true
H0: size' ψ2 ≤ sz
pf₁: ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ1)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ1)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ1) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ1 p q wfψ1 wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ1 ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ1 ⊆ SvS → Γ ⊢i ψ1^[[evar:E↦p]] <---> ψ1^[[evar:E↦q]] using gpi

E ∈ EvS
Σ: Signature
sz: nat
Γ: Theory
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
E: evar
exdepth, mudepth: nat
gpi: ProofInfo
pf: Γ ⊢i p <---> q using gpi
IHsz: (ψ : Pattern) (wfψ : well_formed ψ), size' ψ ≤ sz → (EvS : EVarSet) (SvS : SVarSet), ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ p q wfψ wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ ⊆ SvS → Γ ⊢i ψ^[[evar:E↦p]] <---> ψ^[[evar:E↦q]] using gpi
ψ1, ψ2: Pattern
wfψ: well_formed (ψ1 ---> ψ2)
Hsz: S (size' ψ1 + size' ψ2) ≤ S sz
EvS: EVarSet
SvS: SVarSet
i':= ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (ψ1 ---> ψ2))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (ψ1 ---> ψ2))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (ψ1 ---> ψ2)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E (ψ1 ---> ψ2) p q wfψ wfp wfq): ProofInfo
pile: ProofInfoLe i' gpi
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
E_in_EvS: E ∈ EvS
ψ_sub_EvS: free_evars (ψ1 ---> ψ2) ⊆ EvS
p_sub_SvS: free_svars p ⊆ SvS
q_sub_SvS: free_svars q ⊆ SvS
ψ_sub_SvS: free_svars (ψ1 ---> ψ2) ⊆ SvS
HEinψ: E ∈ free_evars (ψ1 ---> ψ2)
wfψ1: well_formed ψ1 = true
H: size' ψ1 ≤ sz
wfψ2: well_formed ψ2 = true
H0: size' ψ2 ≤ sz
pf₁: ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ1)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ1)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ1) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ1 p q wfψ1 wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ1 ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ1 ⊆ SvS → Γ ⊢i ψ1^[[evar:E↦p]] <---> ψ1^[[evar:E↦q]] using gpi
free_evars ψ1 ⊆ EvS
Σ: Signature
sz: nat
Γ: Theory
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
E: evar
exdepth, mudepth: nat
gpi: ProofInfo
pf: Γ ⊢i p <---> q using gpi
IHsz: (ψ : Pattern) (wfψ : well_formed ψ), size' ψ ≤ sz → (EvS : EVarSet) (SvS : SVarSet), ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ p q wfψ wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ ⊆ SvS → Γ ⊢i ψ^[[evar:E↦p]] <---> ψ^[[evar:E↦q]] using gpi
ψ1, ψ2: Pattern
wfψ: well_formed (ψ1 ---> ψ2)
Hsz: S (size' ψ1 + size' ψ2) ≤ S sz
EvS: EVarSet
SvS: SVarSet
i':= ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (ψ1 ---> ψ2))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (ψ1 ---> ψ2))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (ψ1 ---> ψ2)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E (ψ1 ---> ψ2) p q wfψ wfp wfq): ProofInfo
pile: ProofInfoLe i' gpi
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
E_in_EvS: E ∈ EvS
ψ_sub_EvS: free_evars (ψ1 ---> ψ2) ⊆ EvS
p_sub_SvS: free_svars p ⊆ SvS
q_sub_SvS: free_svars q ⊆ SvS
ψ_sub_SvS: free_svars (ψ1 ---> ψ2) ⊆ SvS
HEinψ: E ∈ free_evars (ψ1 ---> ψ2)
wfψ1: well_formed ψ1 = true
H: size' ψ1 ≤ sz
wfψ2: well_formed ψ2 = true
H0: size' ψ2 ≤ sz
pf₁: ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ1)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ1)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ1) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ1 p q wfψ1 wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ1 ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ1 ⊆ SvS → Γ ⊢i ψ1^[[evar:E↦p]] <---> ψ1^[[evar:E↦q]] using gpi
free_svars p ⊆ SvS
Σ: Signature
sz: nat
Γ: Theory
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
E: evar
exdepth, mudepth: nat
gpi: ProofInfo
pf: Γ ⊢i p <---> q using gpi
IHsz: (ψ : Pattern) (wfψ : well_formed ψ), size' ψ ≤ sz → (EvS : EVarSet) (SvS : SVarSet), ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ p q wfψ wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ ⊆ SvS → Γ ⊢i ψ^[[evar:E↦p]] <---> ψ^[[evar:E↦q]] using gpi
ψ1, ψ2: Pattern
wfψ: well_formed (ψ1 ---> ψ2)
Hsz: S (size' ψ1 + size' ψ2) ≤ S sz
EvS: EVarSet
SvS: SVarSet
i':= ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (ψ1 ---> ψ2))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (ψ1 ---> ψ2))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (ψ1 ---> ψ2)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E (ψ1 ---> ψ2) p q wfψ wfp wfq): ProofInfo
pile: ProofInfoLe i' gpi
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
E_in_EvS: E ∈ EvS
ψ_sub_EvS: free_evars (ψ1 ---> ψ2) ⊆ EvS
p_sub_SvS: free_svars p ⊆ SvS
q_sub_SvS: free_svars q ⊆ SvS
ψ_sub_SvS: free_svars (ψ1 ---> ψ2) ⊆ SvS
HEinψ: E ∈ free_evars (ψ1 ---> ψ2)
wfψ1: well_formed ψ1 = true
H: size' ψ1 ≤ sz
wfψ2: well_formed ψ2 = true
H0: size' ψ2 ≤ sz
pf₁: ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ1)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ1)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ1) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ1 p q wfψ1 wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ1 ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ1 ⊆ SvS → Γ ⊢i ψ1^[[evar:E↦p]] <---> ψ1^[[evar:E↦q]] using gpi
free_svars q ⊆ SvS
Σ: Signature
sz: nat
Γ: Theory
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
E: evar
exdepth, mudepth: nat
gpi: ProofInfo
pf: Γ ⊢i p <---> q using gpi
IHsz: (ψ : Pattern) (wfψ : well_formed ψ), size' ψ ≤ sz → (EvS : EVarSet) (SvS : SVarSet), ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ p q wfψ wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ ⊆ SvS → Γ ⊢i ψ^[[evar:E↦p]] <---> ψ^[[evar:E↦q]] using gpi
ψ1, ψ2: Pattern
wfψ: well_formed (ψ1 ---> ψ2)
Hsz: S (size' ψ1 + size' ψ2) ≤ S sz
EvS: EVarSet
SvS: SVarSet
i':= ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (ψ1 ---> ψ2))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (ψ1 ---> ψ2))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (ψ1 ---> ψ2)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E (ψ1 ---> ψ2) p q wfψ wfp wfq): ProofInfo
pile: ProofInfoLe i' gpi
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
E_in_EvS: E ∈ EvS
ψ_sub_EvS: free_evars (ψ1 ---> ψ2) ⊆ EvS
p_sub_SvS: free_svars p ⊆ SvS
q_sub_SvS: free_svars q ⊆ SvS
ψ_sub_SvS: free_svars (ψ1 ---> ψ2) ⊆ SvS
HEinψ: E ∈ free_evars (ψ1 ---> ψ2)
wfψ1: well_formed ψ1 = true
H: size' ψ1 ≤ sz
wfψ2: well_formed ψ2 = true
H0: size' ψ2 ≤ sz
pf₁: ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ1)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ1)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ1) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ1 p q wfψ1 wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ1 ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ1 ⊆ SvS → Γ ⊢i ψ1^[[evar:E↦p]] <---> ψ1^[[evar:E↦q]] using gpi
free_svars ψ1 ⊆ SvS
Σ: Signature
sz: nat
Γ: Theory
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
E: evar
exdepth, mudepth: nat
gpi: ProofInfo
pf: Γ ⊢i p <---> q using gpi
IHsz: (ψ : Pattern) (wfψ : well_formed ψ), size' ψ ≤ sz → (EvS : EVarSet) (SvS : SVarSet), ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ p q wfψ wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ ⊆ SvS → Γ ⊢i ψ^[[evar:E↦p]] <---> ψ^[[evar:E↦q]] using gpi
ψ1, ψ2: Pattern
wfψ: well_formed (ψ1 ---> ψ2)
Hsz: S (size' ψ1 + size' ψ2) ≤ S sz
EvS: EVarSet
SvS: SVarSet
i':= ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (ψ1 ---> ψ2))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (ψ1 ---> ψ2))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (ψ1 ---> ψ2)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E (ψ1 ---> ψ2) p q wfψ wfp wfq): ProofInfo
pile: ProofInfoLe i' gpi
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
E_in_EvS: E ∈ EvS
ψ_sub_EvS: free_evars (ψ1 ---> ψ2) ⊆ EvS
p_sub_SvS: free_svars p ⊆ SvS
q_sub_SvS: free_svars q ⊆ SvS
ψ_sub_SvS: free_svars (ψ1 ---> ψ2) ⊆ SvS
HEinψ: E ∈ free_evars (ψ1 ---> ψ2)
wfψ1: well_formed ψ1 = true
H: size' ψ1 ≤ sz
wfψ2: well_formed ψ2 = true
H0: size' ψ2 ≤ sz
pf₁: Γ ⊢i ψ1^[[evar:E↦p]] <---> ψ1^[[evar:E↦q]] using gpi
Γ ⊢i (ψ1^[[evar:E↦p]] ---> ψ2^[[evar:E↦p]]) <---> (ψ1^[[evar:E↦q]] ---> ψ2^[[evar:E↦q]]) using gpi
Σ: Signature
sz: nat
Γ: Theory
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
E: evar
exdepth, mudepth: nat
gpi: ProofInfo
pf: Γ ⊢i p <---> q using gpi
IHsz: (ψ : Pattern) (wfψ : well_formed ψ), size' ψ ≤ sz → (EvS : EVarSet) (SvS : SVarSet), ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ p q wfψ wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ ⊆ SvS → Γ ⊢i ψ^[[evar:E↦p]] <---> ψ^[[evar:E↦q]] using gpi
ψ1, ψ2: Pattern
wfψ: well_formed (ψ1 ---> ψ2)
Hsz: S (size' ψ1 + size' ψ2) ≤ S sz
EvS: EVarSet
SvS: SVarSet
i':= ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (ψ1 ---> ψ2))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (ψ1 ---> ψ2))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (ψ1 ---> ψ2)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E (ψ1 ---> ψ2) p q wfψ wfp wfq): ProofInfo
pile: ProofInfoLe i' gpi
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
E_in_EvS: E ∈ EvS
ψ_sub_EvS: free_evars (ψ1 ---> ψ2) ⊆ EvS
p_sub_SvS: free_svars p ⊆ SvS
q_sub_SvS: free_svars q ⊆ SvS
ψ_sub_SvS: free_svars (ψ1 ---> ψ2) ⊆ SvS
HEinψ: E ∈ free_evars (ψ1 ---> ψ2)
wfψ1: well_formed ψ1 = true
H: size' ψ1 ≤ sz
wfψ2: well_formed ψ2 = true
H0: size' ψ2 ≤ sz
pf₁: ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ1)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ1)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ1) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ1 p q wfψ1 wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ1 ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ1 ⊆ SvS → Γ ⊢i ψ1^[[evar:E↦p]] <---> ψ1^[[evar:E↦q]] using gpi

E ∈ EvS
exact E_in_EvS.
Σ: Signature
sz: nat
Γ: Theory
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
E: evar
exdepth, mudepth: nat
gpi: ProofInfo
pf: Γ ⊢i p <---> q using gpi
IHsz: (ψ : Pattern) (wfψ : well_formed ψ), size' ψ ≤ sz → (EvS : EVarSet) (SvS : SVarSet), ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ p q wfψ wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ ⊆ SvS → Γ ⊢i ψ^[[evar:E↦p]] <---> ψ^[[evar:E↦q]] using gpi
ψ1, ψ2: Pattern
wfψ: well_formed (ψ1 ---> ψ2)
Hsz: S (size' ψ1 + size' ψ2) ≤ S sz
EvS: EVarSet
SvS: SVarSet
i':= ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (ψ1 ---> ψ2))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (ψ1 ---> ψ2))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (ψ1 ---> ψ2)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E (ψ1 ---> ψ2) p q wfψ wfp wfq): ProofInfo
pile: ProofInfoLe i' gpi
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
E_in_EvS: E ∈ EvS
ψ_sub_EvS: free_evars (ψ1 ---> ψ2) ⊆ EvS
p_sub_SvS: free_svars p ⊆ SvS
q_sub_SvS: free_svars q ⊆ SvS
ψ_sub_SvS: free_svars (ψ1 ---> ψ2) ⊆ SvS
HEinψ: E ∈ free_evars (ψ1 ---> ψ2)
wfψ1: well_formed ψ1 = true
H: size' ψ1 ≤ sz
wfψ2: well_formed ψ2 = true
H0: size' ψ2 ≤ sz
pf₁: ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ1)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ1)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ1) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ1 p q wfψ1 wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ1 ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ1 ⊆ SvS → Γ ⊢i ψ1^[[evar:E↦p]] <---> ψ1^[[evar:E↦q]] using gpi

free_evars ψ1 ⊆ EvS
Σ: Signature
sz: nat
Γ: Theory
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
E: evar
exdepth, mudepth: nat
gpi: ProofInfo
pf: Γ ⊢i p <---> q using gpi
IHsz: (ψ : Pattern) (wfψ : well_formed ψ), size' ψ ≤ sz → (EvS : EVarSet) (SvS : SVarSet), ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ p q wfψ wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ ⊆ SvS → Γ ⊢i ψ^[[evar:E↦p]] <---> ψ^[[evar:E↦q]] using gpi
ψ1, ψ2: Pattern
wfψ: well_formed (ψ1 ---> ψ2)
Hsz: S (size' ψ1 + size' ψ2) ≤ S sz
EvS: EVarSet
SvS: SVarSet
i':= ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (ψ1 ---> ψ2))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (ψ1 ---> ψ2))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (ψ1 ---> ψ2)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E (ψ1 ---> ψ2) p q wfψ wfp wfq): ProofInfo
pile: ProofInfoLe i' gpi
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
E_in_EvS: E ∈ EvS
ψ_sub_EvS: free_evars (ψ1 ---> ψ2) ⊆ EvS
p_sub_SvS: free_svars p ⊆ SvS
q_sub_SvS: free_svars q ⊆ SvS
ψ_sub_SvS: free_svars (ψ1 ---> ψ2) ⊆ SvS
HEinψ: E ∈ free_evars (ψ1 ---> ψ2)
wfψ1: well_formed ψ1 = true
H: size' ψ1 ≤ sz
wfψ2: well_formed ψ2 = true
H0: size' ψ2 ≤ sz
pf₁: ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ1)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ1)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ1) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ1 p q wfψ1 wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ1 ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ1 ⊆ SvS → Γ ⊢i ψ1^[[evar:E↦p]] <---> ψ1^[[evar:E↦q]] using gpi
free_svars p ⊆ SvS
Σ: Signature
sz: nat
Γ: Theory
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
E: evar
exdepth, mudepth: nat
gpi: ProofInfo
pf: Γ ⊢i p <---> q using gpi
IHsz: (ψ : Pattern) (wfψ : well_formed ψ), size' ψ ≤ sz → (EvS : EVarSet) (SvS : SVarSet), ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ p q wfψ wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ ⊆ SvS → Γ ⊢i ψ^[[evar:E↦p]] <---> ψ^[[evar:E↦q]] using gpi
ψ1, ψ2: Pattern
wfψ: well_formed (ψ1 ---> ψ2)
Hsz: S (size' ψ1 + size' ψ2) ≤ S sz
EvS: EVarSet
SvS: SVarSet
i':= ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (ψ1 ---> ψ2))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (ψ1 ---> ψ2))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (ψ1 ---> ψ2)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E (ψ1 ---> ψ2) p q wfψ wfp wfq): ProofInfo
pile: ProofInfoLe i' gpi
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
E_in_EvS: E ∈ EvS
ψ_sub_EvS: free_evars (ψ1 ---> ψ2) ⊆ EvS
p_sub_SvS: free_svars p ⊆ SvS
q_sub_SvS: free_svars q ⊆ SvS
ψ_sub_SvS: free_svars (ψ1 ---> ψ2) ⊆ SvS
HEinψ: E ∈ free_evars (ψ1 ---> ψ2)
wfψ1: well_formed ψ1 = true
H: size' ψ1 ≤ sz
wfψ2: well_formed ψ2 = true
H0: size' ψ2 ≤ sz
pf₁: ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ1)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ1)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ1) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ1 p q wfψ1 wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ1 ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ1 ⊆ SvS → Γ ⊢i ψ1^[[evar:E↦p]] <---> ψ1^[[evar:E↦q]] using gpi
free_svars q ⊆ SvS
Σ: Signature
sz: nat
Γ: Theory
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
E: evar
exdepth, mudepth: nat
gpi: ProofInfo
pf: Γ ⊢i p <---> q using gpi
IHsz: (ψ : Pattern) (wfψ : well_formed ψ), size' ψ ≤ sz → (EvS : EVarSet) (SvS : SVarSet), ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ p q wfψ wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ ⊆ SvS → Γ ⊢i ψ^[[evar:E↦p]] <---> ψ^[[evar:E↦q]] using gpi
ψ1, ψ2: Pattern
wfψ: well_formed (ψ1 ---> ψ2)
Hsz: S (size' ψ1 + size' ψ2) ≤ S sz
EvS: EVarSet
SvS: SVarSet
i':= ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (ψ1 ---> ψ2))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (ψ1 ---> ψ2))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (ψ1 ---> ψ2)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E (ψ1 ---> ψ2) p q wfψ wfp wfq): ProofInfo
pile: ProofInfoLe i' gpi
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
E_in_EvS: E ∈ EvS
ψ_sub_EvS: free_evars (ψ1 ---> ψ2) ⊆ EvS
p_sub_SvS: free_svars p ⊆ SvS
q_sub_SvS: free_svars q ⊆ SvS
ψ_sub_SvS: free_svars (ψ1 ---> ψ2) ⊆ SvS
HEinψ: E ∈ free_evars (ψ1 ---> ψ2)
wfψ1: well_formed ψ1 = true
H: size' ψ1 ≤ sz
wfψ2: well_formed ψ2 = true
H0: size' ψ2 ≤ sz
pf₁: ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ1)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ1)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ1) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ1 p q wfψ1 wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ1 ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ1 ⊆ SvS → Γ ⊢i ψ1^[[evar:E↦p]] <---> ψ1^[[evar:E↦q]] using gpi
free_svars ψ1 ⊆ SvS
Σ: Signature
sz: nat
Γ: Theory
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
E: evar
exdepth, mudepth: nat
gpi: ProofInfo
pf: Γ ⊢i p <---> q using gpi
IHsz: (ψ : Pattern) (wfψ : well_formed ψ), size' ψ ≤ sz → (EvS : EVarSet) (SvS : SVarSet), ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ p q wfψ wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ ⊆ SvS → Γ ⊢i ψ^[[evar:E↦p]] <---> ψ^[[evar:E↦q]] using gpi
ψ1, ψ2: Pattern
wfψ: well_formed (ψ1 ---> ψ2)
Hsz: S (size' ψ1 + size' ψ2) ≤ S sz
EvS: EVarSet
SvS: SVarSet
i':= ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (ψ1 ---> ψ2))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (ψ1 ---> ψ2))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (ψ1 ---> ψ2)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E (ψ1 ---> ψ2) p q wfψ wfp wfq): ProofInfo
pile: ProofInfoLe i' gpi
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
E_in_EvS: E ∈ EvS
ψ_sub_EvS: free_evars (ψ1 ---> ψ2) ⊆ EvS
p_sub_SvS: free_svars p ⊆ SvS
q_sub_SvS: free_svars q ⊆ SvS
ψ_sub_SvS: free_svars (ψ1 ---> ψ2) ⊆ SvS
HEinψ: E ∈ free_evars (ψ1 ---> ψ2)
wfψ1: well_formed ψ1 = true
H: size' ψ1 ≤ sz
wfψ2: well_formed ψ2 = true
H0: size' ψ2 ≤ sz
pf₁: Γ ⊢i ψ1^[[evar:E↦p]] <---> ψ1^[[evar:E↦q]] using gpi
Γ ⊢i (ψ1^[[evar:E↦p]] ---> ψ2^[[evar:E↦p]]) <---> (ψ1^[[evar:E↦q]] ---> ψ2^[[evar:E↦q]]) using gpi
Σ: Signature
sz: nat
Γ: Theory
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
E: evar
exdepth, mudepth: nat
gpi: ProofInfo
pf: Γ ⊢i p <---> q using gpi
IHsz: (ψ : Pattern) (wfψ : well_formed ψ), size' ψ ≤ sz → (EvS : EVarSet) (SvS : SVarSet), ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ p q wfψ wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ ⊆ SvS → Γ ⊢i ψ^[[evar:E↦p]] <---> ψ^[[evar:E↦q]] using gpi
ψ1, ψ2: Pattern
wfψ: well_formed (ψ1 ---> ψ2)
Hsz: S (size' ψ1 + size' ψ2) ≤ S sz
EvS: EVarSet
SvS: SVarSet
i':= ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (ψ1 ---> ψ2))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (ψ1 ---> ψ2))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (ψ1 ---> ψ2)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E (ψ1 ---> ψ2) p q wfψ wfp wfq): ProofInfo
pile: ProofInfoLe i' gpi
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
E_in_EvS: E ∈ EvS
ψ_sub_EvS: free_evars (ψ1 ---> ψ2) ⊆ EvS
p_sub_SvS: free_svars p ⊆ SvS
q_sub_SvS: free_svars q ⊆ SvS
ψ_sub_SvS: free_svars (ψ1 ---> ψ2) ⊆ SvS
HEinψ: E ∈ free_evars (ψ1 ---> ψ2)
wfψ1: well_formed ψ1 = true
H: size' ψ1 ≤ sz
wfψ2: well_formed ψ2 = true
H0: size' ψ2 ≤ sz
pf₁: ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ1)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ1)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ1) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ1 p q wfψ1 wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ1 ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ1 ⊆ SvS → Γ ⊢i ψ1^[[evar:E↦p]] <---> ψ1^[[evar:E↦q]] using gpi

free_evars ψ1 ⊆ EvS
abstract ( simpl in ψ_sub_EvS; clear -ψ_sub_EvS; set_solver ).
Σ: Signature
sz: nat
Γ: Theory
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
E: evar
exdepth, mudepth: nat
gpi: ProofInfo
pf: Γ ⊢i p <---> q using gpi
IHsz: (ψ : Pattern) (wfψ : well_formed ψ), size' ψ ≤ sz → (EvS : EVarSet) (SvS : SVarSet), ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ p q wfψ wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ ⊆ SvS → Γ ⊢i ψ^[[evar:E↦p]] <---> ψ^[[evar:E↦q]] using gpi
ψ1, ψ2: Pattern
wfψ: well_formed (ψ1 ---> ψ2)
Hsz: S (size' ψ1 + size' ψ2) ≤ S sz
EvS: EVarSet
SvS: SVarSet
i':= ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (ψ1 ---> ψ2))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (ψ1 ---> ψ2))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (ψ1 ---> ψ2)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E (ψ1 ---> ψ2) p q wfψ wfp wfq): ProofInfo
pile: ProofInfoLe i' gpi
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
E_in_EvS: E ∈ EvS
ψ_sub_EvS: free_evars (ψ1 ---> ψ2) ⊆ EvS
p_sub_SvS: free_svars p ⊆ SvS
q_sub_SvS: free_svars q ⊆ SvS
ψ_sub_SvS: free_svars (ψ1 ---> ψ2) ⊆ SvS
HEinψ: E ∈ free_evars (ψ1 ---> ψ2)
wfψ1: well_formed ψ1 = true
H: size' ψ1 ≤ sz
wfψ2: well_formed ψ2 = true
H0: size' ψ2 ≤ sz
pf₁: ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ1)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ1)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ1) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ1 p q wfψ1 wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ1 ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ1 ⊆ SvS → Γ ⊢i ψ1^[[evar:E↦p]] <---> ψ1^[[evar:E↦q]] using gpi

free_svars p ⊆ SvS
Σ: Signature
sz: nat
Γ: Theory
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
E: evar
exdepth, mudepth: nat
gpi: ProofInfo
pf: Γ ⊢i p <---> q using gpi
IHsz: (ψ : Pattern) (wfψ : well_formed ψ), size' ψ ≤ sz → (EvS : EVarSet) (SvS : SVarSet), ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ p q wfψ wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ ⊆ SvS → Γ ⊢i ψ^[[evar:E↦p]] <---> ψ^[[evar:E↦q]] using gpi
ψ1, ψ2: Pattern
wfψ: well_formed (ψ1 ---> ψ2)
Hsz: S (size' ψ1 + size' ψ2) ≤ S sz
EvS: EVarSet
SvS: SVarSet
i':= ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (ψ1 ---> ψ2))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (ψ1 ---> ψ2))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (ψ1 ---> ψ2)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E (ψ1 ---> ψ2) p q wfψ wfp wfq): ProofInfo
pile: ProofInfoLe i' gpi
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
E_in_EvS: E ∈ EvS
ψ_sub_EvS: free_evars (ψ1 ---> ψ2) ⊆ EvS
p_sub_SvS: free_svars p ⊆ SvS
q_sub_SvS: free_svars q ⊆ SvS
ψ_sub_SvS: free_svars (ψ1 ---> ψ2) ⊆ SvS
HEinψ: E ∈ free_evars (ψ1 ---> ψ2)
wfψ1: well_formed ψ1 = true
H: size' ψ1 ≤ sz
wfψ2: well_formed ψ2 = true
H0: size' ψ2 ≤ sz
pf₁: ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ1)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ1)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ1) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ1 p q wfψ1 wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ1 ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ1 ⊆ SvS → Γ ⊢i ψ1^[[evar:E↦p]] <---> ψ1^[[evar:E↦q]] using gpi
free_svars q ⊆ SvS
Σ: Signature
sz: nat
Γ: Theory
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
E: evar
exdepth, mudepth: nat
gpi: ProofInfo
pf: Γ ⊢i p <---> q using gpi
IHsz: (ψ : Pattern) (wfψ : well_formed ψ), size' ψ ≤ sz → (EvS : EVarSet) (SvS : SVarSet), ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ p q wfψ wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ ⊆ SvS → Γ ⊢i ψ^[[evar:E↦p]] <---> ψ^[[evar:E↦q]] using gpi
ψ1, ψ2: Pattern
wfψ: well_formed (ψ1 ---> ψ2)
Hsz: S (size' ψ1 + size' ψ2) ≤ S sz
EvS: EVarSet
SvS: SVarSet
i':= ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (ψ1 ---> ψ2))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (ψ1 ---> ψ2))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (ψ1 ---> ψ2)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E (ψ1 ---> ψ2) p q wfψ wfp wfq): ProofInfo
pile: ProofInfoLe i' gpi
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
E_in_EvS: E ∈ EvS
ψ_sub_EvS: free_evars (ψ1 ---> ψ2) ⊆ EvS
p_sub_SvS: free_svars p ⊆ SvS
q_sub_SvS: free_svars q ⊆ SvS
ψ_sub_SvS: free_svars (ψ1 ---> ψ2) ⊆ SvS
HEinψ: E ∈ free_evars (ψ1 ---> ψ2)
wfψ1: well_formed ψ1 = true
H: size' ψ1 ≤ sz
wfψ2: well_formed ψ2 = true
H0: size' ψ2 ≤ sz
pf₁: ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ1)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ1)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ1) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ1 p q wfψ1 wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ1 ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ1 ⊆ SvS → Γ ⊢i ψ1^[[evar:E↦p]] <---> ψ1^[[evar:E↦q]] using gpi
free_svars ψ1 ⊆ SvS
Σ: Signature
sz: nat
Γ: Theory
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
E: evar
exdepth, mudepth: nat
gpi: ProofInfo
pf: Γ ⊢i p <---> q using gpi
IHsz: (ψ : Pattern) (wfψ : well_formed ψ), size' ψ ≤ sz → (EvS : EVarSet) (SvS : SVarSet), ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ p q wfψ wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ ⊆ SvS → Γ ⊢i ψ^[[evar:E↦p]] <---> ψ^[[evar:E↦q]] using gpi
ψ1, ψ2: Pattern
wfψ: well_formed (ψ1 ---> ψ2)
Hsz: S (size' ψ1 + size' ψ2) ≤ S sz
EvS: EVarSet
SvS: SVarSet
i':= ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (ψ1 ---> ψ2))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (ψ1 ---> ψ2))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (ψ1 ---> ψ2)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E (ψ1 ---> ψ2) p q wfψ wfp wfq): ProofInfo
pile: ProofInfoLe i' gpi
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
E_in_EvS: E ∈ EvS
ψ_sub_EvS: free_evars (ψ1 ---> ψ2) ⊆ EvS
p_sub_SvS: free_svars p ⊆ SvS
q_sub_SvS: free_svars q ⊆ SvS
ψ_sub_SvS: free_svars (ψ1 ---> ψ2) ⊆ SvS
HEinψ: E ∈ free_evars (ψ1 ---> ψ2)
wfψ1: well_formed ψ1 = true
H: size' ψ1 ≤ sz
wfψ2: well_formed ψ2 = true
H0: size' ψ2 ≤ sz
pf₁: Γ ⊢i ψ1^[[evar:E↦p]] <---> ψ1^[[evar:E↦q]] using gpi
Γ ⊢i (ψ1^[[evar:E↦p]] ---> ψ2^[[evar:E↦p]]) <---> (ψ1^[[evar:E↦q]] ---> ψ2^[[evar:E↦q]]) using gpi
Σ: Signature
sz: nat
Γ: Theory
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
E: evar
exdepth, mudepth: nat
gpi: ProofInfo
pf: Γ ⊢i p <---> q using gpi
IHsz: (ψ : Pattern) (wfψ : well_formed ψ), size' ψ ≤ sz → (EvS : EVarSet) (SvS : SVarSet), ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ p q wfψ wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ ⊆ SvS → Γ ⊢i ψ^[[evar:E↦p]] <---> ψ^[[evar:E↦q]] using gpi
ψ1, ψ2: Pattern
wfψ: well_formed (ψ1 ---> ψ2)
Hsz: S (size' ψ1 + size' ψ2) ≤ S sz
EvS: EVarSet
SvS: SVarSet
i':= ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (ψ1 ---> ψ2))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (ψ1 ---> ψ2))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (ψ1 ---> ψ2)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E (ψ1 ---> ψ2) p q wfψ wfp wfq): ProofInfo
pile: ProofInfoLe i' gpi
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
E_in_EvS: E ∈ EvS
ψ_sub_EvS: free_evars (ψ1 ---> ψ2) ⊆ EvS
p_sub_SvS: free_svars p ⊆ SvS
q_sub_SvS: free_svars q ⊆ SvS
ψ_sub_SvS: free_svars (ψ1 ---> ψ2) ⊆ SvS
HEinψ: E ∈ free_evars (ψ1 ---> ψ2)
wfψ1: well_formed ψ1 = true
H: size' ψ1 ≤ sz
wfψ2: well_formed ψ2 = true
H0: size' ψ2 ≤ sz
pf₁: ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ1)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ1)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ1) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ1 p q wfψ1 wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ1 ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ1 ⊆ SvS → Γ ⊢i ψ1^[[evar:E↦p]] <---> ψ1^[[evar:E↦q]] using gpi

free_svars p ⊆ SvS
exact p_sub_SvS.
Σ: Signature
sz: nat
Γ: Theory
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
E: evar
exdepth, mudepth: nat
gpi: ProofInfo
pf: Γ ⊢i p <---> q using gpi
IHsz: (ψ : Pattern) (wfψ : well_formed ψ), size' ψ ≤ sz → (EvS : EVarSet) (SvS : SVarSet), ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ p q wfψ wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ ⊆ SvS → Γ ⊢i ψ^[[evar:E↦p]] <---> ψ^[[evar:E↦q]] using gpi
ψ1, ψ2: Pattern
wfψ: well_formed (ψ1 ---> ψ2)
Hsz: S (size' ψ1 + size' ψ2) ≤ S sz
EvS: EVarSet
SvS: SVarSet
i':= ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (ψ1 ---> ψ2))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (ψ1 ---> ψ2))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (ψ1 ---> ψ2)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E (ψ1 ---> ψ2) p q wfψ wfp wfq): ProofInfo
pile: ProofInfoLe i' gpi
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
E_in_EvS: E ∈ EvS
ψ_sub_EvS: free_evars (ψ1 ---> ψ2) ⊆ EvS
p_sub_SvS: free_svars p ⊆ SvS
q_sub_SvS: free_svars q ⊆ SvS
ψ_sub_SvS: free_svars (ψ1 ---> ψ2) ⊆ SvS
HEinψ: E ∈ free_evars (ψ1 ---> ψ2)
wfψ1: well_formed ψ1 = true
H: size' ψ1 ≤ sz
wfψ2: well_formed ψ2 = true
H0: size' ψ2 ≤ sz
pf₁: ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ1)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ1)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ1) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ1 p q wfψ1 wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ1 ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ1 ⊆ SvS → Γ ⊢i ψ1^[[evar:E↦p]] <---> ψ1^[[evar:E↦q]] using gpi

free_svars q ⊆ SvS
Σ: Signature
sz: nat
Γ: Theory
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
E: evar
exdepth, mudepth: nat
gpi: ProofInfo
pf: Γ ⊢i p <---> q using gpi
IHsz: (ψ : Pattern) (wfψ : well_formed ψ), size' ψ ≤ sz → (EvS : EVarSet) (SvS : SVarSet), ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ p q wfψ wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ ⊆ SvS → Γ ⊢i ψ^[[evar:E↦p]] <---> ψ^[[evar:E↦q]] using gpi
ψ1, ψ2: Pattern
wfψ: well_formed (ψ1 ---> ψ2)
Hsz: S (size' ψ1 + size' ψ2) ≤ S sz
EvS: EVarSet
SvS: SVarSet
i':= ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (ψ1 ---> ψ2))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (ψ1 ---> ψ2))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (ψ1 ---> ψ2)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E (ψ1 ---> ψ2) p q wfψ wfp wfq): ProofInfo
pile: ProofInfoLe i' gpi
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
E_in_EvS: E ∈ EvS
ψ_sub_EvS: free_evars (ψ1 ---> ψ2) ⊆ EvS
p_sub_SvS: free_svars p ⊆ SvS
q_sub_SvS: free_svars q ⊆ SvS
ψ_sub_SvS: free_svars (ψ1 ---> ψ2) ⊆ SvS
HEinψ: E ∈ free_evars (ψ1 ---> ψ2)
wfψ1: well_formed ψ1 = true
H: size' ψ1 ≤ sz
wfψ2: well_formed ψ2 = true
H0: size' ψ2 ≤ sz
pf₁: ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ1)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ1)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ1) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ1 p q wfψ1 wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ1 ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ1 ⊆ SvS → Γ ⊢i ψ1^[[evar:E↦p]] <---> ψ1^[[evar:E↦q]] using gpi
free_svars ψ1 ⊆ SvS
Σ: Signature
sz: nat
Γ: Theory
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
E: evar
exdepth, mudepth: nat
gpi: ProofInfo
pf: Γ ⊢i p <---> q using gpi
IHsz: (ψ : Pattern) (wfψ : well_formed ψ), size' ψ ≤ sz → (EvS : EVarSet) (SvS : SVarSet), ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ p q wfψ wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ ⊆ SvS → Γ ⊢i ψ^[[evar:E↦p]] <---> ψ^[[evar:E↦q]] using gpi
ψ1, ψ2: Pattern
wfψ: well_formed (ψ1 ---> ψ2)
Hsz: S (size' ψ1 + size' ψ2) ≤ S sz
EvS: EVarSet
SvS: SVarSet
i':= ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (ψ1 ---> ψ2))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (ψ1 ---> ψ2))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (ψ1 ---> ψ2)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E (ψ1 ---> ψ2) p q wfψ wfp wfq): ProofInfo
pile: ProofInfoLe i' gpi
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
E_in_EvS: E ∈ EvS
ψ_sub_EvS: free_evars (ψ1 ---> ψ2) ⊆ EvS
p_sub_SvS: free_svars p ⊆ SvS
q_sub_SvS: free_svars q ⊆ SvS
ψ_sub_SvS: free_svars (ψ1 ---> ψ2) ⊆ SvS
HEinψ: E ∈ free_evars (ψ1 ---> ψ2)
wfψ1: well_formed ψ1 = true
H: size' ψ1 ≤ sz
wfψ2: well_formed ψ2 = true
H0: size' ψ2 ≤ sz
pf₁: Γ ⊢i ψ1^[[evar:E↦p]] <---> ψ1^[[evar:E↦q]] using gpi
Γ ⊢i (ψ1^[[evar:E↦p]] ---> ψ2^[[evar:E↦p]]) <---> (ψ1^[[evar:E↦q]] ---> ψ2^[[evar:E↦q]]) using gpi
Σ: Signature
sz: nat
Γ: Theory
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
E: evar
exdepth, mudepth: nat
gpi: ProofInfo
pf: Γ ⊢i p <---> q using gpi
IHsz: (ψ : Pattern) (wfψ : well_formed ψ), size' ψ ≤ sz → (EvS : EVarSet) (SvS : SVarSet), ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ p q wfψ wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ ⊆ SvS → Γ ⊢i ψ^[[evar:E↦p]] <---> ψ^[[evar:E↦q]] using gpi
ψ1, ψ2: Pattern
wfψ: well_formed (ψ1 ---> ψ2)
Hsz: S (size' ψ1 + size' ψ2) ≤ S sz
EvS: EVarSet
SvS: SVarSet
i':= ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (ψ1 ---> ψ2))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (ψ1 ---> ψ2))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (ψ1 ---> ψ2)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E (ψ1 ---> ψ2) p q wfψ wfp wfq): ProofInfo
pile: ProofInfoLe i' gpi
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
E_in_EvS: E ∈ EvS
ψ_sub_EvS: free_evars (ψ1 ---> ψ2) ⊆ EvS
p_sub_SvS: free_svars p ⊆ SvS
q_sub_SvS: free_svars q ⊆ SvS
ψ_sub_SvS: free_svars (ψ1 ---> ψ2) ⊆ SvS
HEinψ: E ∈ free_evars (ψ1 ---> ψ2)
wfψ1: well_formed ψ1 = true
H: size' ψ1 ≤ sz
wfψ2: well_formed ψ2 = true
H0: size' ψ2 ≤ sz
pf₁: ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ1)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ1)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ1) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ1 p q wfψ1 wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ1 ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ1 ⊆ SvS → Γ ⊢i ψ1^[[evar:E↦p]] <---> ψ1^[[evar:E↦q]] using gpi

free_svars q ⊆ SvS
exact q_sub_SvS.
Σ: Signature
sz: nat
Γ: Theory
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
E: evar
exdepth, mudepth: nat
gpi: ProofInfo
pf: Γ ⊢i p <---> q using gpi
IHsz: (ψ : Pattern) (wfψ : well_formed ψ), size' ψ ≤ sz → (EvS : EVarSet) (SvS : SVarSet), ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ p q wfψ wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ ⊆ SvS → Γ ⊢i ψ^[[evar:E↦p]] <---> ψ^[[evar:E↦q]] using gpi
ψ1, ψ2: Pattern
wfψ: well_formed (ψ1 ---> ψ2)
Hsz: S (size' ψ1 + size' ψ2) ≤ S sz
EvS: EVarSet
SvS: SVarSet
i':= ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (ψ1 ---> ψ2))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (ψ1 ---> ψ2))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (ψ1 ---> ψ2)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E (ψ1 ---> ψ2) p q wfψ wfp wfq): ProofInfo
pile: ProofInfoLe i' gpi
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
E_in_EvS: E ∈ EvS
ψ_sub_EvS: free_evars (ψ1 ---> ψ2) ⊆ EvS
p_sub_SvS: free_svars p ⊆ SvS
q_sub_SvS: free_svars q ⊆ SvS
ψ_sub_SvS: free_svars (ψ1 ---> ψ2) ⊆ SvS
HEinψ: E ∈ free_evars (ψ1 ---> ψ2)
wfψ1: well_formed ψ1 = true
H: size' ψ1 ≤ sz
wfψ2: well_formed ψ2 = true
H0: size' ψ2 ≤ sz
pf₁: ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ1)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ1)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ1) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ1 p q wfψ1 wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ1 ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ1 ⊆ SvS → Γ ⊢i ψ1^[[evar:E↦p]] <---> ψ1^[[evar:E↦q]] using gpi

free_svars ψ1 ⊆ SvS
Σ: Signature
sz: nat
Γ: Theory
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
E: evar
exdepth, mudepth: nat
gpi: ProofInfo
pf: Γ ⊢i p <---> q using gpi
IHsz: (ψ : Pattern) (wfψ : well_formed ψ), size' ψ ≤ sz → (EvS : EVarSet) (SvS : SVarSet), ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ p q wfψ wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ ⊆ SvS → Γ ⊢i ψ^[[evar:E↦p]] <---> ψ^[[evar:E↦q]] using gpi
ψ1, ψ2: Pattern
wfψ: well_formed (ψ1 ---> ψ2)
Hsz: S (size' ψ1 + size' ψ2) ≤ S sz
EvS: EVarSet
SvS: SVarSet
i':= ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (ψ1 ---> ψ2))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (ψ1 ---> ψ2))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (ψ1 ---> ψ2)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E (ψ1 ---> ψ2) p q wfψ wfp wfq): ProofInfo
pile: ProofInfoLe i' gpi
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
E_in_EvS: E ∈ EvS
ψ_sub_EvS: free_evars (ψ1 ---> ψ2) ⊆ EvS
p_sub_SvS: free_svars p ⊆ SvS
q_sub_SvS: free_svars q ⊆ SvS
ψ_sub_SvS: free_svars (ψ1 ---> ψ2) ⊆ SvS
HEinψ: E ∈ free_evars (ψ1 ---> ψ2)
wfψ1: well_formed ψ1 = true
H: size' ψ1 ≤ sz
wfψ2: well_formed ψ2 = true
H0: size' ψ2 ≤ sz
pf₁: Γ ⊢i ψ1^[[evar:E↦p]] <---> ψ1^[[evar:E↦q]] using gpi
Γ ⊢i (ψ1^[[evar:E↦p]] ---> ψ2^[[evar:E↦p]]) <---> (ψ1^[[evar:E↦q]] ---> ψ2^[[evar:E↦q]]) using gpi
Σ: Signature
sz: nat
Γ: Theory
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
E: evar
exdepth, mudepth: nat
gpi: ProofInfo
pf: Γ ⊢i p <---> q using gpi
IHsz: (ψ : Pattern) (wfψ : well_formed ψ), size' ψ ≤ sz → (EvS : EVarSet) (SvS : SVarSet), ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ p q wfψ wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ ⊆ SvS → Γ ⊢i ψ^[[evar:E↦p]] <---> ψ^[[evar:E↦q]] using gpi
ψ1, ψ2: Pattern
wfψ: well_formed (ψ1 ---> ψ2)
Hsz: S (size' ψ1 + size' ψ2) ≤ S sz
EvS: EVarSet
SvS: SVarSet
i':= ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (ψ1 ---> ψ2))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (ψ1 ---> ψ2))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (ψ1 ---> ψ2)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E (ψ1 ---> ψ2) p q wfψ wfp wfq): ProofInfo
pile: ProofInfoLe i' gpi
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
E_in_EvS: E ∈ EvS
ψ_sub_EvS: free_evars (ψ1 ---> ψ2) ⊆ EvS
p_sub_SvS: free_svars p ⊆ SvS
q_sub_SvS: free_svars q ⊆ SvS
ψ_sub_SvS: free_svars (ψ1 ---> ψ2) ⊆ SvS
HEinψ: E ∈ free_evars (ψ1 ---> ψ2)
wfψ1: well_formed ψ1 = true
H: size' ψ1 ≤ sz
wfψ2: well_formed ψ2 = true
H0: size' ψ2 ≤ sz
pf₁: ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ1)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ1)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ1) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ1 p q wfψ1 wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ1 ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ1 ⊆ SvS → Γ ⊢i ψ1^[[evar:E↦p]] <---> ψ1^[[evar:E↦q]] using gpi

free_svars ψ1 ⊆ SvS
abstract ( simpl in ψ_sub_SvS; clear -ψ_sub_SvS; set_solver ).
Σ: Signature
sz: nat
Γ: Theory
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
E: evar
exdepth, mudepth: nat
gpi: ProofInfo
pf: Γ ⊢i p <---> q using gpi
IHsz: (ψ : Pattern) (wfψ : well_formed ψ), size' ψ ≤ sz → (EvS : EVarSet) (SvS : SVarSet), ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ p q wfψ wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ ⊆ SvS → Γ ⊢i ψ^[[evar:E↦p]] <---> ψ^[[evar:E↦q]] using gpi
ψ1, ψ2: Pattern
wfψ: well_formed (ψ1 ---> ψ2)
Hsz: S (size' ψ1 + size' ψ2) ≤ S sz
EvS: EVarSet
SvS: SVarSet
i':= ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (ψ1 ---> ψ2))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (ψ1 ---> ψ2))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (ψ1 ---> ψ2)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E (ψ1 ---> ψ2) p q wfψ wfp wfq): ProofInfo
pile: ProofInfoLe i' gpi
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
E_in_EvS: E ∈ EvS
ψ_sub_EvS: free_evars (ψ1 ---> ψ2) ⊆ EvS
p_sub_SvS: free_svars p ⊆ SvS
q_sub_SvS: free_svars q ⊆ SvS
ψ_sub_SvS: free_svars (ψ1 ---> ψ2) ⊆ SvS
HEinψ: E ∈ free_evars (ψ1 ---> ψ2)
wfψ1: well_formed ψ1 = true
H: size' ψ1 ≤ sz
wfψ2: well_formed ψ2 = true
H0: size' ψ2 ≤ sz
pf₁: Γ ⊢i ψ1^[[evar:E↦p]] <---> ψ1^[[evar:E↦q]] using gpi

Γ ⊢i (ψ1^[[evar:E↦p]] ---> ψ2^[[evar:E↦p]]) <---> (ψ1^[[evar:E↦q]] ---> ψ2^[[evar:E↦q]]) using gpi
Σ: Signature
sz: nat
Γ: Theory
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
E: evar
exdepth, mudepth: nat
gpi: ProofInfo
pf: Γ ⊢i p <---> q using gpi
IHsz: (ψ : Pattern) (wfψ : well_formed ψ), size' ψ ≤ sz → (EvS : EVarSet) (SvS : SVarSet), ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ p q wfψ wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ ⊆ SvS → Γ ⊢i ψ^[[evar:E↦p]] <---> ψ^[[evar:E↦q]] using gpi
ψ1, ψ2: Pattern
wfψ: well_formed (ψ1 ---> ψ2)
Hsz: S (size' ψ1 + size' ψ2) ≤ S sz
EvS: EVarSet
SvS: SVarSet
i':= ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (ψ1 ---> ψ2))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (ψ1 ---> ψ2))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (ψ1 ---> ψ2)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E (ψ1 ---> ψ2) p q wfψ wfp wfq): ProofInfo
pile: ProofInfoLe i' gpi
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
E_in_EvS: E ∈ EvS
ψ_sub_EvS: free_evars (ψ1 ---> ψ2) ⊆ EvS
p_sub_SvS: free_svars p ⊆ SvS
q_sub_SvS: free_svars q ⊆ SvS
ψ_sub_SvS: free_svars (ψ1 ---> ψ2) ⊆ SvS
HEinψ: E ∈ free_evars (ψ1 ---> ψ2)
wfψ1: well_formed ψ1 = true
H: size' ψ1 ≤ sz
wfψ2: well_formed ψ2 = true
H0: size' ψ2 ≤ sz
pf₁: Γ ⊢i ψ1^[[evar:E↦p]] <---> ψ1^[[evar:E↦q]] using gpi
pf₂: (EvS : EVarSet) (SvS : SVarSet), ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ2)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ2)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ2) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ2 p q wfψ2 wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ2 ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ2 ⊆ SvS → Γ ⊢i ψ2^[[evar:E↦p]] <---> ψ2^[[evar:E↦q]] using gpi

Γ ⊢i (ψ1^[[evar:E↦p]] ---> ψ2^[[evar:E↦p]]) <---> (ψ1^[[evar:E↦q]] ---> ψ2^[[evar:E↦q]]) using gpi
Σ: Signature
sz: nat
Γ: Theory
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
E: evar
exdepth, mudepth: nat
gpi: ProofInfo
pf: Γ ⊢i p <---> q using gpi
IHsz: (ψ : Pattern) (wfψ : well_formed ψ), size' ψ ≤ sz → (EvS : EVarSet) (SvS : SVarSet), ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ p q wfψ wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ ⊆ SvS → Γ ⊢i ψ^[[evar:E↦p]] <---> ψ^[[evar:E↦q]] using gpi
ψ1, ψ2: Pattern
wfψ: well_formed (ψ1 ---> ψ2)
Hsz: S (size' ψ1 + size' ψ2) ≤ S sz
EvS: EVarSet
SvS: SVarSet
i':= ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (ψ1 ---> ψ2))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (ψ1 ---> ψ2))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (ψ1 ---> ψ2)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E (ψ1 ---> ψ2) p q wfψ wfp wfq): ProofInfo
pile: ProofInfoLe i' gpi
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
E_in_EvS: E ∈ EvS
ψ_sub_EvS: free_evars (ψ1 ---> ψ2) ⊆ EvS
p_sub_SvS: free_svars p ⊆ SvS
q_sub_SvS: free_svars q ⊆ SvS
ψ_sub_SvS: free_svars (ψ1 ---> ψ2) ⊆ SvS
HEinψ: E ∈ free_evars (ψ1 ---> ψ2)
wfψ1: well_formed ψ1 = true
H: size' ψ1 ≤ sz
wfψ2: well_formed ψ2 = true
H0: size' ψ2 ≤ sz
pf₁: Γ ⊢i ψ1^[[evar:E↦p]] <---> ψ1^[[evar:E↦q]] using gpi
pf₂: ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ2)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ2)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ2) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ2 p q wfψ2 wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ2 ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ2 ⊆ SvS → Γ ⊢i ψ2^[[evar:E↦p]] <---> ψ2^[[evar:E↦q]] using gpi

Γ ⊢i (ψ1^[[evar:E↦p]] ---> ψ2^[[evar:E↦p]]) <---> (ψ1^[[evar:E↦q]] ---> ψ2^[[evar:E↦q]]) using gpi
Σ: Signature
sz: nat
Γ: Theory
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
E: evar
exdepth, mudepth: nat
gpi: ProofInfo
pf: Γ ⊢i p <---> q using gpi
IHsz: (ψ : Pattern) (wfψ : well_formed ψ), size' ψ ≤ sz → (EvS : EVarSet) (SvS : SVarSet), ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ p q wfψ wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ ⊆ SvS → Γ ⊢i ψ^[[evar:E↦p]] <---> ψ^[[evar:E↦q]] using gpi
ψ1, ψ2: Pattern
wfψ: well_formed (ψ1 ---> ψ2)
Hsz: S (size' ψ1 + size' ψ2) ≤ S sz
EvS: EVarSet
SvS: SVarSet
i':= ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (ψ1 ---> ψ2))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (ψ1 ---> ψ2))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (ψ1 ---> ψ2)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E (ψ1 ---> ψ2) p q wfψ wfp wfq): ProofInfo
pile: ProofInfoLe i' gpi
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
E_in_EvS: E ∈ EvS
ψ_sub_EvS: free_evars (ψ1 ---> ψ2) ⊆ EvS
p_sub_SvS: free_svars p ⊆ SvS
q_sub_SvS: free_svars q ⊆ SvS
ψ_sub_SvS: free_svars (ψ1 ---> ψ2) ⊆ SvS
HEinψ: E ∈ free_evars (ψ1 ---> ψ2)
wfψ1: well_formed ψ1 = true
H: size' ψ1 ≤ sz
wfψ2: well_formed ψ2 = true
H0: size' ψ2 ≤ sz
pf₁: Γ ⊢i ψ1^[[evar:E↦p]] <---> ψ1^[[evar:E↦q]] using gpi
pf₂: ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ2)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ2)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ2) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ2 p q wfψ2 wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ2 ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ2 ⊆ SvS → Γ ⊢i ψ2^[[evar:E↦p]] <---> ψ2^[[evar:E↦q]] using gpi

ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ2)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ2)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ2) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ2 p q wfψ2 wfp wfq)) gpi
Σ: Signature
sz: nat
Γ: Theory
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
E: evar
exdepth, mudepth: nat
gpi: ProofInfo
pf: Γ ⊢i p <---> q using gpi
IHsz: (ψ : Pattern) (wfψ : well_formed ψ), size' ψ ≤ sz → (EvS : EVarSet) (SvS : SVarSet), ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ p q wfψ wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ ⊆ SvS → Γ ⊢i ψ^[[evar:E↦p]] <---> ψ^[[evar:E↦q]] using gpi
ψ1, ψ2: Pattern
wfψ: well_formed (ψ1 ---> ψ2)
Hsz: S (size' ψ1 + size' ψ2) ≤ S sz
EvS: EVarSet
SvS: SVarSet
i':= ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (ψ1 ---> ψ2))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (ψ1 ---> ψ2))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (ψ1 ---> ψ2)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E (ψ1 ---> ψ2) p q wfψ wfp wfq): ProofInfo
pile: ProofInfoLe i' gpi
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
E_in_EvS: E ∈ EvS
ψ_sub_EvS: free_evars (ψ1 ---> ψ2) ⊆ EvS
p_sub_SvS: free_svars p ⊆ SvS
q_sub_SvS: free_svars q ⊆ SvS
ψ_sub_SvS: free_svars (ψ1 ---> ψ2) ⊆ SvS
HEinψ: E ∈ free_evars (ψ1 ---> ψ2)
wfψ1: well_formed ψ1 = true
H: size' ψ1 ≤ sz
wfψ2: well_formed ψ2 = true
H0: size' ψ2 ≤ sz
pf₁: Γ ⊢i ψ1^[[evar:E↦p]] <---> ψ1^[[evar:E↦q]] using gpi
pf₂: ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ2)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ2)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ2) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ2 p q wfψ2 wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ2 ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ2 ⊆ SvS → Γ ⊢i ψ2^[[evar:E↦p]] <---> ψ2^[[evar:E↦q]] using gpi
free_evars p ⊆ EvS
Σ: Signature
sz: nat
Γ: Theory
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
E: evar
exdepth, mudepth: nat
gpi: ProofInfo
pf: Γ ⊢i p <---> q using gpi
IHsz: (ψ : Pattern) (wfψ : well_formed ψ), size' ψ ≤ sz → (EvS : EVarSet) (SvS : SVarSet), ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ p q wfψ wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ ⊆ SvS → Γ ⊢i ψ^[[evar:E↦p]] <---> ψ^[[evar:E↦q]] using gpi
ψ1, ψ2: Pattern
wfψ: well_formed (ψ1 ---> ψ2)
Hsz: S (size' ψ1 + size' ψ2) ≤ S sz
EvS: EVarSet
SvS: SVarSet
i':= ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (ψ1 ---> ψ2))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (ψ1 ---> ψ2))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (ψ1 ---> ψ2)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E (ψ1 ---> ψ2) p q wfψ wfp wfq): ProofInfo
pile: ProofInfoLe i' gpi
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
E_in_EvS: E ∈ EvS
ψ_sub_EvS: free_evars (ψ1 ---> ψ2) ⊆ EvS
p_sub_SvS: free_svars p ⊆ SvS
q_sub_SvS: free_svars q ⊆ SvS
ψ_sub_SvS: free_svars (ψ1 ---> ψ2) ⊆ SvS
HEinψ: E ∈ free_evars (ψ1 ---> ψ2)
wfψ1: well_formed ψ1 = true
H: size' ψ1 ≤ sz
wfψ2: well_formed ψ2 = true
H0: size' ψ2 ≤ sz
pf₁: Γ ⊢i ψ1^[[evar:E↦p]] <---> ψ1^[[evar:E↦q]] using gpi
pf₂: ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ2)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ2)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ2) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ2 p q wfψ2 wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ2 ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ2 ⊆ SvS → Γ ⊢i ψ2^[[evar:E↦p]] <---> ψ2^[[evar:E↦q]] using gpi
free_evars q ⊆ EvS
Σ: Signature
sz: nat
Γ: Theory
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
E: evar
exdepth, mudepth: nat
gpi: ProofInfo
pf: Γ ⊢i p <---> q using gpi
IHsz: (ψ : Pattern) (wfψ : well_formed ψ), size' ψ ≤ sz → (EvS : EVarSet) (SvS : SVarSet), ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ p q wfψ wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ ⊆ SvS → Γ ⊢i ψ^[[evar:E↦p]] <---> ψ^[[evar:E↦q]] using gpi
ψ1, ψ2: Pattern
wfψ: well_formed (ψ1 ---> ψ2)
Hsz: S (size' ψ1 + size' ψ2) ≤ S sz
EvS: EVarSet
SvS: SVarSet
i':= ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (ψ1 ---> ψ2))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (ψ1 ---> ψ2))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (ψ1 ---> ψ2)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E (ψ1 ---> ψ2) p q wfψ wfp wfq): ProofInfo
pile: ProofInfoLe i' gpi
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
E_in_EvS: E ∈ EvS
ψ_sub_EvS: free_evars (ψ1 ---> ψ2) ⊆ EvS
p_sub_SvS: free_svars p ⊆ SvS
q_sub_SvS: free_svars q ⊆ SvS
ψ_sub_SvS: free_svars (ψ1 ---> ψ2) ⊆ SvS
HEinψ: E ∈ free_evars (ψ1 ---> ψ2)
wfψ1: well_formed ψ1 = true
H: size' ψ1 ≤ sz
wfψ2: well_formed ψ2 = true
H0: size' ψ2 ≤ sz
pf₁: Γ ⊢i ψ1^[[evar:E↦p]] <---> ψ1^[[evar:E↦q]] using gpi
pf₂: ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ2)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ2)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ2) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ2 p q wfψ2 wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ2 ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ2 ⊆ SvS → Γ ⊢i ψ2^[[evar:E↦p]] <---> ψ2^[[evar:E↦q]] using gpi
E ∈ EvS
Σ: Signature
sz: nat
Γ: Theory
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
E: evar
exdepth, mudepth: nat
gpi: ProofInfo
pf: Γ ⊢i p <---> q using gpi
IHsz: (ψ : Pattern) (wfψ : well_formed ψ), size' ψ ≤ sz → (EvS : EVarSet) (SvS : SVarSet), ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ p q wfψ wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ ⊆ SvS → Γ ⊢i ψ^[[evar:E↦p]] <---> ψ^[[evar:E↦q]] using gpi
ψ1, ψ2: Pattern
wfψ: well_formed (ψ1 ---> ψ2)
Hsz: S (size' ψ1 + size' ψ2) ≤ S sz
EvS: EVarSet
SvS: SVarSet
i':= ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (ψ1 ---> ψ2))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (ψ1 ---> ψ2))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (ψ1 ---> ψ2)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E (ψ1 ---> ψ2) p q wfψ wfp wfq): ProofInfo
pile: ProofInfoLe i' gpi
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
E_in_EvS: E ∈ EvS
ψ_sub_EvS: free_evars (ψ1 ---> ψ2) ⊆ EvS
p_sub_SvS: free_svars p ⊆ SvS
q_sub_SvS: free_svars q ⊆ SvS
ψ_sub_SvS: free_svars (ψ1 ---> ψ2) ⊆ SvS
HEinψ: E ∈ free_evars (ψ1 ---> ψ2)
wfψ1: well_formed ψ1 = true
H: size' ψ1 ≤ sz
wfψ2: well_formed ψ2 = true
H0: size' ψ2 ≤ sz
pf₁: Γ ⊢i ψ1^[[evar:E↦p]] <---> ψ1^[[evar:E↦q]] using gpi
pf₂: ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ2)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ2)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ2) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ2 p q wfψ2 wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ2 ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ2 ⊆ SvS → Γ ⊢i ψ2^[[evar:E↦p]] <---> ψ2^[[evar:E↦q]] using gpi
free_evars ψ2 ⊆ EvS
Σ: Signature
sz: nat
Γ: Theory
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
E: evar
exdepth, mudepth: nat
gpi: ProofInfo
pf: Γ ⊢i p <---> q using gpi
IHsz: (ψ : Pattern) (wfψ : well_formed ψ), size' ψ ≤ sz → (EvS : EVarSet) (SvS : SVarSet), ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ p q wfψ wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ ⊆ SvS → Γ ⊢i ψ^[[evar:E↦p]] <---> ψ^[[evar:E↦q]] using gpi
ψ1, ψ2: Pattern
wfψ: well_formed (ψ1 ---> ψ2)
Hsz: S (size' ψ1 + size' ψ2) ≤ S sz
EvS: EVarSet
SvS: SVarSet
i':= ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (ψ1 ---> ψ2))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (ψ1 ---> ψ2))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (ψ1 ---> ψ2)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E (ψ1 ---> ψ2) p q wfψ wfp wfq): ProofInfo
pile: ProofInfoLe i' gpi
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
E_in_EvS: E ∈ EvS
ψ_sub_EvS: free_evars (ψ1 ---> ψ2) ⊆ EvS
p_sub_SvS: free_svars p ⊆ SvS
q_sub_SvS: free_svars q ⊆ SvS
ψ_sub_SvS: free_svars (ψ1 ---> ψ2) ⊆ SvS
HEinψ: E ∈ free_evars (ψ1 ---> ψ2)
wfψ1: well_formed ψ1 = true
H: size' ψ1 ≤ sz
wfψ2: well_formed ψ2 = true
H0: size' ψ2 ≤ sz
pf₁: Γ ⊢i ψ1^[[evar:E↦p]] <---> ψ1^[[evar:E↦q]] using gpi
pf₂: ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ2)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ2)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ2) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ2 p q wfψ2 wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ2 ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ2 ⊆ SvS → Γ ⊢i ψ2^[[evar:E↦p]] <---> ψ2^[[evar:E↦q]] using gpi
free_svars p ⊆ SvS
Σ: Signature
sz: nat
Γ: Theory
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
E: evar
exdepth, mudepth: nat
gpi: ProofInfo
pf: Γ ⊢i p <---> q using gpi
IHsz: (ψ : Pattern) (wfψ : well_formed ψ), size' ψ ≤ sz → (EvS : EVarSet) (SvS : SVarSet), ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ p q wfψ wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ ⊆ SvS → Γ ⊢i ψ^[[evar:E↦p]] <---> ψ^[[evar:E↦q]] using gpi
ψ1, ψ2: Pattern
wfψ: well_formed (ψ1 ---> ψ2)
Hsz: S (size' ψ1 + size' ψ2) ≤ S sz
EvS: EVarSet
SvS: SVarSet
i':= ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (ψ1 ---> ψ2))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (ψ1 ---> ψ2))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (ψ1 ---> ψ2)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E (ψ1 ---> ψ2) p q wfψ wfp wfq): ProofInfo
pile: ProofInfoLe i' gpi
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
E_in_EvS: E ∈ EvS
ψ_sub_EvS: free_evars (ψ1 ---> ψ2) ⊆ EvS
p_sub_SvS: free_svars p ⊆ SvS
q_sub_SvS: free_svars q ⊆ SvS
ψ_sub_SvS: free_svars (ψ1 ---> ψ2) ⊆ SvS
HEinψ: E ∈ free_evars (ψ1 ---> ψ2)
wfψ1: well_formed ψ1 = true
H: size' ψ1 ≤ sz
wfψ2: well_formed ψ2 = true
H0: size' ψ2 ≤ sz
pf₁: Γ ⊢i ψ1^[[evar:E↦p]] <---> ψ1^[[evar:E↦q]] using gpi
pf₂: ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ2)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ2)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ2) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ2 p q wfψ2 wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ2 ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ2 ⊆ SvS → Γ ⊢i ψ2^[[evar:E↦p]] <---> ψ2^[[evar:E↦q]] using gpi
free_svars q ⊆ SvS
Σ: Signature
sz: nat
Γ: Theory
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
E: evar
exdepth, mudepth: nat
gpi: ProofInfo
pf: Γ ⊢i p <---> q using gpi
IHsz: (ψ : Pattern) (wfψ : well_formed ψ), size' ψ ≤ sz → (EvS : EVarSet) (SvS : SVarSet), ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ p q wfψ wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ ⊆ SvS → Γ ⊢i ψ^[[evar:E↦p]] <---> ψ^[[evar:E↦q]] using gpi
ψ1, ψ2: Pattern
wfψ: well_formed (ψ1 ---> ψ2)
Hsz: S (size' ψ1 + size' ψ2) ≤ S sz
EvS: EVarSet
SvS: SVarSet
i':= ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (ψ1 ---> ψ2))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (ψ1 ---> ψ2))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (ψ1 ---> ψ2)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E (ψ1 ---> ψ2) p q wfψ wfp wfq): ProofInfo
pile: ProofInfoLe i' gpi
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
E_in_EvS: E ∈ EvS
ψ_sub_EvS: free_evars (ψ1 ---> ψ2) ⊆ EvS
p_sub_SvS: free_svars p ⊆ SvS
q_sub_SvS: free_svars q ⊆ SvS
ψ_sub_SvS: free_svars (ψ1 ---> ψ2) ⊆ SvS
HEinψ: E ∈ free_evars (ψ1 ---> ψ2)
wfψ1: well_formed ψ1 = true
H: size' ψ1 ≤ sz
wfψ2: well_formed ψ2 = true
H0: size' ψ2 ≤ sz
pf₁: Γ ⊢i ψ1^[[evar:E↦p]] <---> ψ1^[[evar:E↦q]] using gpi
pf₂: ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ2)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ2)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ2) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ2 p q wfψ2 wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ2 ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ2 ⊆ SvS → Γ ⊢i ψ2^[[evar:E↦p]] <---> ψ2^[[evar:E↦q]] using gpi
free_svars ψ2 ⊆ SvS
Σ: Signature
sz: nat
Γ: Theory
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
E: evar
exdepth, mudepth: nat
gpi: ProofInfo
pf: Γ ⊢i p <---> q using gpi
IHsz: (ψ : Pattern) (wfψ : well_formed ψ), size' ψ ≤ sz → (EvS : EVarSet) (SvS : SVarSet), ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ p q wfψ wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ ⊆ SvS → Γ ⊢i ψ^[[evar:E↦p]] <---> ψ^[[evar:E↦q]] using gpi
ψ1, ψ2: Pattern
wfψ: well_formed (ψ1 ---> ψ2)
Hsz: S (size' ψ1 + size' ψ2) ≤ S sz
EvS: EVarSet
SvS: SVarSet
i':= ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (ψ1 ---> ψ2))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (ψ1 ---> ψ2))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (ψ1 ---> ψ2)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E (ψ1 ---> ψ2) p q wfψ wfp wfq): ProofInfo
pile: ProofInfoLe i' gpi
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
E_in_EvS: E ∈ EvS
ψ_sub_EvS: free_evars (ψ1 ---> ψ2) ⊆ EvS
p_sub_SvS: free_svars p ⊆ SvS
q_sub_SvS: free_svars q ⊆ SvS
ψ_sub_SvS: free_svars (ψ1 ---> ψ2) ⊆ SvS
HEinψ: E ∈ free_evars (ψ1 ---> ψ2)
wfψ1: well_formed ψ1 = true
H: size' ψ1 ≤ sz
wfψ2: well_formed ψ2 = true
H0: size' ψ2 ≤ sz
pf₁: Γ ⊢i ψ1^[[evar:E↦p]] <---> ψ1^[[evar:E↦q]] using gpi
pf₂: Γ ⊢i ψ2^[[evar:E↦p]] <---> ψ2^[[evar:E↦q]] using gpi
Γ ⊢i (ψ1^[[evar:E↦p]] ---> ψ2^[[evar:E↦p]]) <---> (ψ1^[[evar:E↦q]] ---> ψ2^[[evar:E↦q]]) using gpi
Σ: Signature
sz: nat
Γ: Theory
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
E: evar
exdepth, mudepth: nat
gpi: ProofInfo
pf: Γ ⊢i p <---> q using gpi
IHsz: (ψ : Pattern) (wfψ : well_formed ψ), size' ψ ≤ sz → (EvS : EVarSet) (SvS : SVarSet), ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ p q wfψ wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ ⊆ SvS → Γ ⊢i ψ^[[evar:E↦p]] <---> ψ^[[evar:E↦q]] using gpi
ψ1, ψ2: Pattern
wfψ: well_formed (ψ1 ---> ψ2)
Hsz: S (size' ψ1 + size' ψ2) ≤ S sz
EvS: EVarSet
SvS: SVarSet
i':= ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (ψ1 ---> ψ2))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (ψ1 ---> ψ2))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (ψ1 ---> ψ2)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E (ψ1 ---> ψ2) p q wfψ wfp wfq): ProofInfo
pile: ProofInfoLe i' gpi
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
E_in_EvS: E ∈ EvS
ψ_sub_EvS: free_evars (ψ1 ---> ψ2) ⊆ EvS
p_sub_SvS: free_svars p ⊆ SvS
q_sub_SvS: free_svars q ⊆ SvS
ψ_sub_SvS: free_svars (ψ1 ---> ψ2) ⊆ SvS
HEinψ: E ∈ free_evars (ψ1 ---> ψ2)
wfψ1: well_formed ψ1 = true
H: size' ψ1 ≤ sz
wfψ2: well_formed ψ2 = true
H0: size' ψ2 ≤ sz
pf₁: Γ ⊢i ψ1^[[evar:E↦p]] <---> ψ1^[[evar:E↦q]] using gpi
pf₂: ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ2)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ2)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ2) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ2 p q wfψ2 wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ2 ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ2 ⊆ SvS → Γ ⊢i ψ2^[[evar:E↦p]] <---> ψ2^[[evar:E↦q]] using gpi

ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ2)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ2)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ2) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ2 p q wfψ2 wfp wfq)) gpi
abstract ( subst i'; eapply pile_trans; [|apply pile]; apply pile_evs_svs_kt; [(simpl; rewrite Nat.max_comm; clear; pose proof evar_fresh_seq_max; set_solver) |(simpl; rewrite Nat.max_comm; clear; pose proof svar_fresh_seq_max; set_solver) |(clear pf₂; repeat case_match; simpl in *; try reflexivity; lia) |(apply frames_on_the_way_to_hole'_imp_2) ] ).
Σ: Signature
sz: nat
Γ: Theory
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
E: evar
exdepth, mudepth: nat
gpi: ProofInfo
pf: Γ ⊢i p <---> q using gpi
IHsz: (ψ : Pattern) (wfψ : well_formed ψ), size' ψ ≤ sz → (EvS : EVarSet) (SvS : SVarSet), ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ p q wfψ wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ ⊆ SvS → Γ ⊢i ψ^[[evar:E↦p]] <---> ψ^[[evar:E↦q]] using gpi
ψ1, ψ2: Pattern
wfψ: well_formed (ψ1 ---> ψ2)
Hsz: S (size' ψ1 + size' ψ2) ≤ S sz
EvS: EVarSet
SvS: SVarSet
i':= ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (ψ1 ---> ψ2))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (ψ1 ---> ψ2))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (ψ1 ---> ψ2)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E (ψ1 ---> ψ2) p q wfψ wfp wfq): ProofInfo
pile: ProofInfoLe i' gpi
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
E_in_EvS: E ∈ EvS
ψ_sub_EvS: free_evars (ψ1 ---> ψ2) ⊆ EvS
p_sub_SvS: free_svars p ⊆ SvS
q_sub_SvS: free_svars q ⊆ SvS
ψ_sub_SvS: free_svars (ψ1 ---> ψ2) ⊆ SvS
HEinψ: E ∈ free_evars (ψ1 ---> ψ2)
wfψ1: well_formed ψ1 = true
H: size' ψ1 ≤ sz
wfψ2: well_formed ψ2 = true
H0: size' ψ2 ≤ sz
pf₁: Γ ⊢i ψ1^[[evar:E↦p]] <---> ψ1^[[evar:E↦q]] using gpi
pf₂: ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ2)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ2)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ2) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ2 p q wfψ2 wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ2 ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ2 ⊆ SvS → Γ ⊢i ψ2^[[evar:E↦p]] <---> ψ2^[[evar:E↦q]] using gpi

free_evars p ⊆ EvS
Σ: Signature
sz: nat
Γ: Theory
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
E: evar
exdepth, mudepth: nat
gpi: ProofInfo
pf: Γ ⊢i p <---> q using gpi
IHsz: (ψ : Pattern) (wfψ : well_formed ψ), size' ψ ≤ sz → (EvS : EVarSet) (SvS : SVarSet), ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ p q wfψ wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ ⊆ SvS → Γ ⊢i ψ^[[evar:E↦p]] <---> ψ^[[evar:E↦q]] using gpi
ψ1, ψ2: Pattern
wfψ: well_formed (ψ1 ---> ψ2)
Hsz: S (size' ψ1 + size' ψ2) ≤ S sz
EvS: EVarSet
SvS: SVarSet
i':= ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (ψ1 ---> ψ2))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (ψ1 ---> ψ2))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (ψ1 ---> ψ2)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E (ψ1 ---> ψ2) p q wfψ wfp wfq): ProofInfo
pile: ProofInfoLe i' gpi
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
E_in_EvS: E ∈ EvS
ψ_sub_EvS: free_evars (ψ1 ---> ψ2) ⊆ EvS
p_sub_SvS: free_svars p ⊆ SvS
q_sub_SvS: free_svars q ⊆ SvS
ψ_sub_SvS: free_svars (ψ1 ---> ψ2) ⊆ SvS
HEinψ: E ∈ free_evars (ψ1 ---> ψ2)
wfψ1: well_formed ψ1 = true
H: size' ψ1 ≤ sz
wfψ2: well_formed ψ2 = true
H0: size' ψ2 ≤ sz
pf₁: Γ ⊢i ψ1^[[evar:E↦p]] <---> ψ1^[[evar:E↦q]] using gpi
pf₂: ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ2)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ2)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ2) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ2 p q wfψ2 wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ2 ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ2 ⊆ SvS → Γ ⊢i ψ2^[[evar:E↦p]] <---> ψ2^[[evar:E↦q]] using gpi
free_evars q ⊆ EvS
Σ: Signature
sz: nat
Γ: Theory
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
E: evar
exdepth, mudepth: nat
gpi: ProofInfo
pf: Γ ⊢i p <---> q using gpi
IHsz: (ψ : Pattern) (wfψ : well_formed ψ), size' ψ ≤ sz → (EvS : EVarSet) (SvS : SVarSet), ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ p q wfψ wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ ⊆ SvS → Γ ⊢i ψ^[[evar:E↦p]] <---> ψ^[[evar:E↦q]] using gpi
ψ1, ψ2: Pattern
wfψ: well_formed (ψ1 ---> ψ2)
Hsz: S (size' ψ1 + size' ψ2) ≤ S sz
EvS: EVarSet
SvS: SVarSet
i':= ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (ψ1 ---> ψ2))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (ψ1 ---> ψ2))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (ψ1 ---> ψ2)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E (ψ1 ---> ψ2) p q wfψ wfp wfq): ProofInfo
pile: ProofInfoLe i' gpi
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
E_in_EvS: E ∈ EvS
ψ_sub_EvS: free_evars (ψ1 ---> ψ2) ⊆ EvS
p_sub_SvS: free_svars p ⊆ SvS
q_sub_SvS: free_svars q ⊆ SvS
ψ_sub_SvS: free_svars (ψ1 ---> ψ2) ⊆ SvS
HEinψ: E ∈ free_evars (ψ1 ---> ψ2)
wfψ1: well_formed ψ1 = true
H: size' ψ1 ≤ sz
wfψ2: well_formed ψ2 = true
H0: size' ψ2 ≤ sz
pf₁: Γ ⊢i ψ1^[[evar:E↦p]] <---> ψ1^[[evar:E↦q]] using gpi
pf₂: ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ2)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ2)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ2) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ2 p q wfψ2 wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ2 ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ2 ⊆ SvS → Γ ⊢i ψ2^[[evar:E↦p]] <---> ψ2^[[evar:E↦q]] using gpi
E ∈ EvS
Σ: Signature
sz: nat
Γ: Theory
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
E: evar
exdepth, mudepth: nat
gpi: ProofInfo
pf: Γ ⊢i p <---> q using gpi
IHsz: (ψ : Pattern) (wfψ : well_formed ψ), size' ψ ≤ sz → (EvS : EVarSet) (SvS : SVarSet), ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ p q wfψ wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ ⊆ SvS → Γ ⊢i ψ^[[evar:E↦p]] <---> ψ^[[evar:E↦q]] using gpi
ψ1, ψ2: Pattern
wfψ: well_formed (ψ1 ---> ψ2)
Hsz: S (size' ψ1 + size' ψ2) ≤ S sz
EvS: EVarSet
SvS: SVarSet
i':= ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (ψ1 ---> ψ2))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (ψ1 ---> ψ2))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (ψ1 ---> ψ2)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E (ψ1 ---> ψ2) p q wfψ wfp wfq): ProofInfo
pile: ProofInfoLe i' gpi
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
E_in_EvS: E ∈ EvS
ψ_sub_EvS: free_evars (ψ1 ---> ψ2) ⊆ EvS
p_sub_SvS: free_svars p ⊆ SvS
q_sub_SvS: free_svars q ⊆ SvS
ψ_sub_SvS: free_svars (ψ1 ---> ψ2) ⊆ SvS
HEinψ: E ∈ free_evars (ψ1 ---> ψ2)
wfψ1: well_formed ψ1 = true
H: size' ψ1 ≤ sz
wfψ2: well_formed ψ2 = true
H0: size' ψ2 ≤ sz
pf₁: Γ ⊢i ψ1^[[evar:E↦p]] <---> ψ1^[[evar:E↦q]] using gpi
pf₂: ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ2)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ2)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ2) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ2 p q wfψ2 wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ2 ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ2 ⊆ SvS → Γ ⊢i ψ2^[[evar:E↦p]] <---> ψ2^[[evar:E↦q]] using gpi
free_evars ψ2 ⊆ EvS
Σ: Signature
sz: nat
Γ: Theory
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
E: evar
exdepth, mudepth: nat
gpi: ProofInfo
pf: Γ ⊢i p <---> q using gpi
IHsz: (ψ : Pattern) (wfψ : well_formed ψ), size' ψ ≤ sz → (EvS : EVarSet) (SvS : SVarSet), ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ p q wfψ wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ ⊆ SvS → Γ ⊢i ψ^[[evar:E↦p]] <---> ψ^[[evar:E↦q]] using gpi
ψ1, ψ2: Pattern
wfψ: well_formed (ψ1 ---> ψ2)
Hsz: S (size' ψ1 + size' ψ2) ≤ S sz
EvS: EVarSet
SvS: SVarSet
i':= ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (ψ1 ---> ψ2))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (ψ1 ---> ψ2))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (ψ1 ---> ψ2)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E (ψ1 ---> ψ2) p q wfψ wfp wfq): ProofInfo
pile: ProofInfoLe i' gpi
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
E_in_EvS: E ∈ EvS
ψ_sub_EvS: free_evars (ψ1 ---> ψ2) ⊆ EvS
p_sub_SvS: free_svars p ⊆ SvS
q_sub_SvS: free_svars q ⊆ SvS
ψ_sub_SvS: free_svars (ψ1 ---> ψ2) ⊆ SvS
HEinψ: E ∈ free_evars (ψ1 ---> ψ2)
wfψ1: well_formed ψ1 = true
H: size' ψ1 ≤ sz
wfψ2: well_formed ψ2 = true
H0: size' ψ2 ≤ sz
pf₁: Γ ⊢i ψ1^[[evar:E↦p]] <---> ψ1^[[evar:E↦q]] using gpi
pf₂: ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ2)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ2)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ2) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ2 p q wfψ2 wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ2 ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ2 ⊆ SvS → Γ ⊢i ψ2^[[evar:E↦p]] <---> ψ2^[[evar:E↦q]] using gpi
free_svars p ⊆ SvS
Σ: Signature
sz: nat
Γ: Theory
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
E: evar
exdepth, mudepth: nat
gpi: ProofInfo
pf: Γ ⊢i p <---> q using gpi
IHsz: (ψ : Pattern) (wfψ : well_formed ψ), size' ψ ≤ sz → (EvS : EVarSet) (SvS : SVarSet), ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ p q wfψ wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ ⊆ SvS → Γ ⊢i ψ^[[evar:E↦p]] <---> ψ^[[evar:E↦q]] using gpi
ψ1, ψ2: Pattern
wfψ: well_formed (ψ1 ---> ψ2)
Hsz: S (size' ψ1 + size' ψ2) ≤ S sz
EvS: EVarSet
SvS: SVarSet
i':= ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (ψ1 ---> ψ2))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (ψ1 ---> ψ2))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (ψ1 ---> ψ2)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E (ψ1 ---> ψ2) p q wfψ wfp wfq): ProofInfo
pile: ProofInfoLe i' gpi
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
E_in_EvS: E ∈ EvS
ψ_sub_EvS: free_evars (ψ1 ---> ψ2) ⊆ EvS
p_sub_SvS: free_svars p ⊆ SvS
q_sub_SvS: free_svars q ⊆ SvS
ψ_sub_SvS: free_svars (ψ1 ---> ψ2) ⊆ SvS
HEinψ: E ∈ free_evars (ψ1 ---> ψ2)
wfψ1: well_formed ψ1 = true
H: size' ψ1 ≤ sz
wfψ2: well_formed ψ2 = true
H0: size' ψ2 ≤ sz
pf₁: Γ ⊢i ψ1^[[evar:E↦p]] <---> ψ1^[[evar:E↦q]] using gpi
pf₂: ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ2)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ2)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ2) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ2 p q wfψ2 wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ2 ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ2 ⊆ SvS → Γ ⊢i ψ2^[[evar:E↦p]] <---> ψ2^[[evar:E↦q]] using gpi
free_svars q ⊆ SvS
Σ: Signature
sz: nat
Γ: Theory
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
E: evar
exdepth, mudepth: nat
gpi: ProofInfo
pf: Γ ⊢i p <---> q using gpi
IHsz: (ψ : Pattern) (wfψ : well_formed ψ), size' ψ ≤ sz → (EvS : EVarSet) (SvS : SVarSet), ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ p q wfψ wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ ⊆ SvS → Γ ⊢i ψ^[[evar:E↦p]] <---> ψ^[[evar:E↦q]] using gpi
ψ1, ψ2: Pattern
wfψ: well_formed (ψ1 ---> ψ2)
Hsz: S (size' ψ1 + size' ψ2) ≤ S sz
EvS: EVarSet
SvS: SVarSet
i':= ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (ψ1 ---> ψ2))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (ψ1 ---> ψ2))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (ψ1 ---> ψ2)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E (ψ1 ---> ψ2) p q wfψ wfp wfq): ProofInfo
pile: ProofInfoLe i' gpi
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
E_in_EvS: E ∈ EvS
ψ_sub_EvS: free_evars (ψ1 ---> ψ2) ⊆ EvS
p_sub_SvS: free_svars p ⊆ SvS
q_sub_SvS: free_svars q ⊆ SvS
ψ_sub_SvS: free_svars (ψ1 ---> ψ2) ⊆ SvS
HEinψ: E ∈ free_evars (ψ1 ---> ψ2)
wfψ1: well_formed ψ1 = true
H: size' ψ1 ≤ sz
wfψ2: well_formed ψ2 = true
H0: size' ψ2 ≤ sz
pf₁: Γ ⊢i ψ1^[[evar:E↦p]] <---> ψ1^[[evar:E↦q]] using gpi
pf₂: ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ2)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ2)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ2) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ2 p q wfψ2 wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ2 ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ2 ⊆ SvS → Γ ⊢i ψ2^[[evar:E↦p]] <---> ψ2^[[evar:E↦q]] using gpi
free_svars ψ2 ⊆ SvS
Σ: Signature
sz: nat
Γ: Theory
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
E: evar
exdepth, mudepth: nat
gpi: ProofInfo
pf: Γ ⊢i p <---> q using gpi
IHsz: (ψ : Pattern) (wfψ : well_formed ψ), size' ψ ≤ sz → (EvS : EVarSet) (SvS : SVarSet), ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ p q wfψ wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ ⊆ SvS → Γ ⊢i ψ^[[evar:E↦p]] <---> ψ^[[evar:E↦q]] using gpi
ψ1, ψ2: Pattern
wfψ: well_formed (ψ1 ---> ψ2)
Hsz: S (size' ψ1 + size' ψ2) ≤ S sz
EvS: EVarSet
SvS: SVarSet
i':= ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (ψ1 ---> ψ2))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (ψ1 ---> ψ2))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (ψ1 ---> ψ2)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E (ψ1 ---> ψ2) p q wfψ wfp wfq): ProofInfo
pile: ProofInfoLe i' gpi
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
E_in_EvS: E ∈ EvS
ψ_sub_EvS: free_evars (ψ1 ---> ψ2) ⊆ EvS
p_sub_SvS: free_svars p ⊆ SvS
q_sub_SvS: free_svars q ⊆ SvS
ψ_sub_SvS: free_svars (ψ1 ---> ψ2) ⊆ SvS
HEinψ: E ∈ free_evars (ψ1 ---> ψ2)
wfψ1: well_formed ψ1 = true
H: size' ψ1 ≤ sz
wfψ2: well_formed ψ2 = true
H0: size' ψ2 ≤ sz
pf₁: Γ ⊢i ψ1^[[evar:E↦p]] <---> ψ1^[[evar:E↦q]] using gpi
pf₂: Γ ⊢i ψ2^[[evar:E↦p]] <---> ψ2^[[evar:E↦q]] using gpi
Γ ⊢i (ψ1^[[evar:E↦p]] ---> ψ2^[[evar:E↦p]]) <---> (ψ1^[[evar:E↦q]] ---> ψ2^[[evar:E↦q]]) using gpi
Σ: Signature
sz: nat
Γ: Theory
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
E: evar
exdepth, mudepth: nat
gpi: ProofInfo
pf: Γ ⊢i p <---> q using gpi
IHsz: (ψ : Pattern) (wfψ : well_formed ψ), size' ψ ≤ sz → (EvS : EVarSet) (SvS : SVarSet), ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ p q wfψ wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ ⊆ SvS → Γ ⊢i ψ^[[evar:E↦p]] <---> ψ^[[evar:E↦q]] using gpi
ψ1, ψ2: Pattern
wfψ: well_formed (ψ1 ---> ψ2)
Hsz: S (size' ψ1 + size' ψ2) ≤ S sz
EvS: EVarSet
SvS: SVarSet
i':= ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (ψ1 ---> ψ2))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (ψ1 ---> ψ2))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (ψ1 ---> ψ2)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E (ψ1 ---> ψ2) p q wfψ wfp wfq): ProofInfo
pile: ProofInfoLe i' gpi
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
E_in_EvS: E ∈ EvS
ψ_sub_EvS: free_evars (ψ1 ---> ψ2) ⊆ EvS
p_sub_SvS: free_svars p ⊆ SvS
q_sub_SvS: free_svars q ⊆ SvS
ψ_sub_SvS: free_svars (ψ1 ---> ψ2) ⊆ SvS
HEinψ: E ∈ free_evars (ψ1 ---> ψ2)
wfψ1: well_formed ψ1 = true
H: size' ψ1 ≤ sz
wfψ2: well_formed ψ2 = true
H0: size' ψ2 ≤ sz
pf₁: Γ ⊢i ψ1^[[evar:E↦p]] <---> ψ1^[[evar:E↦q]] using gpi
pf₂: ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ2)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ2)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ2) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ2 p q wfψ2 wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ2 ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ2 ⊆ SvS → Γ ⊢i ψ2^[[evar:E↦p]] <---> ψ2^[[evar:E↦q]] using gpi

free_evars p ⊆ EvS
exact p_sub_EvS.
Σ: Signature
sz: nat
Γ: Theory
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
E: evar
exdepth, mudepth: nat
gpi: ProofInfo
pf: Γ ⊢i p <---> q using gpi
IHsz: (ψ : Pattern) (wfψ : well_formed ψ), size' ψ ≤ sz → (EvS : EVarSet) (SvS : SVarSet), ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ p q wfψ wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ ⊆ SvS → Γ ⊢i ψ^[[evar:E↦p]] <---> ψ^[[evar:E↦q]] using gpi
ψ1, ψ2: Pattern
wfψ: well_formed (ψ1 ---> ψ2)
Hsz: S (size' ψ1 + size' ψ2) ≤ S sz
EvS: EVarSet
SvS: SVarSet
i':= ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (ψ1 ---> ψ2))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (ψ1 ---> ψ2))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (ψ1 ---> ψ2)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E (ψ1 ---> ψ2) p q wfψ wfp wfq): ProofInfo
pile: ProofInfoLe i' gpi
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
E_in_EvS: E ∈ EvS
ψ_sub_EvS: free_evars (ψ1 ---> ψ2) ⊆ EvS
p_sub_SvS: free_svars p ⊆ SvS
q_sub_SvS: free_svars q ⊆ SvS
ψ_sub_SvS: free_svars (ψ1 ---> ψ2) ⊆ SvS
HEinψ: E ∈ free_evars (ψ1 ---> ψ2)
wfψ1: well_formed ψ1 = true
H: size' ψ1 ≤ sz
wfψ2: well_formed ψ2 = true
H0: size' ψ2 ≤ sz
pf₁: Γ ⊢i ψ1^[[evar:E↦p]] <---> ψ1^[[evar:E↦q]] using gpi
pf₂: ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ2)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ2)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ2) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ2 p q wfψ2 wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ2 ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ2 ⊆ SvS → Γ ⊢i ψ2^[[evar:E↦p]] <---> ψ2^[[evar:E↦q]] using gpi

free_evars q ⊆ EvS
Σ: Signature
sz: nat
Γ: Theory
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
E: evar
exdepth, mudepth: nat
gpi: ProofInfo
pf: Γ ⊢i p <---> q using gpi
IHsz: (ψ : Pattern) (wfψ : well_formed ψ), size' ψ ≤ sz → (EvS : EVarSet) (SvS : SVarSet), ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ p q wfψ wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ ⊆ SvS → Γ ⊢i ψ^[[evar:E↦p]] <---> ψ^[[evar:E↦q]] using gpi
ψ1, ψ2: Pattern
wfψ: well_formed (ψ1 ---> ψ2)
Hsz: S (size' ψ1 + size' ψ2) ≤ S sz
EvS: EVarSet
SvS: SVarSet
i':= ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (ψ1 ---> ψ2))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (ψ1 ---> ψ2))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (ψ1 ---> ψ2)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E (ψ1 ---> ψ2) p q wfψ wfp wfq): ProofInfo
pile: ProofInfoLe i' gpi
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
E_in_EvS: E ∈ EvS
ψ_sub_EvS: free_evars (ψ1 ---> ψ2) ⊆ EvS
p_sub_SvS: free_svars p ⊆ SvS
q_sub_SvS: free_svars q ⊆ SvS
ψ_sub_SvS: free_svars (ψ1 ---> ψ2) ⊆ SvS
HEinψ: E ∈ free_evars (ψ1 ---> ψ2)
wfψ1: well_formed ψ1 = true
H: size' ψ1 ≤ sz
wfψ2: well_formed ψ2 = true
H0: size' ψ2 ≤ sz
pf₁: Γ ⊢i ψ1^[[evar:E↦p]] <---> ψ1^[[evar:E↦q]] using gpi
pf₂: ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ2)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ2)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ2) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ2 p q wfψ2 wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ2 ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ2 ⊆ SvS → Γ ⊢i ψ2^[[evar:E↦p]] <---> ψ2^[[evar:E↦q]] using gpi
E ∈ EvS
Σ: Signature
sz: nat
Γ: Theory
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
E: evar
exdepth, mudepth: nat
gpi: ProofInfo
pf: Γ ⊢i p <---> q using gpi
IHsz: (ψ : Pattern) (wfψ : well_formed ψ), size' ψ ≤ sz → (EvS : EVarSet) (SvS : SVarSet), ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ p q wfψ wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ ⊆ SvS → Γ ⊢i ψ^[[evar:E↦p]] <---> ψ^[[evar:E↦q]] using gpi
ψ1, ψ2: Pattern
wfψ: well_formed (ψ1 ---> ψ2)
Hsz: S (size' ψ1 + size' ψ2) ≤ S sz
EvS: EVarSet
SvS: SVarSet
i':= ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (ψ1 ---> ψ2))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (ψ1 ---> ψ2))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (ψ1 ---> ψ2)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E (ψ1 ---> ψ2) p q wfψ wfp wfq): ProofInfo
pile: ProofInfoLe i' gpi
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
E_in_EvS: E ∈ EvS
ψ_sub_EvS: free_evars (ψ1 ---> ψ2) ⊆ EvS
p_sub_SvS: free_svars p ⊆ SvS
q_sub_SvS: free_svars q ⊆ SvS
ψ_sub_SvS: free_svars (ψ1 ---> ψ2) ⊆ SvS
HEinψ: E ∈ free_evars (ψ1 ---> ψ2)
wfψ1: well_formed ψ1 = true
H: size' ψ1 ≤ sz
wfψ2: well_formed ψ2 = true
H0: size' ψ2 ≤ sz
pf₁: Γ ⊢i ψ1^[[evar:E↦p]] <---> ψ1^[[evar:E↦q]] using gpi
pf₂: ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ2)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ2)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ2) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ2 p q wfψ2 wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ2 ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ2 ⊆ SvS → Γ ⊢i ψ2^[[evar:E↦p]] <---> ψ2^[[evar:E↦q]] using gpi
free_evars ψ2 ⊆ EvS
Σ: Signature
sz: nat
Γ: Theory
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
E: evar
exdepth, mudepth: nat
gpi: ProofInfo
pf: Γ ⊢i p <---> q using gpi
IHsz: (ψ : Pattern) (wfψ : well_formed ψ), size' ψ ≤ sz → (EvS : EVarSet) (SvS : SVarSet), ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ p q wfψ wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ ⊆ SvS → Γ ⊢i ψ^[[evar:E↦p]] <---> ψ^[[evar:E↦q]] using gpi
ψ1, ψ2: Pattern
wfψ: well_formed (ψ1 ---> ψ2)
Hsz: S (size' ψ1 + size' ψ2) ≤ S sz
EvS: EVarSet
SvS: SVarSet
i':= ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (ψ1 ---> ψ2))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (ψ1 ---> ψ2))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (ψ1 ---> ψ2)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E (ψ1 ---> ψ2) p q wfψ wfp wfq): ProofInfo
pile: ProofInfoLe i' gpi
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
E_in_EvS: E ∈ EvS
ψ_sub_EvS: free_evars (ψ1 ---> ψ2) ⊆ EvS
p_sub_SvS: free_svars p ⊆ SvS
q_sub_SvS: free_svars q ⊆ SvS
ψ_sub_SvS: free_svars (ψ1 ---> ψ2) ⊆ SvS
HEinψ: E ∈ free_evars (ψ1 ---> ψ2)
wfψ1: well_formed ψ1 = true
H: size' ψ1 ≤ sz
wfψ2: well_formed ψ2 = true
H0: size' ψ2 ≤ sz
pf₁: Γ ⊢i ψ1^[[evar:E↦p]] <---> ψ1^[[evar:E↦q]] using gpi
pf₂: ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ2)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ2)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ2) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ2 p q wfψ2 wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ2 ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ2 ⊆ SvS → Γ ⊢i ψ2^[[evar:E↦p]] <---> ψ2^[[evar:E↦q]] using gpi
free_svars p ⊆ SvS
Σ: Signature
sz: nat
Γ: Theory
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
E: evar
exdepth, mudepth: nat
gpi: ProofInfo
pf: Γ ⊢i p <---> q using gpi
IHsz: (ψ : Pattern) (wfψ : well_formed ψ), size' ψ ≤ sz → (EvS : EVarSet) (SvS : SVarSet), ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ p q wfψ wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ ⊆ SvS → Γ ⊢i ψ^[[evar:E↦p]] <---> ψ^[[evar:E↦q]] using gpi
ψ1, ψ2: Pattern
wfψ: well_formed (ψ1 ---> ψ2)
Hsz: S (size' ψ1 + size' ψ2) ≤ S sz
EvS: EVarSet
SvS: SVarSet
i':= ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (ψ1 ---> ψ2))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (ψ1 ---> ψ2))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (ψ1 ---> ψ2)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E (ψ1 ---> ψ2) p q wfψ wfp wfq): ProofInfo
pile: ProofInfoLe i' gpi
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
E_in_EvS: E ∈ EvS
ψ_sub_EvS: free_evars (ψ1 ---> ψ2) ⊆ EvS
p_sub_SvS: free_svars p ⊆ SvS
q_sub_SvS: free_svars q ⊆ SvS
ψ_sub_SvS: free_svars (ψ1 ---> ψ2) ⊆ SvS
HEinψ: E ∈ free_evars (ψ1 ---> ψ2)
wfψ1: well_formed ψ1 = true
H: size' ψ1 ≤ sz
wfψ2: well_formed ψ2 = true
H0: size' ψ2 ≤ sz
pf₁: Γ ⊢i ψ1^[[evar:E↦p]] <---> ψ1^[[evar:E↦q]] using gpi
pf₂: ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ2)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ2)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ2) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ2 p q wfψ2 wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ2 ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ2 ⊆ SvS → Γ ⊢i ψ2^[[evar:E↦p]] <---> ψ2^[[evar:E↦q]] using gpi
free_svars q ⊆ SvS
Σ: Signature
sz: nat
Γ: Theory
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
E: evar
exdepth, mudepth: nat
gpi: ProofInfo
pf: Γ ⊢i p <---> q using gpi
IHsz: (ψ : Pattern) (wfψ : well_formed ψ), size' ψ ≤ sz → (EvS : EVarSet) (SvS : SVarSet), ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ p q wfψ wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ ⊆ SvS → Γ ⊢i ψ^[[evar:E↦p]] <---> ψ^[[evar:E↦q]] using gpi
ψ1, ψ2: Pattern
wfψ: well_formed (ψ1 ---> ψ2)
Hsz: S (size' ψ1 + size' ψ2) ≤ S sz
EvS: EVarSet
SvS: SVarSet
i':= ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (ψ1 ---> ψ2))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (ψ1 ---> ψ2))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (ψ1 ---> ψ2)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E (ψ1 ---> ψ2) p q wfψ wfp wfq): ProofInfo
pile: ProofInfoLe i' gpi
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
E_in_EvS: E ∈ EvS
ψ_sub_EvS: free_evars (ψ1 ---> ψ2) ⊆ EvS
p_sub_SvS: free_svars p ⊆ SvS
q_sub_SvS: free_svars q ⊆ SvS
ψ_sub_SvS: free_svars (ψ1 ---> ψ2) ⊆ SvS
HEinψ: E ∈ free_evars (ψ1 ---> ψ2)
wfψ1: well_formed ψ1 = true
H: size' ψ1 ≤ sz
wfψ2: well_formed ψ2 = true
H0: size' ψ2 ≤ sz
pf₁: Γ ⊢i ψ1^[[evar:E↦p]] <---> ψ1^[[evar:E↦q]] using gpi
pf₂: ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ2)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ2)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ2) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ2 p q wfψ2 wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ2 ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ2 ⊆ SvS → Γ ⊢i ψ2^[[evar:E↦p]] <---> ψ2^[[evar:E↦q]] using gpi
free_svars ψ2 ⊆ SvS
Σ: Signature
sz: nat
Γ: Theory
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
E: evar
exdepth, mudepth: nat
gpi: ProofInfo
pf: Γ ⊢i p <---> q using gpi
IHsz: (ψ : Pattern) (wfψ : well_formed ψ), size' ψ ≤ sz → (EvS : EVarSet) (SvS : SVarSet), ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ p q wfψ wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ ⊆ SvS → Γ ⊢i ψ^[[evar:E↦p]] <---> ψ^[[evar:E↦q]] using gpi
ψ1, ψ2: Pattern
wfψ: well_formed (ψ1 ---> ψ2)
Hsz: S (size' ψ1 + size' ψ2) ≤ S sz
EvS: EVarSet
SvS: SVarSet
i':= ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (ψ1 ---> ψ2))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (ψ1 ---> ψ2))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (ψ1 ---> ψ2)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E (ψ1 ---> ψ2) p q wfψ wfp wfq): ProofInfo
pile: ProofInfoLe i' gpi
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
E_in_EvS: E ∈ EvS
ψ_sub_EvS: free_evars (ψ1 ---> ψ2) ⊆ EvS
p_sub_SvS: free_svars p ⊆ SvS
q_sub_SvS: free_svars q ⊆ SvS
ψ_sub_SvS: free_svars (ψ1 ---> ψ2) ⊆ SvS
HEinψ: E ∈ free_evars (ψ1 ---> ψ2)
wfψ1: well_formed ψ1 = true
H: size' ψ1 ≤ sz
wfψ2: well_formed ψ2 = true
H0: size' ψ2 ≤ sz
pf₁: Γ ⊢i ψ1^[[evar:E↦p]] <---> ψ1^[[evar:E↦q]] using gpi
pf₂: Γ ⊢i ψ2^[[evar:E↦p]] <---> ψ2^[[evar:E↦q]] using gpi
Γ ⊢i (ψ1^[[evar:E↦p]] ---> ψ2^[[evar:E↦p]]) <---> (ψ1^[[evar:E↦q]] ---> ψ2^[[evar:E↦q]]) using gpi
Σ: Signature
sz: nat
Γ: Theory
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
E: evar
exdepth, mudepth: nat
gpi: ProofInfo
pf: Γ ⊢i p <---> q using gpi
IHsz: (ψ : Pattern) (wfψ : well_formed ψ), size' ψ ≤ sz → (EvS : EVarSet) (SvS : SVarSet), ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ p q wfψ wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ ⊆ SvS → Γ ⊢i ψ^[[evar:E↦p]] <---> ψ^[[evar:E↦q]] using gpi
ψ1, ψ2: Pattern
wfψ: well_formed (ψ1 ---> ψ2)
Hsz: S (size' ψ1 + size' ψ2) ≤ S sz
EvS: EVarSet
SvS: SVarSet
i':= ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (ψ1 ---> ψ2))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (ψ1 ---> ψ2))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (ψ1 ---> ψ2)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E (ψ1 ---> ψ2) p q wfψ wfp wfq): ProofInfo
pile: ProofInfoLe i' gpi
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
E_in_EvS: E ∈ EvS
ψ_sub_EvS: free_evars (ψ1 ---> ψ2) ⊆ EvS
p_sub_SvS: free_svars p ⊆ SvS
q_sub_SvS: free_svars q ⊆ SvS
ψ_sub_SvS: free_svars (ψ1 ---> ψ2) ⊆ SvS
HEinψ: E ∈ free_evars (ψ1 ---> ψ2)
wfψ1: well_formed ψ1 = true
H: size' ψ1 ≤ sz
wfψ2: well_formed ψ2 = true
H0: size' ψ2 ≤ sz
pf₁: Γ ⊢i ψ1^[[evar:E↦p]] <---> ψ1^[[evar:E↦q]] using gpi
pf₂: ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ2)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ2)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ2) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ2 p q wfψ2 wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ2 ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ2 ⊆ SvS → Γ ⊢i ψ2^[[evar:E↦p]] <---> ψ2^[[evar:E↦q]] using gpi

free_evars q ⊆ EvS
exact q_sub_EvS.
Σ: Signature
sz: nat
Γ: Theory
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
E: evar
exdepth, mudepth: nat
gpi: ProofInfo
pf: Γ ⊢i p <---> q using gpi
IHsz: (ψ : Pattern) (wfψ : well_formed ψ), size' ψ ≤ sz → (EvS : EVarSet) (SvS : SVarSet), ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ p q wfψ wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ ⊆ SvS → Γ ⊢i ψ^[[evar:E↦p]] <---> ψ^[[evar:E↦q]] using gpi
ψ1, ψ2: Pattern
wfψ: well_formed (ψ1 ---> ψ2)
Hsz: S (size' ψ1 + size' ψ2) ≤ S sz
EvS: EVarSet
SvS: SVarSet
i':= ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (ψ1 ---> ψ2))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (ψ1 ---> ψ2))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (ψ1 ---> ψ2)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E (ψ1 ---> ψ2) p q wfψ wfp wfq): ProofInfo
pile: ProofInfoLe i' gpi
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
E_in_EvS: E ∈ EvS
ψ_sub_EvS: free_evars (ψ1 ---> ψ2) ⊆ EvS
p_sub_SvS: free_svars p ⊆ SvS
q_sub_SvS: free_svars q ⊆ SvS
ψ_sub_SvS: free_svars (ψ1 ---> ψ2) ⊆ SvS
HEinψ: E ∈ free_evars (ψ1 ---> ψ2)
wfψ1: well_formed ψ1 = true
H: size' ψ1 ≤ sz
wfψ2: well_formed ψ2 = true
H0: size' ψ2 ≤ sz
pf₁: Γ ⊢i ψ1^[[evar:E↦p]] <---> ψ1^[[evar:E↦q]] using gpi
pf₂: ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ2)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ2)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ2) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ2 p q wfψ2 wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ2 ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ2 ⊆ SvS → Γ ⊢i ψ2^[[evar:E↦p]] <---> ψ2^[[evar:E↦q]] using gpi

E ∈ EvS
Σ: Signature
sz: nat
Γ: Theory
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
E: evar
exdepth, mudepth: nat
gpi: ProofInfo
pf: Γ ⊢i p <---> q using gpi
IHsz: (ψ : Pattern) (wfψ : well_formed ψ), size' ψ ≤ sz → (EvS : EVarSet) (SvS : SVarSet), ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ p q wfψ wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ ⊆ SvS → Γ ⊢i ψ^[[evar:E↦p]] <---> ψ^[[evar:E↦q]] using gpi
ψ1, ψ2: Pattern
wfψ: well_formed (ψ1 ---> ψ2)
Hsz: S (size' ψ1 + size' ψ2) ≤ S sz
EvS: EVarSet
SvS: SVarSet
i':= ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (ψ1 ---> ψ2))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (ψ1 ---> ψ2))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (ψ1 ---> ψ2)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E (ψ1 ---> ψ2) p q wfψ wfp wfq): ProofInfo
pile: ProofInfoLe i' gpi
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
E_in_EvS: E ∈ EvS
ψ_sub_EvS: free_evars (ψ1 ---> ψ2) ⊆ EvS
p_sub_SvS: free_svars p ⊆ SvS
q_sub_SvS: free_svars q ⊆ SvS
ψ_sub_SvS: free_svars (ψ1 ---> ψ2) ⊆ SvS
HEinψ: E ∈ free_evars (ψ1 ---> ψ2)
wfψ1: well_formed ψ1 = true
H: size' ψ1 ≤ sz
wfψ2: well_formed ψ2 = true
H0: size' ψ2 ≤ sz
pf₁: Γ ⊢i ψ1^[[evar:E↦p]] <---> ψ1^[[evar:E↦q]] using gpi
pf₂: ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ2)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ2)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ2) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ2 p q wfψ2 wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ2 ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ2 ⊆ SvS → Γ ⊢i ψ2^[[evar:E↦p]] <---> ψ2^[[evar:E↦q]] using gpi
free_evars ψ2 ⊆ EvS
Σ: Signature
sz: nat
Γ: Theory
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
E: evar
exdepth, mudepth: nat
gpi: ProofInfo
pf: Γ ⊢i p <---> q using gpi
IHsz: (ψ : Pattern) (wfψ : well_formed ψ), size' ψ ≤ sz → (EvS : EVarSet) (SvS : SVarSet), ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ p q wfψ wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ ⊆ SvS → Γ ⊢i ψ^[[evar:E↦p]] <---> ψ^[[evar:E↦q]] using gpi
ψ1, ψ2: Pattern
wfψ: well_formed (ψ1 ---> ψ2)
Hsz: S (size' ψ1 + size' ψ2) ≤ S sz
EvS: EVarSet
SvS: SVarSet
i':= ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (ψ1 ---> ψ2))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (ψ1 ---> ψ2))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (ψ1 ---> ψ2)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E (ψ1 ---> ψ2) p q wfψ wfp wfq): ProofInfo
pile: ProofInfoLe i' gpi
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
E_in_EvS: E ∈ EvS
ψ_sub_EvS: free_evars (ψ1 ---> ψ2) ⊆ EvS
p_sub_SvS: free_svars p ⊆ SvS
q_sub_SvS: free_svars q ⊆ SvS
ψ_sub_SvS: free_svars (ψ1 ---> ψ2) ⊆ SvS
HEinψ: E ∈ free_evars (ψ1 ---> ψ2)
wfψ1: well_formed ψ1 = true
H: size' ψ1 ≤ sz
wfψ2: well_formed ψ2 = true
H0: size' ψ2 ≤ sz
pf₁: Γ ⊢i ψ1^[[evar:E↦p]] <---> ψ1^[[evar:E↦q]] using gpi
pf₂: ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ2)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ2)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ2) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ2 p q wfψ2 wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ2 ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ2 ⊆ SvS → Γ ⊢i ψ2^[[evar:E↦p]] <---> ψ2^[[evar:E↦q]] using gpi
free_svars p ⊆ SvS
Σ: Signature
sz: nat
Γ: Theory
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
E: evar
exdepth, mudepth: nat
gpi: ProofInfo
pf: Γ ⊢i p <---> q using gpi
IHsz: (ψ : Pattern) (wfψ : well_formed ψ), size' ψ ≤ sz → (EvS : EVarSet) (SvS : SVarSet), ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ p q wfψ wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ ⊆ SvS → Γ ⊢i ψ^[[evar:E↦p]] <---> ψ^[[evar:E↦q]] using gpi
ψ1, ψ2: Pattern
wfψ: well_formed (ψ1 ---> ψ2)
Hsz: S (size' ψ1 + size' ψ2) ≤ S sz
EvS: EVarSet
SvS: SVarSet
i':= ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (ψ1 ---> ψ2))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (ψ1 ---> ψ2))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (ψ1 ---> ψ2)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E (ψ1 ---> ψ2) p q wfψ wfp wfq): ProofInfo
pile: ProofInfoLe i' gpi
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
E_in_EvS: E ∈ EvS
ψ_sub_EvS: free_evars (ψ1 ---> ψ2) ⊆ EvS
p_sub_SvS: free_svars p ⊆ SvS
q_sub_SvS: free_svars q ⊆ SvS
ψ_sub_SvS: free_svars (ψ1 ---> ψ2) ⊆ SvS
HEinψ: E ∈ free_evars (ψ1 ---> ψ2)
wfψ1: well_formed ψ1 = true
H: size' ψ1 ≤ sz
wfψ2: well_formed ψ2 = true
H0: size' ψ2 ≤ sz
pf₁: Γ ⊢i ψ1^[[evar:E↦p]] <---> ψ1^[[evar:E↦q]] using gpi
pf₂: ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ2)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ2)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ2) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ2 p q wfψ2 wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ2 ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ2 ⊆ SvS → Γ ⊢i ψ2^[[evar:E↦p]] <---> ψ2^[[evar:E↦q]] using gpi
free_svars q ⊆ SvS
Σ: Signature
sz: nat
Γ: Theory
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
E: evar
exdepth, mudepth: nat
gpi: ProofInfo
pf: Γ ⊢i p <---> q using gpi
IHsz: (ψ : Pattern) (wfψ : well_formed ψ), size' ψ ≤ sz → (EvS : EVarSet) (SvS : SVarSet), ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ p q wfψ wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ ⊆ SvS → Γ ⊢i ψ^[[evar:E↦p]] <---> ψ^[[evar:E↦q]] using gpi
ψ1, ψ2: Pattern
wfψ: well_formed (ψ1 ---> ψ2)
Hsz: S (size' ψ1 + size' ψ2) ≤ S sz
EvS: EVarSet
SvS: SVarSet
i':= ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (ψ1 ---> ψ2))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (ψ1 ---> ψ2))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (ψ1 ---> ψ2)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E (ψ1 ---> ψ2) p q wfψ wfp wfq): ProofInfo
pile: ProofInfoLe i' gpi
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
E_in_EvS: E ∈ EvS
ψ_sub_EvS: free_evars (ψ1 ---> ψ2) ⊆ EvS
p_sub_SvS: free_svars p ⊆ SvS
q_sub_SvS: free_svars q ⊆ SvS
ψ_sub_SvS: free_svars (ψ1 ---> ψ2) ⊆ SvS
HEinψ: E ∈ free_evars (ψ1 ---> ψ2)
wfψ1: well_formed ψ1 = true
H: size' ψ1 ≤ sz
wfψ2: well_formed ψ2 = true
H0: size' ψ2 ≤ sz
pf₁: Γ ⊢i ψ1^[[evar:E↦p]] <---> ψ1^[[evar:E↦q]] using gpi
pf₂: ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ2)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ2)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ2) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ2 p q wfψ2 wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ2 ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ2 ⊆ SvS → Γ ⊢i ψ2^[[evar:E↦p]] <---> ψ2^[[evar:E↦q]] using gpi
free_svars ψ2 ⊆ SvS
Σ: Signature
sz: nat
Γ: Theory
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
E: evar
exdepth, mudepth: nat
gpi: ProofInfo
pf: Γ ⊢i p <---> q using gpi
IHsz: (ψ : Pattern) (wfψ : well_formed ψ), size' ψ ≤ sz → (EvS : EVarSet) (SvS : SVarSet), ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ p q wfψ wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ ⊆ SvS → Γ ⊢i ψ^[[evar:E↦p]] <---> ψ^[[evar:E↦q]] using gpi
ψ1, ψ2: Pattern
wfψ: well_formed (ψ1 ---> ψ2)
Hsz: S (size' ψ1 + size' ψ2) ≤ S sz
EvS: EVarSet
SvS: SVarSet
i':= ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (ψ1 ---> ψ2))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (ψ1 ---> ψ2))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (ψ1 ---> ψ2)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E (ψ1 ---> ψ2) p q wfψ wfp wfq): ProofInfo
pile: ProofInfoLe i' gpi
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
E_in_EvS: E ∈ EvS
ψ_sub_EvS: free_evars (ψ1 ---> ψ2) ⊆ EvS
p_sub_SvS: free_svars p ⊆ SvS
q_sub_SvS: free_svars q ⊆ SvS
ψ_sub_SvS: free_svars (ψ1 ---> ψ2) ⊆ SvS
HEinψ: E ∈ free_evars (ψ1 ---> ψ2)
wfψ1: well_formed ψ1 = true
H: size' ψ1 ≤ sz
wfψ2: well_formed ψ2 = true
H0: size' ψ2 ≤ sz
pf₁: Γ ⊢i ψ1^[[evar:E↦p]] <---> ψ1^[[evar:E↦q]] using gpi
pf₂: Γ ⊢i ψ2^[[evar:E↦p]] <---> ψ2^[[evar:E↦q]] using gpi
Γ ⊢i (ψ1^[[evar:E↦p]] ---> ψ2^[[evar:E↦p]]) <---> (ψ1^[[evar:E↦q]] ---> ψ2^[[evar:E↦q]]) using gpi
Σ: Signature
sz: nat
Γ: Theory
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
E: evar
exdepth, mudepth: nat
gpi: ProofInfo
pf: Γ ⊢i p <---> q using gpi
IHsz: (ψ : Pattern) (wfψ : well_formed ψ), size' ψ ≤ sz → (EvS : EVarSet) (SvS : SVarSet), ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ p q wfψ wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ ⊆ SvS → Γ ⊢i ψ^[[evar:E↦p]] <---> ψ^[[evar:E↦q]] using gpi
ψ1, ψ2: Pattern
wfψ: well_formed (ψ1 ---> ψ2)
Hsz: S (size' ψ1 + size' ψ2) ≤ S sz
EvS: EVarSet
SvS: SVarSet
i':= ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (ψ1 ---> ψ2))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (ψ1 ---> ψ2))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (ψ1 ---> ψ2)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E (ψ1 ---> ψ2) p q wfψ wfp wfq): ProofInfo
pile: ProofInfoLe i' gpi
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
E_in_EvS: E ∈ EvS
ψ_sub_EvS: free_evars (ψ1 ---> ψ2) ⊆ EvS
p_sub_SvS: free_svars p ⊆ SvS
q_sub_SvS: free_svars q ⊆ SvS
ψ_sub_SvS: free_svars (ψ1 ---> ψ2) ⊆ SvS
HEinψ: E ∈ free_evars (ψ1 ---> ψ2)
wfψ1: well_formed ψ1 = true
H: size' ψ1 ≤ sz
wfψ2: well_formed ψ2 = true
H0: size' ψ2 ≤ sz
pf₁: Γ ⊢i ψ1^[[evar:E↦p]] <---> ψ1^[[evar:E↦q]] using gpi
pf₂: ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ2)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ2)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ2) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ2 p q wfψ2 wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ2 ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ2 ⊆ SvS → Γ ⊢i ψ2^[[evar:E↦p]] <---> ψ2^[[evar:E↦q]] using gpi

E ∈ EvS
exact E_in_EvS.
Σ: Signature
sz: nat
Γ: Theory
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
E: evar
exdepth, mudepth: nat
gpi: ProofInfo
pf: Γ ⊢i p <---> q using gpi
IHsz: (ψ : Pattern) (wfψ : well_formed ψ), size' ψ ≤ sz → (EvS : EVarSet) (SvS : SVarSet), ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ p q wfψ wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ ⊆ SvS → Γ ⊢i ψ^[[evar:E↦p]] <---> ψ^[[evar:E↦q]] using gpi
ψ1, ψ2: Pattern
wfψ: well_formed (ψ1 ---> ψ2)
Hsz: S (size' ψ1 + size' ψ2) ≤ S sz
EvS: EVarSet
SvS: SVarSet
i':= ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (ψ1 ---> ψ2))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (ψ1 ---> ψ2))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (ψ1 ---> ψ2)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E (ψ1 ---> ψ2) p q wfψ wfp wfq): ProofInfo
pile: ProofInfoLe i' gpi
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
E_in_EvS: E ∈ EvS
ψ_sub_EvS: free_evars (ψ1 ---> ψ2) ⊆ EvS
p_sub_SvS: free_svars p ⊆ SvS
q_sub_SvS: free_svars q ⊆ SvS
ψ_sub_SvS: free_svars (ψ1 ---> ψ2) ⊆ SvS
HEinψ: E ∈ free_evars (ψ1 ---> ψ2)
wfψ1: well_formed ψ1 = true
H: size' ψ1 ≤ sz
wfψ2: well_formed ψ2 = true
H0: size' ψ2 ≤ sz
pf₁: Γ ⊢i ψ1^[[evar:E↦p]] <---> ψ1^[[evar:E↦q]] using gpi
pf₂: ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ2)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ2)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ2) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ2 p q wfψ2 wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ2 ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ2 ⊆ SvS → Γ ⊢i ψ2^[[evar:E↦p]] <---> ψ2^[[evar:E↦q]] using gpi

free_evars ψ2 ⊆ EvS
Σ: Signature
sz: nat
Γ: Theory
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
E: evar
exdepth, mudepth: nat
gpi: ProofInfo
pf: Γ ⊢i p <---> q using gpi
IHsz: (ψ : Pattern) (wfψ : well_formed ψ), size' ψ ≤ sz → (EvS : EVarSet) (SvS : SVarSet), ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ p q wfψ wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ ⊆ SvS → Γ ⊢i ψ^[[evar:E↦p]] <---> ψ^[[evar:E↦q]] using gpi
ψ1, ψ2: Pattern
wfψ: well_formed (ψ1 ---> ψ2)
Hsz: S (size' ψ1 + size' ψ2) ≤ S sz
EvS: EVarSet
SvS: SVarSet
i':= ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (ψ1 ---> ψ2))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (ψ1 ---> ψ2))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (ψ1 ---> ψ2)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E (ψ1 ---> ψ2) p q wfψ wfp wfq): ProofInfo
pile: ProofInfoLe i' gpi
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
E_in_EvS: E ∈ EvS
ψ_sub_EvS: free_evars (ψ1 ---> ψ2) ⊆ EvS
p_sub_SvS: free_svars p ⊆ SvS
q_sub_SvS: free_svars q ⊆ SvS
ψ_sub_SvS: free_svars (ψ1 ---> ψ2) ⊆ SvS
HEinψ: E ∈ free_evars (ψ1 ---> ψ2)
wfψ1: well_formed ψ1 = true
H: size' ψ1 ≤ sz
wfψ2: well_formed ψ2 = true
H0: size' ψ2 ≤ sz
pf₁: Γ ⊢i ψ1^[[evar:E↦p]] <---> ψ1^[[evar:E↦q]] using gpi
pf₂: ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ2)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ2)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ2) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ2 p q wfψ2 wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ2 ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ2 ⊆ SvS → Γ ⊢i ψ2^[[evar:E↦p]] <---> ψ2^[[evar:E↦q]] using gpi
free_svars p ⊆ SvS
Σ: Signature
sz: nat
Γ: Theory
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
E: evar
exdepth, mudepth: nat
gpi: ProofInfo
pf: Γ ⊢i p <---> q using gpi
IHsz: (ψ : Pattern) (wfψ : well_formed ψ), size' ψ ≤ sz → (EvS : EVarSet) (SvS : SVarSet), ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ p q wfψ wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ ⊆ SvS → Γ ⊢i ψ^[[evar:E↦p]] <---> ψ^[[evar:E↦q]] using gpi
ψ1, ψ2: Pattern
wfψ: well_formed (ψ1 ---> ψ2)
Hsz: S (size' ψ1 + size' ψ2) ≤ S sz
EvS: EVarSet
SvS: SVarSet
i':= ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (ψ1 ---> ψ2))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (ψ1 ---> ψ2))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (ψ1 ---> ψ2)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E (ψ1 ---> ψ2) p q wfψ wfp wfq): ProofInfo
pile: ProofInfoLe i' gpi
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
E_in_EvS: E ∈ EvS
ψ_sub_EvS: free_evars (ψ1 ---> ψ2) ⊆ EvS
p_sub_SvS: free_svars p ⊆ SvS
q_sub_SvS: free_svars q ⊆ SvS
ψ_sub_SvS: free_svars (ψ1 ---> ψ2) ⊆ SvS
HEinψ: E ∈ free_evars (ψ1 ---> ψ2)
wfψ1: well_formed ψ1 = true
H: size' ψ1 ≤ sz
wfψ2: well_formed ψ2 = true
H0: size' ψ2 ≤ sz
pf₁: Γ ⊢i ψ1^[[evar:E↦p]] <---> ψ1^[[evar:E↦q]] using gpi
pf₂: ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ2)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ2)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ2) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ2 p q wfψ2 wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ2 ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ2 ⊆ SvS → Γ ⊢i ψ2^[[evar:E↦p]] <---> ψ2^[[evar:E↦q]] using gpi
free_svars q ⊆ SvS
Σ: Signature
sz: nat
Γ: Theory
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
E: evar
exdepth, mudepth: nat
gpi: ProofInfo
pf: Γ ⊢i p <---> q using gpi
IHsz: (ψ : Pattern) (wfψ : well_formed ψ), size' ψ ≤ sz → (EvS : EVarSet) (SvS : SVarSet), ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ p q wfψ wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ ⊆ SvS → Γ ⊢i ψ^[[evar:E↦p]] <---> ψ^[[evar:E↦q]] using gpi
ψ1, ψ2: Pattern
wfψ: well_formed (ψ1 ---> ψ2)
Hsz: S (size' ψ1 + size' ψ2) ≤ S sz
EvS: EVarSet
SvS: SVarSet
i':= ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (ψ1 ---> ψ2))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (ψ1 ---> ψ2))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (ψ1 ---> ψ2)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E (ψ1 ---> ψ2) p q wfψ wfp wfq): ProofInfo
pile: ProofInfoLe i' gpi
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
E_in_EvS: E ∈ EvS
ψ_sub_EvS: free_evars (ψ1 ---> ψ2) ⊆ EvS
p_sub_SvS: free_svars p ⊆ SvS
q_sub_SvS: free_svars q ⊆ SvS
ψ_sub_SvS: free_svars (ψ1 ---> ψ2) ⊆ SvS
HEinψ: E ∈ free_evars (ψ1 ---> ψ2)
wfψ1: well_formed ψ1 = true
H: size' ψ1 ≤ sz
wfψ2: well_formed ψ2 = true
H0: size' ψ2 ≤ sz
pf₁: Γ ⊢i ψ1^[[evar:E↦p]] <---> ψ1^[[evar:E↦q]] using gpi
pf₂: ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ2)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ2)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ2) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ2 p q wfψ2 wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ2 ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ2 ⊆ SvS → Γ ⊢i ψ2^[[evar:E↦p]] <---> ψ2^[[evar:E↦q]] using gpi
free_svars ψ2 ⊆ SvS
Σ: Signature
sz: nat
Γ: Theory
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
E: evar
exdepth, mudepth: nat
gpi: ProofInfo
pf: Γ ⊢i p <---> q using gpi
IHsz: (ψ : Pattern) (wfψ : well_formed ψ), size' ψ ≤ sz → (EvS : EVarSet) (SvS : SVarSet), ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ p q wfψ wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ ⊆ SvS → Γ ⊢i ψ^[[evar:E↦p]] <---> ψ^[[evar:E↦q]] using gpi
ψ1, ψ2: Pattern
wfψ: well_formed (ψ1 ---> ψ2)
Hsz: S (size' ψ1 + size' ψ2) ≤ S sz
EvS: EVarSet
SvS: SVarSet
i':= ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (ψ1 ---> ψ2))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (ψ1 ---> ψ2))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (ψ1 ---> ψ2)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E (ψ1 ---> ψ2) p q wfψ wfp wfq): ProofInfo
pile: ProofInfoLe i' gpi
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
E_in_EvS: E ∈ EvS
ψ_sub_EvS: free_evars (ψ1 ---> ψ2) ⊆ EvS
p_sub_SvS: free_svars p ⊆ SvS
q_sub_SvS: free_svars q ⊆ SvS
ψ_sub_SvS: free_svars (ψ1 ---> ψ2) ⊆ SvS
HEinψ: E ∈ free_evars (ψ1 ---> ψ2)
wfψ1: well_formed ψ1 = true
H: size' ψ1 ≤ sz
wfψ2: well_formed ψ2 = true
H0: size' ψ2 ≤ sz
pf₁: Γ ⊢i ψ1^[[evar:E↦p]] <---> ψ1^[[evar:E↦q]] using gpi
pf₂: Γ ⊢i ψ2^[[evar:E↦p]] <---> ψ2^[[evar:E↦q]] using gpi
Γ ⊢i (ψ1^[[evar:E↦p]] ---> ψ2^[[evar:E↦p]]) <---> (ψ1^[[evar:E↦q]] ---> ψ2^[[evar:E↦q]]) using gpi
Σ: Signature
sz: nat
Γ: Theory
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
E: evar
exdepth, mudepth: nat
gpi: ProofInfo
pf: Γ ⊢i p <---> q using gpi
IHsz: (ψ : Pattern) (wfψ : well_formed ψ), size' ψ ≤ sz → (EvS : EVarSet) (SvS : SVarSet), ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ p q wfψ wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ ⊆ SvS → Γ ⊢i ψ^[[evar:E↦p]] <---> ψ^[[evar:E↦q]] using gpi
ψ1, ψ2: Pattern
wfψ: well_formed (ψ1 ---> ψ2)
Hsz: S (size' ψ1 + size' ψ2) ≤ S sz
EvS: EVarSet
SvS: SVarSet
i':= ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (ψ1 ---> ψ2))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (ψ1 ---> ψ2))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (ψ1 ---> ψ2)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E (ψ1 ---> ψ2) p q wfψ wfp wfq): ProofInfo
pile: ProofInfoLe i' gpi
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
E_in_EvS: E ∈ EvS
ψ_sub_EvS: free_evars (ψ1 ---> ψ2) ⊆ EvS
p_sub_SvS: free_svars p ⊆ SvS
q_sub_SvS: free_svars q ⊆ SvS
ψ_sub_SvS: free_svars (ψ1 ---> ψ2) ⊆ SvS
HEinψ: E ∈ free_evars (ψ1 ---> ψ2)
wfψ1: well_formed ψ1 = true
H: size' ψ1 ≤ sz
wfψ2: well_formed ψ2 = true
H0: size' ψ2 ≤ sz
pf₁: Γ ⊢i ψ1^[[evar:E↦p]] <---> ψ1^[[evar:E↦q]] using gpi
pf₂: ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ2)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ2)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ2) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ2 p q wfψ2 wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ2 ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ2 ⊆ SvS → Γ ⊢i ψ2^[[evar:E↦p]] <---> ψ2^[[evar:E↦q]] using gpi

free_evars ψ2 ⊆ EvS
abstract ( simpl in ψ_sub_EvS; clear -ψ_sub_EvS; set_solver ).
Σ: Signature
sz: nat
Γ: Theory
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
E: evar
exdepth, mudepth: nat
gpi: ProofInfo
pf: Γ ⊢i p <---> q using gpi
IHsz: (ψ : Pattern) (wfψ : well_formed ψ), size' ψ ≤ sz → (EvS : EVarSet) (SvS : SVarSet), ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ p q wfψ wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ ⊆ SvS → Γ ⊢i ψ^[[evar:E↦p]] <---> ψ^[[evar:E↦q]] using gpi
ψ1, ψ2: Pattern
wfψ: well_formed (ψ1 ---> ψ2)
Hsz: S (size' ψ1 + size' ψ2) ≤ S sz
EvS: EVarSet
SvS: SVarSet
i':= ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (ψ1 ---> ψ2))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (ψ1 ---> ψ2))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (ψ1 ---> ψ2)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E (ψ1 ---> ψ2) p q wfψ wfp wfq): ProofInfo
pile: ProofInfoLe i' gpi
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
E_in_EvS: E ∈ EvS
ψ_sub_EvS: free_evars (ψ1 ---> ψ2) ⊆ EvS
p_sub_SvS: free_svars p ⊆ SvS
q_sub_SvS: free_svars q ⊆ SvS
ψ_sub_SvS: free_svars (ψ1 ---> ψ2) ⊆ SvS
HEinψ: E ∈ free_evars (ψ1 ---> ψ2)
wfψ1: well_formed ψ1 = true
H: size' ψ1 ≤ sz
wfψ2: well_formed ψ2 = true
H0: size' ψ2 ≤ sz
pf₁: Γ ⊢i ψ1^[[evar:E↦p]] <---> ψ1^[[evar:E↦q]] using gpi
pf₂: ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ2)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ2)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ2) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ2 p q wfψ2 wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ2 ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ2 ⊆ SvS → Γ ⊢i ψ2^[[evar:E↦p]] <---> ψ2^[[evar:E↦q]] using gpi

free_svars p ⊆ SvS
Σ: Signature
sz: nat
Γ: Theory
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
E: evar
exdepth, mudepth: nat
gpi: ProofInfo
pf: Γ ⊢i p <---> q using gpi
IHsz: (ψ : Pattern) (wfψ : well_formed ψ), size' ψ ≤ sz → (EvS : EVarSet) (SvS : SVarSet), ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ p q wfψ wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ ⊆ SvS → Γ ⊢i ψ^[[evar:E↦p]] <---> ψ^[[evar:E↦q]] using gpi
ψ1, ψ2: Pattern
wfψ: well_formed (ψ1 ---> ψ2)
Hsz: S (size' ψ1 + size' ψ2) ≤ S sz
EvS: EVarSet
SvS: SVarSet
i':= ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (ψ1 ---> ψ2))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (ψ1 ---> ψ2))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (ψ1 ---> ψ2)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E (ψ1 ---> ψ2) p q wfψ wfp wfq): ProofInfo
pile: ProofInfoLe i' gpi
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
E_in_EvS: E ∈ EvS
ψ_sub_EvS: free_evars (ψ1 ---> ψ2) ⊆ EvS
p_sub_SvS: free_svars p ⊆ SvS
q_sub_SvS: free_svars q ⊆ SvS
ψ_sub_SvS: free_svars (ψ1 ---> ψ2) ⊆ SvS
HEinψ: E ∈ free_evars (ψ1 ---> ψ2)
wfψ1: well_formed ψ1 = true
H: size' ψ1 ≤ sz
wfψ2: well_formed ψ2 = true
H0: size' ψ2 ≤ sz
pf₁: Γ ⊢i ψ1^[[evar:E↦p]] <---> ψ1^[[evar:E↦q]] using gpi
pf₂: ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ2)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ2)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ2) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ2 p q wfψ2 wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ2 ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ2 ⊆ SvS → Γ ⊢i ψ2^[[evar:E↦p]] <---> ψ2^[[evar:E↦q]] using gpi
free_svars q ⊆ SvS
Σ: Signature
sz: nat
Γ: Theory
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
E: evar
exdepth, mudepth: nat
gpi: ProofInfo
pf: Γ ⊢i p <---> q using gpi
IHsz: (ψ : Pattern) (wfψ : well_formed ψ), size' ψ ≤ sz → (EvS : EVarSet) (SvS : SVarSet), ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ p q wfψ wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ ⊆ SvS → Γ ⊢i ψ^[[evar:E↦p]] <---> ψ^[[evar:E↦q]] using gpi
ψ1, ψ2: Pattern
wfψ: well_formed (ψ1 ---> ψ2)
Hsz: S (size' ψ1 + size' ψ2) ≤ S sz
EvS: EVarSet
SvS: SVarSet
i':= ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (ψ1 ---> ψ2))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (ψ1 ---> ψ2))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (ψ1 ---> ψ2)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E (ψ1 ---> ψ2) p q wfψ wfp wfq): ProofInfo
pile: ProofInfoLe i' gpi
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
E_in_EvS: E ∈ EvS
ψ_sub_EvS: free_evars (ψ1 ---> ψ2) ⊆ EvS
p_sub_SvS: free_svars p ⊆ SvS
q_sub_SvS: free_svars q ⊆ SvS
ψ_sub_SvS: free_svars (ψ1 ---> ψ2) ⊆ SvS
HEinψ: E ∈ free_evars (ψ1 ---> ψ2)
wfψ1: well_formed ψ1 = true
H: size' ψ1 ≤ sz
wfψ2: well_formed ψ2 = true
H0: size' ψ2 ≤ sz
pf₁: Γ ⊢i ψ1^[[evar:E↦p]] <---> ψ1^[[evar:E↦q]] using gpi
pf₂: ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ2)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ2)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ2) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ2 p q wfψ2 wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ2 ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ2 ⊆ SvS → Γ ⊢i ψ2^[[evar:E↦p]] <---> ψ2^[[evar:E↦q]] using gpi
free_svars ψ2 ⊆ SvS
Σ: Signature
sz: nat
Γ: Theory
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
E: evar
exdepth, mudepth: nat
gpi: ProofInfo
pf: Γ ⊢i p <---> q using gpi
IHsz: (ψ : Pattern) (wfψ : well_formed ψ), size' ψ ≤ sz → (EvS : EVarSet) (SvS : SVarSet), ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ p q wfψ wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ ⊆ SvS → Γ ⊢i ψ^[[evar:E↦p]] <---> ψ^[[evar:E↦q]] using gpi
ψ1, ψ2: Pattern
wfψ: well_formed (ψ1 ---> ψ2)
Hsz: S (size' ψ1 + size' ψ2) ≤ S sz
EvS: EVarSet
SvS: SVarSet
i':= ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (ψ1 ---> ψ2))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (ψ1 ---> ψ2))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (ψ1 ---> ψ2)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E (ψ1 ---> ψ2) p q wfψ wfp wfq): ProofInfo
pile: ProofInfoLe i' gpi
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
E_in_EvS: E ∈ EvS
ψ_sub_EvS: free_evars (ψ1 ---> ψ2) ⊆ EvS
p_sub_SvS: free_svars p ⊆ SvS
q_sub_SvS: free_svars q ⊆ SvS
ψ_sub_SvS: free_svars (ψ1 ---> ψ2) ⊆ SvS
HEinψ: E ∈ free_evars (ψ1 ---> ψ2)
wfψ1: well_formed ψ1 = true
H: size' ψ1 ≤ sz
wfψ2: well_formed ψ2 = true
H0: size' ψ2 ≤ sz
pf₁: Γ ⊢i ψ1^[[evar:E↦p]] <---> ψ1^[[evar:E↦q]] using gpi
pf₂: Γ ⊢i ψ2^[[evar:E↦p]] <---> ψ2^[[evar:E↦q]] using gpi
Γ ⊢i (ψ1^[[evar:E↦p]] ---> ψ2^[[evar:E↦p]]) <---> (ψ1^[[evar:E↦q]] ---> ψ2^[[evar:E↦q]]) using gpi
Σ: Signature
sz: nat
Γ: Theory
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
E: evar
exdepth, mudepth: nat
gpi: ProofInfo
pf: Γ ⊢i p <---> q using gpi
IHsz: (ψ : Pattern) (wfψ : well_formed ψ), size' ψ ≤ sz → (EvS : EVarSet) (SvS : SVarSet), ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ p q wfψ wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ ⊆ SvS → Γ ⊢i ψ^[[evar:E↦p]] <---> ψ^[[evar:E↦q]] using gpi
ψ1, ψ2: Pattern
wfψ: well_formed (ψ1 ---> ψ2)
Hsz: S (size' ψ1 + size' ψ2) ≤ S sz
EvS: EVarSet
SvS: SVarSet
i':= ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (ψ1 ---> ψ2))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (ψ1 ---> ψ2))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (ψ1 ---> ψ2)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E (ψ1 ---> ψ2) p q wfψ wfp wfq): ProofInfo
pile: ProofInfoLe i' gpi
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
E_in_EvS: E ∈ EvS
ψ_sub_EvS: free_evars (ψ1 ---> ψ2) ⊆ EvS
p_sub_SvS: free_svars p ⊆ SvS
q_sub_SvS: free_svars q ⊆ SvS
ψ_sub_SvS: free_svars (ψ1 ---> ψ2) ⊆ SvS
HEinψ: E ∈ free_evars (ψ1 ---> ψ2)
wfψ1: well_formed ψ1 = true
H: size' ψ1 ≤ sz
wfψ2: well_formed ψ2 = true
H0: size' ψ2 ≤ sz
pf₁: Γ ⊢i ψ1^[[evar:E↦p]] <---> ψ1^[[evar:E↦q]] using gpi
pf₂: ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ2)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ2)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ2) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ2 p q wfψ2 wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ2 ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ2 ⊆ SvS → Γ ⊢i ψ2^[[evar:E↦p]] <---> ψ2^[[evar:E↦q]] using gpi

free_svars p ⊆ SvS
exact p_sub_SvS.
Σ: Signature
sz: nat
Γ: Theory
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
E: evar
exdepth, mudepth: nat
gpi: ProofInfo
pf: Γ ⊢i p <---> q using gpi
IHsz: (ψ : Pattern) (wfψ : well_formed ψ), size' ψ ≤ sz → (EvS : EVarSet) (SvS : SVarSet), ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ p q wfψ wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ ⊆ SvS → Γ ⊢i ψ^[[evar:E↦p]] <---> ψ^[[evar:E↦q]] using gpi
ψ1, ψ2: Pattern
wfψ: well_formed (ψ1 ---> ψ2)
Hsz: S (size' ψ1 + size' ψ2) ≤ S sz
EvS: EVarSet
SvS: SVarSet
i':= ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (ψ1 ---> ψ2))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (ψ1 ---> ψ2))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (ψ1 ---> ψ2)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E (ψ1 ---> ψ2) p q wfψ wfp wfq): ProofInfo
pile: ProofInfoLe i' gpi
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
E_in_EvS: E ∈ EvS
ψ_sub_EvS: free_evars (ψ1 ---> ψ2) ⊆ EvS
p_sub_SvS: free_svars p ⊆ SvS
q_sub_SvS: free_svars q ⊆ SvS
ψ_sub_SvS: free_svars (ψ1 ---> ψ2) ⊆ SvS
HEinψ: E ∈ free_evars (ψ1 ---> ψ2)
wfψ1: well_formed ψ1 = true
H: size' ψ1 ≤ sz
wfψ2: well_formed ψ2 = true
H0: size' ψ2 ≤ sz
pf₁: Γ ⊢i ψ1^[[evar:E↦p]] <---> ψ1^[[evar:E↦q]] using gpi
pf₂: ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ2)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ2)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ2) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ2 p q wfψ2 wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ2 ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ2 ⊆ SvS → Γ ⊢i ψ2^[[evar:E↦p]] <---> ψ2^[[evar:E↦q]] using gpi

free_svars q ⊆ SvS
Σ: Signature
sz: nat
Γ: Theory
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
E: evar
exdepth, mudepth: nat
gpi: ProofInfo
pf: Γ ⊢i p <---> q using gpi
IHsz: (ψ : Pattern) (wfψ : well_formed ψ), size' ψ ≤ sz → (EvS : EVarSet) (SvS : SVarSet), ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ p q wfψ wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ ⊆ SvS → Γ ⊢i ψ^[[evar:E↦p]] <---> ψ^[[evar:E↦q]] using gpi
ψ1, ψ2: Pattern
wfψ: well_formed (ψ1 ---> ψ2)
Hsz: S (size' ψ1 + size' ψ2) ≤ S sz
EvS: EVarSet
SvS: SVarSet
i':= ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (ψ1 ---> ψ2))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (ψ1 ---> ψ2))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (ψ1 ---> ψ2)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E (ψ1 ---> ψ2) p q wfψ wfp wfq): ProofInfo
pile: ProofInfoLe i' gpi
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
E_in_EvS: E ∈ EvS
ψ_sub_EvS: free_evars (ψ1 ---> ψ2) ⊆ EvS
p_sub_SvS: free_svars p ⊆ SvS
q_sub_SvS: free_svars q ⊆ SvS
ψ_sub_SvS: free_svars (ψ1 ---> ψ2) ⊆ SvS
HEinψ: E ∈ free_evars (ψ1 ---> ψ2)
wfψ1: well_formed ψ1 = true
H: size' ψ1 ≤ sz
wfψ2: well_formed ψ2 = true
H0: size' ψ2 ≤ sz
pf₁: Γ ⊢i ψ1^[[evar:E↦p]] <---> ψ1^[[evar:E↦q]] using gpi
pf₂: ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ2)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ2)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ2) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ2 p q wfψ2 wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ2 ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ2 ⊆ SvS → Γ ⊢i ψ2^[[evar:E↦p]] <---> ψ2^[[evar:E↦q]] using gpi
free_svars ψ2 ⊆ SvS
Σ: Signature
sz: nat
Γ: Theory
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
E: evar
exdepth, mudepth: nat
gpi: ProofInfo
pf: Γ ⊢i p <---> q using gpi
IHsz: (ψ : Pattern) (wfψ : well_formed ψ), size' ψ ≤ sz → (EvS : EVarSet) (SvS : SVarSet), ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ p q wfψ wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ ⊆ SvS → Γ ⊢i ψ^[[evar:E↦p]] <---> ψ^[[evar:E↦q]] using gpi
ψ1, ψ2: Pattern
wfψ: well_formed (ψ1 ---> ψ2)
Hsz: S (size' ψ1 + size' ψ2) ≤ S sz
EvS: EVarSet
SvS: SVarSet
i':= ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (ψ1 ---> ψ2))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (ψ1 ---> ψ2))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (ψ1 ---> ψ2)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E (ψ1 ---> ψ2) p q wfψ wfp wfq): ProofInfo
pile: ProofInfoLe i' gpi
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
E_in_EvS: E ∈ EvS
ψ_sub_EvS: free_evars (ψ1 ---> ψ2) ⊆ EvS
p_sub_SvS: free_svars p ⊆ SvS
q_sub_SvS: free_svars q ⊆ SvS
ψ_sub_SvS: free_svars (ψ1 ---> ψ2) ⊆ SvS
HEinψ: E ∈ free_evars (ψ1 ---> ψ2)
wfψ1: well_formed ψ1 = true
H: size' ψ1 ≤ sz
wfψ2: well_formed ψ2 = true
H0: size' ψ2 ≤ sz
pf₁: Γ ⊢i ψ1^[[evar:E↦p]] <---> ψ1^[[evar:E↦q]] using gpi
pf₂: Γ ⊢i ψ2^[[evar:E↦p]] <---> ψ2^[[evar:E↦q]] using gpi
Γ ⊢i (ψ1^[[evar:E↦p]] ---> ψ2^[[evar:E↦p]]) <---> (ψ1^[[evar:E↦q]] ---> ψ2^[[evar:E↦q]]) using gpi
Σ: Signature
sz: nat
Γ: Theory
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
E: evar
exdepth, mudepth: nat
gpi: ProofInfo
pf: Γ ⊢i p <---> q using gpi
IHsz: (ψ : Pattern) (wfψ : well_formed ψ), size' ψ ≤ sz → (EvS : EVarSet) (SvS : SVarSet), ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ p q wfψ wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ ⊆ SvS → Γ ⊢i ψ^[[evar:E↦p]] <---> ψ^[[evar:E↦q]] using gpi
ψ1, ψ2: Pattern
wfψ: well_formed (ψ1 ---> ψ2)
Hsz: S (size' ψ1 + size' ψ2) ≤ S sz
EvS: EVarSet
SvS: SVarSet
i':= ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (ψ1 ---> ψ2))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (ψ1 ---> ψ2))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (ψ1 ---> ψ2)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E (ψ1 ---> ψ2) p q wfψ wfp wfq): ProofInfo
pile: ProofInfoLe i' gpi
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
E_in_EvS: E ∈ EvS
ψ_sub_EvS: free_evars (ψ1 ---> ψ2) ⊆ EvS
p_sub_SvS: free_svars p ⊆ SvS
q_sub_SvS: free_svars q ⊆ SvS
ψ_sub_SvS: free_svars (ψ1 ---> ψ2) ⊆ SvS
HEinψ: E ∈ free_evars (ψ1 ---> ψ2)
wfψ1: well_formed ψ1 = true
H: size' ψ1 ≤ sz
wfψ2: well_formed ψ2 = true
H0: size' ψ2 ≤ sz
pf₁: Γ ⊢i ψ1^[[evar:E↦p]] <---> ψ1^[[evar:E↦q]] using gpi
pf₂: ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ2)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ2)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ2) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ2 p q wfψ2 wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ2 ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ2 ⊆ SvS → Γ ⊢i ψ2^[[evar:E↦p]] <---> ψ2^[[evar:E↦q]] using gpi

free_svars q ⊆ SvS
exact q_sub_SvS.
Σ: Signature
sz: nat
Γ: Theory
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
E: evar
exdepth, mudepth: nat
gpi: ProofInfo
pf: Γ ⊢i p <---> q using gpi
IHsz: (ψ : Pattern) (wfψ : well_formed ψ), size' ψ ≤ sz → (EvS : EVarSet) (SvS : SVarSet), ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ p q wfψ wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ ⊆ SvS → Γ ⊢i ψ^[[evar:E↦p]] <---> ψ^[[evar:E↦q]] using gpi
ψ1, ψ2: Pattern
wfψ: well_formed (ψ1 ---> ψ2)
Hsz: S (size' ψ1 + size' ψ2) ≤ S sz
EvS: EVarSet
SvS: SVarSet
i':= ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (ψ1 ---> ψ2))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (ψ1 ---> ψ2))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (ψ1 ---> ψ2)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E (ψ1 ---> ψ2) p q wfψ wfp wfq): ProofInfo
pile: ProofInfoLe i' gpi
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
E_in_EvS: E ∈ EvS
ψ_sub_EvS: free_evars (ψ1 ---> ψ2) ⊆ EvS
p_sub_SvS: free_svars p ⊆ SvS
q_sub_SvS: free_svars q ⊆ SvS
ψ_sub_SvS: free_svars (ψ1 ---> ψ2) ⊆ SvS
HEinψ: E ∈ free_evars (ψ1 ---> ψ2)
wfψ1: well_formed ψ1 = true
H: size' ψ1 ≤ sz
wfψ2: well_formed ψ2 = true
H0: size' ψ2 ≤ sz
pf₁: Γ ⊢i ψ1^[[evar:E↦p]] <---> ψ1^[[evar:E↦q]] using gpi
pf₂: ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ2)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ2)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ2) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ2 p q wfψ2 wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ2 ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ2 ⊆ SvS → Γ ⊢i ψ2^[[evar:E↦p]] <---> ψ2^[[evar:E↦q]] using gpi

free_svars ψ2 ⊆ SvS
Σ: Signature
sz: nat
Γ: Theory
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
E: evar
exdepth, mudepth: nat
gpi: ProofInfo
pf: Γ ⊢i p <---> q using gpi
IHsz: (ψ : Pattern) (wfψ : well_formed ψ), size' ψ ≤ sz → (EvS : EVarSet) (SvS : SVarSet), ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ p q wfψ wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ ⊆ SvS → Γ ⊢i ψ^[[evar:E↦p]] <---> ψ^[[evar:E↦q]] using gpi
ψ1, ψ2: Pattern
wfψ: well_formed (ψ1 ---> ψ2)
Hsz: S (size' ψ1 + size' ψ2) ≤ S sz
EvS: EVarSet
SvS: SVarSet
i':= ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (ψ1 ---> ψ2))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (ψ1 ---> ψ2))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (ψ1 ---> ψ2)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E (ψ1 ---> ψ2) p q wfψ wfp wfq): ProofInfo
pile: ProofInfoLe i' gpi
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
E_in_EvS: E ∈ EvS
ψ_sub_EvS: free_evars (ψ1 ---> ψ2) ⊆ EvS
p_sub_SvS: free_svars p ⊆ SvS
q_sub_SvS: free_svars q ⊆ SvS
ψ_sub_SvS: free_svars (ψ1 ---> ψ2) ⊆ SvS
HEinψ: E ∈ free_evars (ψ1 ---> ψ2)
wfψ1: well_formed ψ1 = true
H: size' ψ1 ≤ sz
wfψ2: well_formed ψ2 = true
H0: size' ψ2 ≤ sz
pf₁: Γ ⊢i ψ1^[[evar:E↦p]] <---> ψ1^[[evar:E↦q]] using gpi
pf₂: Γ ⊢i ψ2^[[evar:E↦p]] <---> ψ2^[[evar:E↦q]] using gpi
Γ ⊢i (ψ1^[[evar:E↦p]] ---> ψ2^[[evar:E↦p]]) <---> (ψ1^[[evar:E↦q]] ---> ψ2^[[evar:E↦q]]) using gpi
Σ: Signature
sz: nat
Γ: Theory
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
E: evar
exdepth, mudepth: nat
gpi: ProofInfo
pf: Γ ⊢i p <---> q using gpi
IHsz: (ψ : Pattern) (wfψ : well_formed ψ), size' ψ ≤ sz → (EvS : EVarSet) (SvS : SVarSet), ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ p q wfψ wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ ⊆ SvS → Γ ⊢i ψ^[[evar:E↦p]] <---> ψ^[[evar:E↦q]] using gpi
ψ1, ψ2: Pattern
wfψ: well_formed (ψ1 ---> ψ2)
Hsz: S (size' ψ1 + size' ψ2) ≤ S sz
EvS: EVarSet
SvS: SVarSet
i':= ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (ψ1 ---> ψ2))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (ψ1 ---> ψ2))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (ψ1 ---> ψ2)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E (ψ1 ---> ψ2) p q wfψ wfp wfq): ProofInfo
pile: ProofInfoLe i' gpi
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
E_in_EvS: E ∈ EvS
ψ_sub_EvS: free_evars (ψ1 ---> ψ2) ⊆ EvS
p_sub_SvS: free_svars p ⊆ SvS
q_sub_SvS: free_svars q ⊆ SvS
ψ_sub_SvS: free_svars (ψ1 ---> ψ2) ⊆ SvS
HEinψ: E ∈ free_evars (ψ1 ---> ψ2)
wfψ1: well_formed ψ1 = true
H: size' ψ1 ≤ sz
wfψ2: well_formed ψ2 = true
H0: size' ψ2 ≤ sz
pf₁: Γ ⊢i ψ1^[[evar:E↦p]] <---> ψ1^[[evar:E↦q]] using gpi
pf₂: ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ2)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ2)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ2) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ2 p q wfψ2 wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ2 ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ2 ⊆ SvS → Γ ⊢i ψ2^[[evar:E↦p]] <---> ψ2^[[evar:E↦q]] using gpi

free_svars ψ2 ⊆ SvS
abstract ( simpl in ψ_sub_SvS; clear -ψ_sub_SvS; set_solver ).
Σ: Signature
sz: nat
Γ: Theory
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
E: evar
exdepth, mudepth: nat
gpi: ProofInfo
pf: Γ ⊢i p <---> q using gpi
IHsz: (ψ : Pattern) (wfψ : well_formed ψ), size' ψ ≤ sz → (EvS : EVarSet) (SvS : SVarSet), ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ p q wfψ wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ ⊆ SvS → Γ ⊢i ψ^[[evar:E↦p]] <---> ψ^[[evar:E↦q]] using gpi
ψ1, ψ2: Pattern
wfψ: well_formed (ψ1 ---> ψ2)
Hsz: S (size' ψ1 + size' ψ2) ≤ S sz
EvS: EVarSet
SvS: SVarSet
i':= ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (ψ1 ---> ψ2))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (ψ1 ---> ψ2))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (ψ1 ---> ψ2)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E (ψ1 ---> ψ2) p q wfψ wfp wfq): ProofInfo
pile: ProofInfoLe i' gpi
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
E_in_EvS: E ∈ EvS
ψ_sub_EvS: free_evars (ψ1 ---> ψ2) ⊆ EvS
p_sub_SvS: free_svars p ⊆ SvS
q_sub_SvS: free_svars q ⊆ SvS
ψ_sub_SvS: free_svars (ψ1 ---> ψ2) ⊆ SvS
HEinψ: E ∈ free_evars (ψ1 ---> ψ2)
wfψ1: well_formed ψ1 = true
H: size' ψ1 ≤ sz
wfψ2: well_formed ψ2 = true
H0: size' ψ2 ≤ sz
pf₁: Γ ⊢i ψ1^[[evar:E↦p]] <---> ψ1^[[evar:E↦q]] using gpi
pf₂: Γ ⊢i ψ2^[[evar:E↦p]] <---> ψ2^[[evar:E↦q]] using gpi

Γ ⊢i (ψ1^[[evar:E↦p]] ---> ψ2^[[evar:E↦p]]) <---> (ψ1^[[evar:E↦q]] ---> ψ2^[[evar:E↦q]]) using gpi
Σ: Signature
sz: nat
Γ: Theory
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
E: evar
exdepth, mudepth: nat
gpi: ProofInfo
pf: Γ ⊢i p <---> q using gpi
IHsz: (ψ : Pattern) (wfψ : well_formed ψ), size' ψ ≤ sz → (EvS : EVarSet) (SvS : SVarSet), ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ p q wfψ wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ ⊆ SvS → Γ ⊢i ψ^[[evar:E↦p]] <---> ψ^[[evar:E↦q]] using gpi
ψ1, ψ2: Pattern
wfψ: well_formed (ψ1 ---> ψ2)
Hsz: S (size' ψ1 + size' ψ2) ≤ S sz
EvS: EVarSet
SvS: SVarSet
i':= ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (ψ1 ---> ψ2))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (ψ1 ---> ψ2))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (ψ1 ---> ψ2)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E (ψ1 ---> ψ2) p q wfψ wfp wfq): ProofInfo
pile: ProofInfoLe i' gpi
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
E_in_EvS: E ∈ EvS
ψ_sub_EvS: free_evars (ψ1 ---> ψ2) ⊆ EvS
p_sub_SvS: free_svars p ⊆ SvS
q_sub_SvS: free_svars q ⊆ SvS
ψ_sub_SvS: free_svars (ψ1 ---> ψ2) ⊆ SvS
HEinψ: E ∈ free_evars (ψ1 ---> ψ2)
wfψ1: well_formed ψ1 = true
H: size' ψ1 ≤ sz
wfψ2: well_formed ψ2 = true
H0: size' ψ2 ≤ sz
pf₁: Γ ⊢i ψ1^[[evar:E↦p]] <---> ψ1^[[evar:E↦q]] using gpi
pf₂: Γ ⊢i ψ2^[[evar:E↦p]] <---> ψ2^[[evar:E↦q]] using gpi

well_formed ψ1^[[evar:E↦p]] = true
Σ: Signature
sz: nat
Γ: Theory
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
E: evar
exdepth, mudepth: nat
gpi: ProofInfo
pf: Γ ⊢i p <---> q using gpi
IHsz: (ψ : Pattern) (wfψ : well_formed ψ), size' ψ ≤ sz → (EvS : EVarSet) (SvS : SVarSet), ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ p q wfψ wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ ⊆ SvS → Γ ⊢i ψ^[[evar:E↦p]] <---> ψ^[[evar:E↦q]] using gpi
ψ1, ψ2: Pattern
wfψ: well_formed (ψ1 ---> ψ2)
Hsz: S (size' ψ1 + size' ψ2) ≤ S sz
EvS: EVarSet
SvS: SVarSet
i':= ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (ψ1 ---> ψ2))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (ψ1 ---> ψ2))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (ψ1 ---> ψ2)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E (ψ1 ---> ψ2) p q wfψ wfp wfq): ProofInfo
pile: ProofInfoLe i' gpi
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
E_in_EvS: E ∈ EvS
ψ_sub_EvS: free_evars (ψ1 ---> ψ2) ⊆ EvS
p_sub_SvS: free_svars p ⊆ SvS
q_sub_SvS: free_svars q ⊆ SvS
ψ_sub_SvS: free_svars (ψ1 ---> ψ2) ⊆ SvS
HEinψ: E ∈ free_evars (ψ1 ---> ψ2)
wfψ1: well_formed ψ1 = true
H: size' ψ1 ≤ sz
wfψ2: well_formed ψ2 = true
H0: size' ψ2 ≤ sz
pf₁: Γ ⊢i ψ1^[[evar:E↦p]] <---> ψ1^[[evar:E↦q]] using gpi
pf₂: Γ ⊢i ψ2^[[evar:E↦p]] <---> ψ2^[[evar:E↦q]] using gpi
well_formed ψ2^[[evar:E↦p]] = true
Σ: Signature
sz: nat
Γ: Theory
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
E: evar
exdepth, mudepth: nat
gpi: ProofInfo
pf: Γ ⊢i p <---> q using gpi
IHsz: (ψ : Pattern) (wfψ : well_formed ψ), size' ψ ≤ sz → (EvS : EVarSet) (SvS : SVarSet), ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ p q wfψ wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ ⊆ SvS → Γ ⊢i ψ^[[evar:E↦p]] <---> ψ^[[evar:E↦q]] using gpi
ψ1, ψ2: Pattern
wfψ: well_formed (ψ1 ---> ψ2)
Hsz: S (size' ψ1 + size' ψ2) ≤ S sz
EvS: EVarSet
SvS: SVarSet
i':= ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (ψ1 ---> ψ2))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (ψ1 ---> ψ2))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (ψ1 ---> ψ2)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E (ψ1 ---> ψ2) p q wfψ wfp wfq): ProofInfo
pile: ProofInfoLe i' gpi
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
E_in_EvS: E ∈ EvS
ψ_sub_EvS: free_evars (ψ1 ---> ψ2) ⊆ EvS
p_sub_SvS: free_svars p ⊆ SvS
q_sub_SvS: free_svars q ⊆ SvS
ψ_sub_SvS: free_svars (ψ1 ---> ψ2) ⊆ SvS
HEinψ: E ∈ free_evars (ψ1 ---> ψ2)
wfψ1: well_formed ψ1 = true
H: size' ψ1 ≤ sz
wfψ2: well_formed ψ2 = true
H0: size' ψ2 ≤ sz
pf₁: Γ ⊢i ψ1^[[evar:E↦p]] <---> ψ1^[[evar:E↦q]] using gpi
pf₂: Γ ⊢i ψ2^[[evar:E↦p]] <---> ψ2^[[evar:E↦q]] using gpi
well_formed ψ1^[[evar:E↦q]] = true
Σ: Signature
sz: nat
Γ: Theory
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
E: evar
exdepth, mudepth: nat
gpi: ProofInfo
pf: Γ ⊢i p <---> q using gpi
IHsz: (ψ : Pattern) (wfψ : well_formed ψ), size' ψ ≤ sz → (EvS : EVarSet) (SvS : SVarSet), ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ p q wfψ wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ ⊆ SvS → Γ ⊢i ψ^[[evar:E↦p]] <---> ψ^[[evar:E↦q]] using gpi
ψ1, ψ2: Pattern
wfψ: well_formed (ψ1 ---> ψ2)
Hsz: S (size' ψ1 + size' ψ2) ≤ S sz
EvS: EVarSet
SvS: SVarSet
i':= ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (ψ1 ---> ψ2))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (ψ1 ---> ψ2))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (ψ1 ---> ψ2)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E (ψ1 ---> ψ2) p q wfψ wfp wfq): ProofInfo
pile: ProofInfoLe i' gpi
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
E_in_EvS: E ∈ EvS
ψ_sub_EvS: free_evars (ψ1 ---> ψ2) ⊆ EvS
p_sub_SvS: free_svars p ⊆ SvS
q_sub_SvS: free_svars q ⊆ SvS
ψ_sub_SvS: free_svars (ψ1 ---> ψ2) ⊆ SvS
HEinψ: E ∈ free_evars (ψ1 ---> ψ2)
wfψ1: well_formed ψ1 = true
H: size' ψ1 ≤ sz
wfψ2: well_formed ψ2 = true
H0: size' ψ2 ≤ sz
pf₁: Γ ⊢i ψ1^[[evar:E↦p]] <---> ψ1^[[evar:E↦q]] using gpi
pf₂: Γ ⊢i ψ2^[[evar:E↦p]] <---> ψ2^[[evar:E↦q]] using gpi
well_formed ψ2^[[evar:E↦q]] = true
Σ: Signature
sz: nat
Γ: Theory
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
E: evar
exdepth, mudepth: nat
gpi: ProofInfo
pf: Γ ⊢i p <---> q using gpi
IHsz: (ψ : Pattern) (wfψ : well_formed ψ), size' ψ ≤ sz → (EvS : EVarSet) (SvS : SVarSet), ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ p q wfψ wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ ⊆ SvS → Γ ⊢i ψ^[[evar:E↦p]] <---> ψ^[[evar:E↦q]] using gpi
ψ1, ψ2: Pattern
wfψ: well_formed (ψ1 ---> ψ2)
Hsz: S (size' ψ1 + size' ψ2) ≤ S sz
EvS: EVarSet
SvS: SVarSet
i':= ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (ψ1 ---> ψ2))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (ψ1 ---> ψ2))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (ψ1 ---> ψ2)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E (ψ1 ---> ψ2) p q wfψ wfp wfq): ProofInfo
pile: ProofInfoLe i' gpi
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
E_in_EvS: E ∈ EvS
ψ_sub_EvS: free_evars (ψ1 ---> ψ2) ⊆ EvS
p_sub_SvS: free_svars p ⊆ SvS
q_sub_SvS: free_svars q ⊆ SvS
ψ_sub_SvS: free_svars (ψ1 ---> ψ2) ⊆ SvS
HEinψ: E ∈ free_evars (ψ1 ---> ψ2)
wfψ1: well_formed ψ1 = true
H: size' ψ1 ≤ sz
wfψ2: well_formed ψ2 = true
H0: size' ψ2 ≤ sz
pf₁: Γ ⊢i ψ1^[[evar:E↦p]] <---> ψ1^[[evar:E↦q]] using gpi
pf₂: Γ ⊢i ψ2^[[evar:E↦p]] <---> ψ2^[[evar:E↦q]] using gpi
Γ ⊢i ψ1^[[evar:E↦p]] <---> ψ1^[[evar:E↦q]] using gpi
Σ: Signature
sz: nat
Γ: Theory
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
E: evar
exdepth, mudepth: nat
gpi: ProofInfo
pf: Γ ⊢i p <---> q using gpi
IHsz: (ψ : Pattern) (wfψ : well_formed ψ), size' ψ ≤ sz → (EvS : EVarSet) (SvS : SVarSet), ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ p q wfψ wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ ⊆ SvS → Γ ⊢i ψ^[[evar:E↦p]] <---> ψ^[[evar:E↦q]] using gpi
ψ1, ψ2: Pattern
wfψ: well_formed (ψ1 ---> ψ2)
Hsz: S (size' ψ1 + size' ψ2) ≤ S sz
EvS: EVarSet
SvS: SVarSet
i':= ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (ψ1 ---> ψ2))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (ψ1 ---> ψ2))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (ψ1 ---> ψ2)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E (ψ1 ---> ψ2) p q wfψ wfp wfq): ProofInfo
pile: ProofInfoLe i' gpi
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
E_in_EvS: E ∈ EvS
ψ_sub_EvS: free_evars (ψ1 ---> ψ2) ⊆ EvS
p_sub_SvS: free_svars p ⊆ SvS
q_sub_SvS: free_svars q ⊆ SvS
ψ_sub_SvS: free_svars (ψ1 ---> ψ2) ⊆ SvS
HEinψ: E ∈ free_evars (ψ1 ---> ψ2)
wfψ1: well_formed ψ1 = true
H: size' ψ1 ≤ sz
wfψ2: well_formed ψ2 = true
H0: size' ψ2 ≤ sz
pf₁: Γ ⊢i ψ1^[[evar:E↦p]] <---> ψ1^[[evar:E↦q]] using gpi
pf₂: Γ ⊢i ψ2^[[evar:E↦p]] <---> ψ2^[[evar:E↦q]] using gpi
Γ ⊢i ψ2^[[evar:E↦p]] <---> ψ2^[[evar:E↦q]] using gpi
Σ: Signature
sz: nat
Γ: Theory
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
E: evar
exdepth, mudepth: nat
gpi: ProofInfo
pf: Γ ⊢i p <---> q using gpi
IHsz: (ψ : Pattern) (wfψ : well_formed ψ), size' ψ ≤ sz → (EvS : EVarSet) (SvS : SVarSet), ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ p q wfψ wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ ⊆ SvS → Γ ⊢i ψ^[[evar:E↦p]] <---> ψ^[[evar:E↦q]] using gpi
ψ1, ψ2: Pattern
wfψ: well_formed (ψ1 ---> ψ2)
Hsz: S (size' ψ1 + size' ψ2) ≤ S sz
EvS: EVarSet
SvS: SVarSet
i':= ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (ψ1 ---> ψ2))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (ψ1 ---> ψ2))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (ψ1 ---> ψ2)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E (ψ1 ---> ψ2) p q wfψ wfp wfq): ProofInfo
pile: ProofInfoLe i' gpi
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
E_in_EvS: E ∈ EvS
ψ_sub_EvS: free_evars (ψ1 ---> ψ2) ⊆ EvS
p_sub_SvS: free_svars p ⊆ SvS
q_sub_SvS: free_svars q ⊆ SvS
ψ_sub_SvS: free_svars (ψ1 ---> ψ2) ⊆ SvS
HEinψ: E ∈ free_evars (ψ1 ---> ψ2)
wfψ1: well_formed ψ1 = true
H: size' ψ1 ≤ sz
wfψ2: well_formed ψ2 = true
H0: size' ψ2 ≤ sz
pf₁: Γ ⊢i ψ1^[[evar:E↦p]] <---> ψ1^[[evar:E↦q]] using gpi
pf₂: Γ ⊢i ψ2^[[evar:E↦p]] <---> ψ2^[[evar:E↦q]] using gpi

well_formed ψ1^[[evar:E↦p]] = true
Σ: Signature
sz: nat
Γ: Theory
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
E: evar
exdepth, mudepth: nat
gpi: ProofInfo
pf: Γ ⊢i p <---> q using gpi
IHsz: (ψ : Pattern) (wfψ : well_formed ψ), size' ψ ≤ sz → (EvS : EVarSet) (SvS : SVarSet), ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ p q wfψ wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ ⊆ SvS → Γ ⊢i ψ^[[evar:E↦p]] <---> ψ^[[evar:E↦q]] using gpi
ψ1, ψ2: Pattern
wfψ: well_formed (ψ1 ---> ψ2)
Hsz: S (size' ψ1 + size' ψ2) ≤ S sz
EvS: EVarSet
SvS: SVarSet
i':= ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (ψ1 ---> ψ2))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (ψ1 ---> ψ2))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (ψ1 ---> ψ2)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E (ψ1 ---> ψ2) p q wfψ wfp wfq): ProofInfo
pile: ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (ψ1 ---> ψ2))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (ψ1 ---> ψ2))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (ψ1 ---> ψ2)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E (ψ1 ---> ψ2) p q wfψ wfp wfq)) gpi
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
E_in_EvS: E ∈ EvS
ψ_sub_EvS: free_evars (ψ1 ---> ψ2) ⊆ EvS
p_sub_SvS: free_svars p ⊆ SvS
q_sub_SvS: free_svars q ⊆ SvS
ψ_sub_SvS: free_svars (ψ1 ---> ψ2) ⊆ SvS
HEinψ: E ∈ free_evars (ψ1 ---> ψ2)
wfψ1: well_formed ψ1 = true
H: size' ψ1 ≤ sz
wfψ2: well_formed ψ2 = true
H0: size' ψ2 ≤ sz
pf₁: Γ ⊢i ψ1^[[evar:E↦p]] <---> ψ1^[[evar:E↦q]] using gpi
pf₂: Γ ⊢i ψ2^[[evar:E↦p]] <---> ψ2^[[evar:E↦q]] using gpi

well_formed ψ1^[[evar:E↦p]] = true
Σ: Signature
sz: nat
Γ: Theory
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
E: evar
exdepth, mudepth: nat
gpi: ProofInfo
pf: Γ ⊢i p <---> q using gpi
IHsz: (ψ : Pattern) (wfψ : well_formed ψ), size' ψ ≤ sz → (EvS : EVarSet) (SvS : SVarSet), ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ p q wfψ wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ ⊆ SvS → Γ ⊢i ψ^[[evar:E↦p]] <---> ψ^[[evar:E↦q]] using gpi
ψ1, ψ2: Pattern
wfψ: well_formed (ψ1 ---> ψ2)
Hsz: S (size' ψ1 + size' ψ2) ≤ S sz
EvS: EVarSet
SvS: SVarSet
pile: ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (ψ1 ---> ψ2))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (ψ1 ---> ψ2))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (ψ1 ---> ψ2)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E (ψ1 ---> ψ2) p q wfψ wfp wfq)) gpi
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
E_in_EvS: E ∈ EvS
ψ_sub_EvS: free_evars (ψ1 ---> ψ2) ⊆ EvS
p_sub_SvS: free_svars p ⊆ SvS
q_sub_SvS: free_svars q ⊆ SvS
ψ_sub_SvS: free_svars (ψ1 ---> ψ2) ⊆ SvS
HEinψ: E ∈ free_evars (ψ1 ---> ψ2)
wfψ1: well_formed ψ1 = true
H: size' ψ1 ≤ sz
wfψ2: well_formed ψ2 = true
H0: size' ψ2 ≤ sz
pf₁: Γ ⊢i ψ1^[[evar:E↦p]] <---> ψ1^[[evar:E↦q]] using gpi
pf₂: Γ ⊢i ψ2^[[evar:E↦p]] <---> ψ2^[[evar:E↦q]] using gpi

well_formed ψ1^[[evar:E↦p]] = true
abstract (wf_auto2).
Σ: Signature
sz: nat
Γ: Theory
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
E: evar
exdepth, mudepth: nat
gpi: ProofInfo
pf: Γ ⊢i p <---> q using gpi
IHsz: (ψ : Pattern) (wfψ : well_formed ψ), size' ψ ≤ sz → (EvS : EVarSet) (SvS : SVarSet), ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ p q wfψ wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ ⊆ SvS → Γ ⊢i ψ^[[evar:E↦p]] <---> ψ^[[evar:E↦q]] using gpi
ψ1, ψ2: Pattern
wfψ: well_formed (ψ1 ---> ψ2)
Hsz: S (size' ψ1 + size' ψ2) ≤ S sz
EvS: EVarSet
SvS: SVarSet
i':= ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (ψ1 ---> ψ2))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (ψ1 ---> ψ2))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (ψ1 ---> ψ2)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E (ψ1 ---> ψ2) p q wfψ wfp wfq): ProofInfo
pile: ProofInfoLe i' gpi
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
E_in_EvS: E ∈ EvS
ψ_sub_EvS: free_evars (ψ1 ---> ψ2) ⊆ EvS
p_sub_SvS: free_svars p ⊆ SvS
q_sub_SvS: free_svars q ⊆ SvS
ψ_sub_SvS: free_svars (ψ1 ---> ψ2) ⊆ SvS
HEinψ: E ∈ free_evars (ψ1 ---> ψ2)
wfψ1: well_formed ψ1 = true
H: size' ψ1 ≤ sz
wfψ2: well_formed ψ2 = true
H0: size' ψ2 ≤ sz
pf₁: Γ ⊢i ψ1^[[evar:E↦p]] <---> ψ1^[[evar:E↦q]] using gpi
pf₂: Γ ⊢i ψ2^[[evar:E↦p]] <---> ψ2^[[evar:E↦q]] using gpi

well_formed ψ2^[[evar:E↦p]] = true
Σ: Signature
sz: nat
Γ: Theory
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
E: evar
exdepth, mudepth: nat
gpi: ProofInfo
pf: Γ ⊢i p <---> q using gpi
IHsz: (ψ : Pattern) (wfψ : well_formed ψ), size' ψ ≤ sz → (EvS : EVarSet) (SvS : SVarSet), ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ p q wfψ wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ ⊆ SvS → Γ ⊢i ψ^[[evar:E↦p]] <---> ψ^[[evar:E↦q]] using gpi
ψ1, ψ2: Pattern
wfψ: well_formed (ψ1 ---> ψ2)
Hsz: S (size' ψ1 + size' ψ2) ≤ S sz
EvS: EVarSet
SvS: SVarSet
i':= ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (ψ1 ---> ψ2))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (ψ1 ---> ψ2))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (ψ1 ---> ψ2)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E (ψ1 ---> ψ2) p q wfψ wfp wfq): ProofInfo
pile: ProofInfoLe i' gpi
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
E_in_EvS: E ∈ EvS
ψ_sub_EvS: free_evars (ψ1 ---> ψ2) ⊆ EvS
p_sub_SvS: free_svars p ⊆ SvS
q_sub_SvS: free_svars q ⊆ SvS
ψ_sub_SvS: free_svars (ψ1 ---> ψ2) ⊆ SvS
HEinψ: E ∈ free_evars (ψ1 ---> ψ2)
wfψ1: well_formed ψ1 = true
H: size' ψ1 ≤ sz
wfψ2: well_formed ψ2 = true
H0: size' ψ2 ≤ sz
pf₁: Γ ⊢i ψ1^[[evar:E↦p]] <---> ψ1^[[evar:E↦q]] using gpi
pf₂: Γ ⊢i ψ2^[[evar:E↦p]] <---> ψ2^[[evar:E↦q]] using gpi
well_formed ψ1^[[evar:E↦q]] = true
Σ: Signature
sz: nat
Γ: Theory
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
E: evar
exdepth, mudepth: nat
gpi: ProofInfo
pf: Γ ⊢i p <---> q using gpi
IHsz: (ψ : Pattern) (wfψ : well_formed ψ), size' ψ ≤ sz → (EvS : EVarSet) (SvS : SVarSet), ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ p q wfψ wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ ⊆ SvS → Γ ⊢i ψ^[[evar:E↦p]] <---> ψ^[[evar:E↦q]] using gpi
ψ1, ψ2: Pattern
wfψ: well_formed (ψ1 ---> ψ2)
Hsz: S (size' ψ1 + size' ψ2) ≤ S sz
EvS: EVarSet
SvS: SVarSet
i':= ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (ψ1 ---> ψ2))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (ψ1 ---> ψ2))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (ψ1 ---> ψ2)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E (ψ1 ---> ψ2) p q wfψ wfp wfq): ProofInfo
pile: ProofInfoLe i' gpi
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
E_in_EvS: E ∈ EvS
ψ_sub_EvS: free_evars (ψ1 ---> ψ2) ⊆ EvS
p_sub_SvS: free_svars p ⊆ SvS
q_sub_SvS: free_svars q ⊆ SvS
ψ_sub_SvS: free_svars (ψ1 ---> ψ2) ⊆ SvS
HEinψ: E ∈ free_evars (ψ1 ---> ψ2)
wfψ1: well_formed ψ1 = true
H: size' ψ1 ≤ sz
wfψ2: well_formed ψ2 = true
H0: size' ψ2 ≤ sz
pf₁: Γ ⊢i ψ1^[[evar:E↦p]] <---> ψ1^[[evar:E↦q]] using gpi
pf₂: Γ ⊢i ψ2^[[evar:E↦p]] <---> ψ2^[[evar:E↦q]] using gpi
well_formed ψ2^[[evar:E↦q]] = true
Σ: Signature
sz: nat
Γ: Theory
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
E: evar
exdepth, mudepth: nat
gpi: ProofInfo
pf: Γ ⊢i p <---> q using gpi
IHsz: (ψ : Pattern) (wfψ : well_formed ψ), size' ψ ≤ sz → (EvS : EVarSet) (SvS : SVarSet), ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ p q wfψ wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ ⊆ SvS → Γ ⊢i ψ^[[evar:E↦p]] <---> ψ^[[evar:E↦q]] using gpi
ψ1, ψ2: Pattern
wfψ: well_formed (ψ1 ---> ψ2)
Hsz: S (size' ψ1 + size' ψ2) ≤ S sz
EvS: EVarSet
SvS: SVarSet
i':= ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (ψ1 ---> ψ2))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (ψ1 ---> ψ2))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (ψ1 ---> ψ2)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E (ψ1 ---> ψ2) p q wfψ wfp wfq): ProofInfo
pile: ProofInfoLe i' gpi
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
E_in_EvS: E ∈ EvS
ψ_sub_EvS: free_evars (ψ1 ---> ψ2) ⊆ EvS
p_sub_SvS: free_svars p ⊆ SvS
q_sub_SvS: free_svars q ⊆ SvS
ψ_sub_SvS: free_svars (ψ1 ---> ψ2) ⊆ SvS
HEinψ: E ∈ free_evars (ψ1 ---> ψ2)
wfψ1: well_formed ψ1 = true
H: size' ψ1 ≤ sz
wfψ2: well_formed ψ2 = true
H0: size' ψ2 ≤ sz
pf₁: Γ ⊢i ψ1^[[evar:E↦p]] <---> ψ1^[[evar:E↦q]] using gpi
pf₂: Γ ⊢i ψ2^[[evar:E↦p]] <---> ψ2^[[evar:E↦q]] using gpi
Γ ⊢i ψ1^[[evar:E↦p]] <---> ψ1^[[evar:E↦q]] using gpi
Σ: Signature
sz: nat
Γ: Theory
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
E: evar
exdepth, mudepth: nat
gpi: ProofInfo
pf: Γ ⊢i p <---> q using gpi
IHsz: (ψ : Pattern) (wfψ : well_formed ψ), size' ψ ≤ sz → (EvS : EVarSet) (SvS : SVarSet), ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ p q wfψ wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ ⊆ SvS → Γ ⊢i ψ^[[evar:E↦p]] <---> ψ^[[evar:E↦q]] using gpi
ψ1, ψ2: Pattern
wfψ: well_formed (ψ1 ---> ψ2)
Hsz: S (size' ψ1 + size' ψ2) ≤ S sz
EvS: EVarSet
SvS: SVarSet
i':= ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (ψ1 ---> ψ2))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (ψ1 ---> ψ2))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (ψ1 ---> ψ2)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E (ψ1 ---> ψ2) p q wfψ wfp wfq): ProofInfo
pile: ProofInfoLe i' gpi
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
E_in_EvS: E ∈ EvS
ψ_sub_EvS: free_evars (ψ1 ---> ψ2) ⊆ EvS
p_sub_SvS: free_svars p ⊆ SvS
q_sub_SvS: free_svars q ⊆ SvS
ψ_sub_SvS: free_svars (ψ1 ---> ψ2) ⊆ SvS
HEinψ: E ∈ free_evars (ψ1 ---> ψ2)
wfψ1: well_formed ψ1 = true
H: size' ψ1 ≤ sz
wfψ2: well_formed ψ2 = true
H0: size' ψ2 ≤ sz
pf₁: Γ ⊢i ψ1^[[evar:E↦p]] <---> ψ1^[[evar:E↦q]] using gpi
pf₂: Γ ⊢i ψ2^[[evar:E↦p]] <---> ψ2^[[evar:E↦q]] using gpi
Γ ⊢i ψ2^[[evar:E↦p]] <---> ψ2^[[evar:E↦q]] using gpi
Σ: Signature
sz: nat
Γ: Theory
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
E: evar
exdepth, mudepth: nat
gpi: ProofInfo
pf: Γ ⊢i p <---> q using gpi
IHsz: (ψ : Pattern) (wfψ : well_formed ψ), size' ψ ≤ sz → (EvS : EVarSet) (SvS : SVarSet), ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ p q wfψ wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ ⊆ SvS → Γ ⊢i ψ^[[evar:E↦p]] <---> ψ^[[evar:E↦q]] using gpi
ψ1, ψ2: Pattern
wfψ: well_formed (ψ1 ---> ψ2)
Hsz: S (size' ψ1 + size' ψ2) ≤ S sz
EvS: EVarSet
SvS: SVarSet
i':= ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (ψ1 ---> ψ2))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (ψ1 ---> ψ2))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (ψ1 ---> ψ2)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E (ψ1 ---> ψ2) p q wfψ wfp wfq): ProofInfo
pile: ProofInfoLe i' gpi
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
E_in_EvS: E ∈ EvS
ψ_sub_EvS: free_evars (ψ1 ---> ψ2) ⊆ EvS
p_sub_SvS: free_svars p ⊆ SvS
q_sub_SvS: free_svars q ⊆ SvS
ψ_sub_SvS: free_svars (ψ1 ---> ψ2) ⊆ SvS
HEinψ: E ∈ free_evars (ψ1 ---> ψ2)
wfψ1: well_formed ψ1 = true
H: size' ψ1 ≤ sz
wfψ2: well_formed ψ2 = true
H0: size' ψ2 ≤ sz
pf₁: Γ ⊢i ψ1^[[evar:E↦p]] <---> ψ1^[[evar:E↦q]] using gpi
pf₂: Γ ⊢i ψ2^[[evar:E↦p]] <---> ψ2^[[evar:E↦q]] using gpi

well_formed ψ2^[[evar:E↦p]] = true
Σ: Signature
sz: nat
Γ: Theory
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
E: evar
exdepth, mudepth: nat
gpi: ProofInfo
pf: Γ ⊢i p <---> q using gpi
IHsz: (ψ : Pattern) (wfψ : well_formed ψ), size' ψ ≤ sz → (EvS : EVarSet) (SvS : SVarSet), ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ p q wfψ wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ ⊆ SvS → Γ ⊢i ψ^[[evar:E↦p]] <---> ψ^[[evar:E↦q]] using gpi
ψ1, ψ2: Pattern
wfψ: well_formed (ψ1 ---> ψ2)
Hsz: S (size' ψ1 + size' ψ2) ≤ S sz
EvS: EVarSet
SvS: SVarSet
i':= ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (ψ1 ---> ψ2))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (ψ1 ---> ψ2))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (ψ1 ---> ψ2)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E (ψ1 ---> ψ2) p q wfψ wfp wfq): ProofInfo
pile: ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (ψ1 ---> ψ2))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (ψ1 ---> ψ2))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (ψ1 ---> ψ2)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E (ψ1 ---> ψ2) p q wfψ wfp wfq)) gpi
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
E_in_EvS: E ∈ EvS
ψ_sub_EvS: free_evars (ψ1 ---> ψ2) ⊆ EvS
p_sub_SvS: free_svars p ⊆ SvS
q_sub_SvS: free_svars q ⊆ SvS
ψ_sub_SvS: free_svars (ψ1 ---> ψ2) ⊆ SvS
HEinψ: E ∈ free_evars (ψ1 ---> ψ2)
wfψ1: well_formed ψ1 = true
H: size' ψ1 ≤ sz
wfψ2: well_formed ψ2 = true
H0: size' ψ2 ≤ sz
pf₁: Γ ⊢i ψ1^[[evar:E↦p]] <---> ψ1^[[evar:E↦q]] using gpi
pf₂: Γ ⊢i ψ2^[[evar:E↦p]] <---> ψ2^[[evar:E↦q]] using gpi

well_formed ψ2^[[evar:E↦p]] = true
Σ: Signature
sz: nat
Γ: Theory
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
E: evar
exdepth, mudepth: nat
gpi: ProofInfo
pf: Γ ⊢i p <---> q using gpi
IHsz: (ψ : Pattern) (wfψ : well_formed ψ), size' ψ ≤ sz → (EvS : EVarSet) (SvS : SVarSet), ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ p q wfψ wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ ⊆ SvS → Γ ⊢i ψ^[[evar:E↦p]] <---> ψ^[[evar:E↦q]] using gpi
ψ1, ψ2: Pattern
wfψ: well_formed (ψ1 ---> ψ2)
Hsz: S (size' ψ1 + size' ψ2) ≤ S sz
EvS: EVarSet
SvS: SVarSet
pile: ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (ψ1 ---> ψ2))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (ψ1 ---> ψ2))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (ψ1 ---> ψ2)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E (ψ1 ---> ψ2) p q wfψ wfp wfq)) gpi
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
E_in_EvS: E ∈ EvS
ψ_sub_EvS: free_evars (ψ1 ---> ψ2) ⊆ EvS
p_sub_SvS: free_svars p ⊆ SvS
q_sub_SvS: free_svars q ⊆ SvS
ψ_sub_SvS: free_svars (ψ1 ---> ψ2) ⊆ SvS
HEinψ: E ∈ free_evars (ψ1 ---> ψ2)
wfψ1: well_formed ψ1 = true
H: size' ψ1 ≤ sz
wfψ2: well_formed ψ2 = true
H0: size' ψ2 ≤ sz
pf₁: Γ ⊢i ψ1^[[evar:E↦p]] <---> ψ1^[[evar:E↦q]] using gpi
pf₂: Γ ⊢i ψ2^[[evar:E↦p]] <---> ψ2^[[evar:E↦q]] using gpi

well_formed ψ2^[[evar:E↦p]] = true
abstract (wf_auto2).
Σ: Signature
sz: nat
Γ: Theory
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
E: evar
exdepth, mudepth: nat
gpi: ProofInfo
pf: Γ ⊢i p <---> q using gpi
IHsz: (ψ : Pattern) (wfψ : well_formed ψ), size' ψ ≤ sz → (EvS : EVarSet) (SvS : SVarSet), ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ p q wfψ wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ ⊆ SvS → Γ ⊢i ψ^[[evar:E↦p]] <---> ψ^[[evar:E↦q]] using gpi
ψ1, ψ2: Pattern
wfψ: well_formed (ψ1 ---> ψ2)
Hsz: S (size' ψ1 + size' ψ2) ≤ S sz
EvS: EVarSet
SvS: SVarSet
i':= ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (ψ1 ---> ψ2))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (ψ1 ---> ψ2))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (ψ1 ---> ψ2)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E (ψ1 ---> ψ2) p q wfψ wfp wfq): ProofInfo
pile: ProofInfoLe i' gpi
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
E_in_EvS: E ∈ EvS
ψ_sub_EvS: free_evars (ψ1 ---> ψ2) ⊆ EvS
p_sub_SvS: free_svars p ⊆ SvS
q_sub_SvS: free_svars q ⊆ SvS
ψ_sub_SvS: free_svars (ψ1 ---> ψ2) ⊆ SvS
HEinψ: E ∈ free_evars (ψ1 ---> ψ2)
wfψ1: well_formed ψ1 = true
H: size' ψ1 ≤ sz
wfψ2: well_formed ψ2 = true
H0: size' ψ2 ≤ sz
pf₁: Γ ⊢i ψ1^[[evar:E↦p]] <---> ψ1^[[evar:E↦q]] using gpi
pf₂: Γ ⊢i ψ2^[[evar:E↦p]] <---> ψ2^[[evar:E↦q]] using gpi

well_formed ψ1^[[evar:E↦q]] = true
Σ: Signature
sz: nat
Γ: Theory
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
E: evar
exdepth, mudepth: nat
gpi: ProofInfo
pf: Γ ⊢i p <---> q using gpi
IHsz: (ψ : Pattern) (wfψ : well_formed ψ), size' ψ ≤ sz → (EvS : EVarSet) (SvS : SVarSet), ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ p q wfψ wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ ⊆ SvS → Γ ⊢i ψ^[[evar:E↦p]] <---> ψ^[[evar:E↦q]] using gpi
ψ1, ψ2: Pattern
wfψ: well_formed (ψ1 ---> ψ2)
Hsz: S (size' ψ1 + size' ψ2) ≤ S sz
EvS: EVarSet
SvS: SVarSet
i':= ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (ψ1 ---> ψ2))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (ψ1 ---> ψ2))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (ψ1 ---> ψ2)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E (ψ1 ---> ψ2) p q wfψ wfp wfq): ProofInfo
pile: ProofInfoLe i' gpi
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
E_in_EvS: E ∈ EvS
ψ_sub_EvS: free_evars (ψ1 ---> ψ2) ⊆ EvS
p_sub_SvS: free_svars p ⊆ SvS
q_sub_SvS: free_svars q ⊆ SvS
ψ_sub_SvS: free_svars (ψ1 ---> ψ2) ⊆ SvS
HEinψ: E ∈ free_evars (ψ1 ---> ψ2)
wfψ1: well_formed ψ1 = true
H: size' ψ1 ≤ sz
wfψ2: well_formed ψ2 = true
H0: size' ψ2 ≤ sz
pf₁: Γ ⊢i ψ1^[[evar:E↦p]] <---> ψ1^[[evar:E↦q]] using gpi
pf₂: Γ ⊢i ψ2^[[evar:E↦p]] <---> ψ2^[[evar:E↦q]] using gpi
well_formed ψ2^[[evar:E↦q]] = true
Σ: Signature
sz: nat
Γ: Theory
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
E: evar
exdepth, mudepth: nat
gpi: ProofInfo
pf: Γ ⊢i p <---> q using gpi
IHsz: (ψ : Pattern) (wfψ : well_formed ψ), size' ψ ≤ sz → (EvS : EVarSet) (SvS : SVarSet), ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ p q wfψ wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ ⊆ SvS → Γ ⊢i ψ^[[evar:E↦p]] <---> ψ^[[evar:E↦q]] using gpi
ψ1, ψ2: Pattern
wfψ: well_formed (ψ1 ---> ψ2)
Hsz: S (size' ψ1 + size' ψ2) ≤ S sz
EvS: EVarSet
SvS: SVarSet
i':= ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (ψ1 ---> ψ2))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (ψ1 ---> ψ2))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (ψ1 ---> ψ2)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E (ψ1 ---> ψ2) p q wfψ wfp wfq): ProofInfo
pile: ProofInfoLe i' gpi
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
E_in_EvS: E ∈ EvS
ψ_sub_EvS: free_evars (ψ1 ---> ψ2) ⊆ EvS
p_sub_SvS: free_svars p ⊆ SvS
q_sub_SvS: free_svars q ⊆ SvS
ψ_sub_SvS: free_svars (ψ1 ---> ψ2) ⊆ SvS
HEinψ: E ∈ free_evars (ψ1 ---> ψ2)
wfψ1: well_formed ψ1 = true
H: size' ψ1 ≤ sz
wfψ2: well_formed ψ2 = true
H0: size' ψ2 ≤ sz
pf₁: Γ ⊢i ψ1^[[evar:E↦p]] <---> ψ1^[[evar:E↦q]] using gpi
pf₂: Γ ⊢i ψ2^[[evar:E↦p]] <---> ψ2^[[evar:E↦q]] using gpi
Γ ⊢i ψ1^[[evar:E↦p]] <---> ψ1^[[evar:E↦q]] using gpi
Σ: Signature
sz: nat
Γ: Theory
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
E: evar
exdepth, mudepth: nat
gpi: ProofInfo
pf: Γ ⊢i p <---> q using gpi
IHsz: (ψ : Pattern) (wfψ : well_formed ψ), size' ψ ≤ sz → (EvS : EVarSet) (SvS : SVarSet), ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ p q wfψ wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ ⊆ SvS → Γ ⊢i ψ^[[evar:E↦p]] <---> ψ^[[evar:E↦q]] using gpi
ψ1, ψ2: Pattern
wfψ: well_formed (ψ1 ---> ψ2)
Hsz: S (size' ψ1 + size' ψ2) ≤ S sz
EvS: EVarSet
SvS: SVarSet
i':= ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (ψ1 ---> ψ2))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (ψ1 ---> ψ2))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (ψ1 ---> ψ2)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E (ψ1 ---> ψ2) p q wfψ wfp wfq): ProofInfo
pile: ProofInfoLe i' gpi
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
E_in_EvS: E ∈ EvS
ψ_sub_EvS: free_evars (ψ1 ---> ψ2) ⊆ EvS
p_sub_SvS: free_svars p ⊆ SvS
q_sub_SvS: free_svars q ⊆ SvS
ψ_sub_SvS: free_svars (ψ1 ---> ψ2) ⊆ SvS
HEinψ: E ∈ free_evars (ψ1 ---> ψ2)
wfψ1: well_formed ψ1 = true
H: size' ψ1 ≤ sz
wfψ2: well_formed ψ2 = true
H0: size' ψ2 ≤ sz
pf₁: Γ ⊢i ψ1^[[evar:E↦p]] <---> ψ1^[[evar:E↦q]] using gpi
pf₂: Γ ⊢i ψ2^[[evar:E↦p]] <---> ψ2^[[evar:E↦q]] using gpi
Γ ⊢i ψ2^[[evar:E↦p]] <---> ψ2^[[evar:E↦q]] using gpi
Σ: Signature
sz: nat
Γ: Theory
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
E: evar
exdepth, mudepth: nat
gpi: ProofInfo
pf: Γ ⊢i p <---> q using gpi
IHsz: (ψ : Pattern) (wfψ : well_formed ψ), size' ψ ≤ sz → (EvS : EVarSet) (SvS : SVarSet), ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ p q wfψ wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ ⊆ SvS → Γ ⊢i ψ^[[evar:E↦p]] <---> ψ^[[evar:E↦q]] using gpi
ψ1, ψ2: Pattern
wfψ: well_formed (ψ1 ---> ψ2)
Hsz: S (size' ψ1 + size' ψ2) ≤ S sz
EvS: EVarSet
SvS: SVarSet
i':= ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (ψ1 ---> ψ2))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (ψ1 ---> ψ2))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (ψ1 ---> ψ2)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E (ψ1 ---> ψ2) p q wfψ wfp wfq): ProofInfo
pile: ProofInfoLe i' gpi
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
E_in_EvS: E ∈ EvS
ψ_sub_EvS: free_evars (ψ1 ---> ψ2) ⊆ EvS
p_sub_SvS: free_svars p ⊆ SvS
q_sub_SvS: free_svars q ⊆ SvS
ψ_sub_SvS: free_svars (ψ1 ---> ψ2) ⊆ SvS
HEinψ: E ∈ free_evars (ψ1 ---> ψ2)
wfψ1: well_formed ψ1 = true
H: size' ψ1 ≤ sz
wfψ2: well_formed ψ2 = true
H0: size' ψ2 ≤ sz
pf₁: Γ ⊢i ψ1^[[evar:E↦p]] <---> ψ1^[[evar:E↦q]] using gpi
pf₂: Γ ⊢i ψ2^[[evar:E↦p]] <---> ψ2^[[evar:E↦q]] using gpi

well_formed ψ1^[[evar:E↦q]] = true
Σ: Signature
sz: nat
Γ: Theory
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
E: evar
exdepth, mudepth: nat
gpi: ProofInfo
pf: Γ ⊢i p <---> q using gpi
IHsz: (ψ : Pattern) (wfψ : well_formed ψ), size' ψ ≤ sz → (EvS : EVarSet) (SvS : SVarSet), ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ p q wfψ wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ ⊆ SvS → Γ ⊢i ψ^[[evar:E↦p]] <---> ψ^[[evar:E↦q]] using gpi
ψ1, ψ2: Pattern
wfψ: well_formed (ψ1 ---> ψ2)
Hsz: S (size' ψ1 + size' ψ2) ≤ S sz
EvS: EVarSet
SvS: SVarSet
i':= ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (ψ1 ---> ψ2))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (ψ1 ---> ψ2))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (ψ1 ---> ψ2)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E (ψ1 ---> ψ2) p q wfψ wfp wfq): ProofInfo
pile: ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (ψ1 ---> ψ2))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (ψ1 ---> ψ2))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (ψ1 ---> ψ2)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E (ψ1 ---> ψ2) p q wfψ wfp wfq)) gpi
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
E_in_EvS: E ∈ EvS
ψ_sub_EvS: free_evars (ψ1 ---> ψ2) ⊆ EvS
p_sub_SvS: free_svars p ⊆ SvS
q_sub_SvS: free_svars q ⊆ SvS
ψ_sub_SvS: free_svars (ψ1 ---> ψ2) ⊆ SvS
HEinψ: E ∈ free_evars (ψ1 ---> ψ2)
wfψ1: well_formed ψ1 = true
H: size' ψ1 ≤ sz
wfψ2: well_formed ψ2 = true
H0: size' ψ2 ≤ sz
pf₁: Γ ⊢i ψ1^[[evar:E↦p]] <---> ψ1^[[evar:E↦q]] using gpi
pf₂: Γ ⊢i ψ2^[[evar:E↦p]] <---> ψ2^[[evar:E↦q]] using gpi

well_formed ψ1^[[evar:E↦q]] = true
Σ: Signature
sz: nat
Γ: Theory
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
E: evar
exdepth, mudepth: nat
gpi: ProofInfo
pf: Γ ⊢i p <---> q using gpi
IHsz: (ψ : Pattern) (wfψ : well_formed ψ), size' ψ ≤ sz → (EvS : EVarSet) (SvS : SVarSet), ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ p q wfψ wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ ⊆ SvS → Γ ⊢i ψ^[[evar:E↦p]] <---> ψ^[[evar:E↦q]] using gpi
ψ1, ψ2: Pattern
wfψ: well_formed (ψ1 ---> ψ2)
Hsz: S (size' ψ1 + size' ψ2) ≤ S sz
EvS: EVarSet
SvS: SVarSet
pile: ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (ψ1 ---> ψ2))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (ψ1 ---> ψ2))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (ψ1 ---> ψ2)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E (ψ1 ---> ψ2) p q wfψ wfp wfq)) gpi
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
E_in_EvS: E ∈ EvS
ψ_sub_EvS: free_evars (ψ1 ---> ψ2) ⊆ EvS
p_sub_SvS: free_svars p ⊆ SvS
q_sub_SvS: free_svars q ⊆ SvS
ψ_sub_SvS: free_svars (ψ1 ---> ψ2) ⊆ SvS
HEinψ: E ∈ free_evars (ψ1 ---> ψ2)
wfψ1: well_formed ψ1 = true
H: size' ψ1 ≤ sz
wfψ2: well_formed ψ2 = true
H0: size' ψ2 ≤ sz
pf₁: Γ ⊢i ψ1^[[evar:E↦p]] <---> ψ1^[[evar:E↦q]] using gpi
pf₂: Γ ⊢i ψ2^[[evar:E↦p]] <---> ψ2^[[evar:E↦q]] using gpi

well_formed ψ1^[[evar:E↦q]] = true
abstract (wf_auto2).
Σ: Signature
sz: nat
Γ: Theory
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
E: evar
exdepth, mudepth: nat
gpi: ProofInfo
pf: Γ ⊢i p <---> q using gpi
IHsz: (ψ : Pattern) (wfψ : well_formed ψ), size' ψ ≤ sz → (EvS : EVarSet) (SvS : SVarSet), ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ p q wfψ wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ ⊆ SvS → Γ ⊢i ψ^[[evar:E↦p]] <---> ψ^[[evar:E↦q]] using gpi
ψ1, ψ2: Pattern
wfψ: well_formed (ψ1 ---> ψ2)
Hsz: S (size' ψ1 + size' ψ2) ≤ S sz
EvS: EVarSet
SvS: SVarSet
i':= ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (ψ1 ---> ψ2))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (ψ1 ---> ψ2))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (ψ1 ---> ψ2)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E (ψ1 ---> ψ2) p q wfψ wfp wfq): ProofInfo
pile: ProofInfoLe i' gpi
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
E_in_EvS: E ∈ EvS
ψ_sub_EvS: free_evars (ψ1 ---> ψ2) ⊆ EvS
p_sub_SvS: free_svars p ⊆ SvS
q_sub_SvS: free_svars q ⊆ SvS
ψ_sub_SvS: free_svars (ψ1 ---> ψ2) ⊆ SvS
HEinψ: E ∈ free_evars (ψ1 ---> ψ2)
wfψ1: well_formed ψ1 = true
H: size' ψ1 ≤ sz
wfψ2: well_formed ψ2 = true
H0: size' ψ2 ≤ sz
pf₁: Γ ⊢i ψ1^[[evar:E↦p]] <---> ψ1^[[evar:E↦q]] using gpi
pf₂: Γ ⊢i ψ2^[[evar:E↦p]] <---> ψ2^[[evar:E↦q]] using gpi

well_formed ψ2^[[evar:E↦q]] = true
Σ: Signature
sz: nat
Γ: Theory
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
E: evar
exdepth, mudepth: nat
gpi: ProofInfo
pf: Γ ⊢i p <---> q using gpi
IHsz: (ψ : Pattern) (wfψ : well_formed ψ), size' ψ ≤ sz → (EvS : EVarSet) (SvS : SVarSet), ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ p q wfψ wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ ⊆ SvS → Γ ⊢i ψ^[[evar:E↦p]] <---> ψ^[[evar:E↦q]] using gpi
ψ1, ψ2: Pattern
wfψ: well_formed (ψ1 ---> ψ2)
Hsz: S (size' ψ1 + size' ψ2) ≤ S sz
EvS: EVarSet
SvS: SVarSet
i':= ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (ψ1 ---> ψ2))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (ψ1 ---> ψ2))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (ψ1 ---> ψ2)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E (ψ1 ---> ψ2) p q wfψ wfp wfq): ProofInfo
pile: ProofInfoLe i' gpi
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
E_in_EvS: E ∈ EvS
ψ_sub_EvS: free_evars (ψ1 ---> ψ2) ⊆ EvS
p_sub_SvS: free_svars p ⊆ SvS
q_sub_SvS: free_svars q ⊆ SvS
ψ_sub_SvS: free_svars (ψ1 ---> ψ2) ⊆ SvS
HEinψ: E ∈ free_evars (ψ1 ---> ψ2)
wfψ1: well_formed ψ1 = true
H: size' ψ1 ≤ sz
wfψ2: well_formed ψ2 = true
H0: size' ψ2 ≤ sz
pf₁: Γ ⊢i ψ1^[[evar:E↦p]] <---> ψ1^[[evar:E↦q]] using gpi
pf₂: Γ ⊢i ψ2^[[evar:E↦p]] <---> ψ2^[[evar:E↦q]] using gpi
Γ ⊢i ψ1^[[evar:E↦p]] <---> ψ1^[[evar:E↦q]] using gpi
Σ: Signature
sz: nat
Γ: Theory
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
E: evar
exdepth, mudepth: nat
gpi: ProofInfo
pf: Γ ⊢i p <---> q using gpi
IHsz: (ψ : Pattern) (wfψ : well_formed ψ), size' ψ ≤ sz → (EvS : EVarSet) (SvS : SVarSet), ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ p q wfψ wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ ⊆ SvS → Γ ⊢i ψ^[[evar:E↦p]] <---> ψ^[[evar:E↦q]] using gpi
ψ1, ψ2: Pattern
wfψ: well_formed (ψ1 ---> ψ2)
Hsz: S (size' ψ1 + size' ψ2) ≤ S sz
EvS: EVarSet
SvS: SVarSet
i':= ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (ψ1 ---> ψ2))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (ψ1 ---> ψ2))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (ψ1 ---> ψ2)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E (ψ1 ---> ψ2) p q wfψ wfp wfq): ProofInfo
pile: ProofInfoLe i' gpi
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
E_in_EvS: E ∈ EvS
ψ_sub_EvS: free_evars (ψ1 ---> ψ2) ⊆ EvS
p_sub_SvS: free_svars p ⊆ SvS
q_sub_SvS: free_svars q ⊆ SvS
ψ_sub_SvS: free_svars (ψ1 ---> ψ2) ⊆ SvS
HEinψ: E ∈ free_evars (ψ1 ---> ψ2)
wfψ1: well_formed ψ1 = true
H: size' ψ1 ≤ sz
wfψ2: well_formed ψ2 = true
H0: size' ψ2 ≤ sz
pf₁: Γ ⊢i ψ1^[[evar:E↦p]] <---> ψ1^[[evar:E↦q]] using gpi
pf₂: Γ ⊢i ψ2^[[evar:E↦p]] <---> ψ2^[[evar:E↦q]] using gpi
Γ ⊢i ψ2^[[evar:E↦p]] <---> ψ2^[[evar:E↦q]] using gpi
Σ: Signature
sz: nat
Γ: Theory
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
E: evar
exdepth, mudepth: nat
gpi: ProofInfo
pf: Γ ⊢i p <---> q using gpi
IHsz: (ψ : Pattern) (wfψ : well_formed ψ), size' ψ ≤ sz → (EvS : EVarSet) (SvS : SVarSet), ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ p q wfψ wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ ⊆ SvS → Γ ⊢i ψ^[[evar:E↦p]] <---> ψ^[[evar:E↦q]] using gpi
ψ1, ψ2: Pattern
wfψ: well_formed (ψ1 ---> ψ2)
Hsz: S (size' ψ1 + size' ψ2) ≤ S sz
EvS: EVarSet
SvS: SVarSet
i':= ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (ψ1 ---> ψ2))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (ψ1 ---> ψ2))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (ψ1 ---> ψ2)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E (ψ1 ---> ψ2) p q wfψ wfp wfq): ProofInfo
pile: ProofInfoLe i' gpi
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
E_in_EvS: E ∈ EvS
ψ_sub_EvS: free_evars (ψ1 ---> ψ2) ⊆ EvS
p_sub_SvS: free_svars p ⊆ SvS
q_sub_SvS: free_svars q ⊆ SvS
ψ_sub_SvS: free_svars (ψ1 ---> ψ2) ⊆ SvS
HEinψ: E ∈ free_evars (ψ1 ---> ψ2)
wfψ1: well_formed ψ1 = true
H: size' ψ1 ≤ sz
wfψ2: well_formed ψ2 = true
H0: size' ψ2 ≤ sz
pf₁: Γ ⊢i ψ1^[[evar:E↦p]] <---> ψ1^[[evar:E↦q]] using gpi
pf₂: Γ ⊢i ψ2^[[evar:E↦p]] <---> ψ2^[[evar:E↦q]] using gpi

well_formed ψ2^[[evar:E↦q]] = true
Σ: Signature
sz: nat
Γ: Theory
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
E: evar
exdepth, mudepth: nat
gpi: ProofInfo
pf: Γ ⊢i p <---> q using gpi
IHsz: (ψ : Pattern) (wfψ : well_formed ψ), size' ψ ≤ sz → (EvS : EVarSet) (SvS : SVarSet), ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ p q wfψ wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ ⊆ SvS → Γ ⊢i ψ^[[evar:E↦p]] <---> ψ^[[evar:E↦q]] using gpi
ψ1, ψ2: Pattern
wfψ: well_formed (ψ1 ---> ψ2)
Hsz: S (size' ψ1 + size' ψ2) ≤ S sz
EvS: EVarSet
SvS: SVarSet
i':= ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (ψ1 ---> ψ2))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (ψ1 ---> ψ2))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (ψ1 ---> ψ2)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E (ψ1 ---> ψ2) p q wfψ wfp wfq): ProofInfo
pile: ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (ψ1 ---> ψ2))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (ψ1 ---> ψ2))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (ψ1 ---> ψ2)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E (ψ1 ---> ψ2) p q wfψ wfp wfq)) gpi
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
E_in_EvS: E ∈ EvS
ψ_sub_EvS: free_evars (ψ1 ---> ψ2) ⊆ EvS
p_sub_SvS: free_svars p ⊆ SvS
q_sub_SvS: free_svars q ⊆ SvS
ψ_sub_SvS: free_svars (ψ1 ---> ψ2) ⊆ SvS
HEinψ: E ∈ free_evars (ψ1 ---> ψ2)
wfψ1: well_formed ψ1 = true
H: size' ψ1 ≤ sz
wfψ2: well_formed ψ2 = true
H0: size' ψ2 ≤ sz
pf₁: Γ ⊢i ψ1^[[evar:E↦p]] <---> ψ1^[[evar:E↦q]] using gpi
pf₂: Γ ⊢i ψ2^[[evar:E↦p]] <---> ψ2^[[evar:E↦q]] using gpi

well_formed ψ2^[[evar:E↦q]] = true
Σ: Signature
sz: nat
Γ: Theory
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
E: evar
exdepth, mudepth: nat
gpi: ProofInfo
pf: Γ ⊢i p <---> q using gpi
IHsz: (ψ : Pattern) (wfψ : well_formed ψ), size' ψ ≤ sz → (EvS : EVarSet) (SvS : SVarSet), ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ p q wfψ wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ ⊆ SvS → Γ ⊢i ψ^[[evar:E↦p]] <---> ψ^[[evar:E↦q]] using gpi
ψ1, ψ2: Pattern
wfψ: well_formed (ψ1 ---> ψ2)
Hsz: S (size' ψ1 + size' ψ2) ≤ S sz
EvS: EVarSet
SvS: SVarSet
pile: ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (ψ1 ---> ψ2))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (ψ1 ---> ψ2))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (ψ1 ---> ψ2)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E (ψ1 ---> ψ2) p q wfψ wfp wfq)) gpi
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
E_in_EvS: E ∈ EvS
ψ_sub_EvS: free_evars (ψ1 ---> ψ2) ⊆ EvS
p_sub_SvS: free_svars p ⊆ SvS
q_sub_SvS: free_svars q ⊆ SvS
ψ_sub_SvS: free_svars (ψ1 ---> ψ2) ⊆ SvS
HEinψ: E ∈ free_evars (ψ1 ---> ψ2)
wfψ1: well_formed ψ1 = true
H: size' ψ1 ≤ sz
wfψ2: well_formed ψ2 = true
H0: size' ψ2 ≤ sz
pf₁: Γ ⊢i ψ1^[[evar:E↦p]] <---> ψ1^[[evar:E↦q]] using gpi
pf₂: Γ ⊢i ψ2^[[evar:E↦p]] <---> ψ2^[[evar:E↦q]] using gpi

well_formed ψ2^[[evar:E↦q]] = true
abstract (wf_auto2).
Σ: Signature
sz: nat
Γ: Theory
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
E: evar
exdepth, mudepth: nat
gpi: ProofInfo
pf: Γ ⊢i p <---> q using gpi
IHsz: (ψ : Pattern) (wfψ : well_formed ψ), size' ψ ≤ sz → (EvS : EVarSet) (SvS : SVarSet), ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ p q wfψ wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ ⊆ SvS → Γ ⊢i ψ^[[evar:E↦p]] <---> ψ^[[evar:E↦q]] using gpi
ψ1, ψ2: Pattern
wfψ: well_formed (ψ1 ---> ψ2)
Hsz: S (size' ψ1 + size' ψ2) ≤ S sz
EvS: EVarSet
SvS: SVarSet
i':= ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (ψ1 ---> ψ2))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (ψ1 ---> ψ2))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (ψ1 ---> ψ2)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E (ψ1 ---> ψ2) p q wfψ wfp wfq): ProofInfo
pile: ProofInfoLe i' gpi
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
E_in_EvS: E ∈ EvS
ψ_sub_EvS: free_evars (ψ1 ---> ψ2) ⊆ EvS
p_sub_SvS: free_svars p ⊆ SvS
q_sub_SvS: free_svars q ⊆ SvS
ψ_sub_SvS: free_svars (ψ1 ---> ψ2) ⊆ SvS
HEinψ: E ∈ free_evars (ψ1 ---> ψ2)
wfψ1: well_formed ψ1 = true
H: size' ψ1 ≤ sz
wfψ2: well_formed ψ2 = true
H0: size' ψ2 ≤ sz
pf₁: Γ ⊢i ψ1^[[evar:E↦p]] <---> ψ1^[[evar:E↦q]] using gpi
pf₂: Γ ⊢i ψ2^[[evar:E↦p]] <---> ψ2^[[evar:E↦q]] using gpi

Γ ⊢i ψ1^[[evar:E↦p]] <---> ψ1^[[evar:E↦q]] using gpi
Σ: Signature
sz: nat
Γ: Theory
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
E: evar
exdepth, mudepth: nat
gpi: ProofInfo
pf: Γ ⊢i p <---> q using gpi
IHsz: (ψ : Pattern) (wfψ : well_formed ψ), size' ψ ≤ sz → (EvS : EVarSet) (SvS : SVarSet), ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ p q wfψ wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ ⊆ SvS → Γ ⊢i ψ^[[evar:E↦p]] <---> ψ^[[evar:E↦q]] using gpi
ψ1, ψ2: Pattern
wfψ: well_formed (ψ1 ---> ψ2)
Hsz: S (size' ψ1 + size' ψ2) ≤ S sz
EvS: EVarSet
SvS: SVarSet
i':= ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (ψ1 ---> ψ2))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (ψ1 ---> ψ2))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (ψ1 ---> ψ2)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E (ψ1 ---> ψ2) p q wfψ wfp wfq): ProofInfo
pile: ProofInfoLe i' gpi
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
E_in_EvS: E ∈ EvS
ψ_sub_EvS: free_evars (ψ1 ---> ψ2) ⊆ EvS
p_sub_SvS: free_svars p ⊆ SvS
q_sub_SvS: free_svars q ⊆ SvS
ψ_sub_SvS: free_svars (ψ1 ---> ψ2) ⊆ SvS
HEinψ: E ∈ free_evars (ψ1 ---> ψ2)
wfψ1: well_formed ψ1 = true
H: size' ψ1 ≤ sz
wfψ2: well_formed ψ2 = true
H0: size' ψ2 ≤ sz
pf₁: Γ ⊢i ψ1^[[evar:E↦p]] <---> ψ1^[[evar:E↦q]] using gpi
pf₂: Γ ⊢i ψ2^[[evar:E↦p]] <---> ψ2^[[evar:E↦q]] using gpi
Γ ⊢i ψ2^[[evar:E↦p]] <---> ψ2^[[evar:E↦q]] using gpi
Σ: Signature
sz: nat
Γ: Theory
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
E: evar
exdepth, mudepth: nat
gpi: ProofInfo
pf: Γ ⊢i p <---> q using gpi
IHsz: (ψ : Pattern) (wfψ : well_formed ψ), size' ψ ≤ sz → (EvS : EVarSet) (SvS : SVarSet), ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ p q wfψ wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ ⊆ SvS → Γ ⊢i ψ^[[evar:E↦p]] <---> ψ^[[evar:E↦q]] using gpi
ψ1, ψ2: Pattern
wfψ: well_formed (ψ1 ---> ψ2)
Hsz: S (size' ψ1 + size' ψ2) ≤ S sz
EvS: EVarSet
SvS: SVarSet
i':= ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (ψ1 ---> ψ2))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (ψ1 ---> ψ2))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (ψ1 ---> ψ2)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E (ψ1 ---> ψ2) p q wfψ wfp wfq): ProofInfo
pile: ProofInfoLe i' gpi
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
E_in_EvS: E ∈ EvS
ψ_sub_EvS: free_evars (ψ1 ---> ψ2) ⊆ EvS
p_sub_SvS: free_svars p ⊆ SvS
q_sub_SvS: free_svars q ⊆ SvS
ψ_sub_SvS: free_svars (ψ1 ---> ψ2) ⊆ SvS
HEinψ: E ∈ free_evars (ψ1 ---> ψ2)
wfψ1: well_formed ψ1 = true
H: size' ψ1 ≤ sz
wfψ2: well_formed ψ2 = true
H0: size' ψ2 ≤ sz
pf₁: Γ ⊢i ψ1^[[evar:E↦p]] <---> ψ1^[[evar:E↦q]] using gpi
pf₂: Γ ⊢i ψ2^[[evar:E↦p]] <---> ψ2^[[evar:E↦q]] using gpi

Γ ⊢i ψ1^[[evar:E↦p]] <---> ψ1^[[evar:E↦q]] using gpi
apply pf₁.
Σ: Signature
sz: nat
Γ: Theory
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
E: evar
exdepth, mudepth: nat
gpi: ProofInfo
pf: Γ ⊢i p <---> q using gpi
IHsz: (ψ : Pattern) (wfψ : well_formed ψ), size' ψ ≤ sz → (EvS : EVarSet) (SvS : SVarSet), ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ p q wfψ wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ ⊆ SvS → Γ ⊢i ψ^[[evar:E↦p]] <---> ψ^[[evar:E↦q]] using gpi
ψ1, ψ2: Pattern
wfψ: well_formed (ψ1 ---> ψ2)
Hsz: S (size' ψ1 + size' ψ2) ≤ S sz
EvS: EVarSet
SvS: SVarSet
i':= ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (ψ1 ---> ψ2))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (ψ1 ---> ψ2))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (ψ1 ---> ψ2)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E (ψ1 ---> ψ2) p q wfψ wfp wfq): ProofInfo
pile: ProofInfoLe i' gpi
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
E_in_EvS: E ∈ EvS
ψ_sub_EvS: free_evars (ψ1 ---> ψ2) ⊆ EvS
p_sub_SvS: free_svars p ⊆ SvS
q_sub_SvS: free_svars q ⊆ SvS
ψ_sub_SvS: free_svars (ψ1 ---> ψ2) ⊆ SvS
HEinψ: E ∈ free_evars (ψ1 ---> ψ2)
wfψ1: well_formed ψ1 = true
H: size' ψ1 ≤ sz
wfψ2: well_formed ψ2 = true
H0: size' ψ2 ≤ sz
pf₁: Γ ⊢i ψ1^[[evar:E↦p]] <---> ψ1^[[evar:E↦q]] using gpi
pf₂: Γ ⊢i ψ2^[[evar:E↦p]] <---> ψ2^[[evar:E↦q]] using gpi

Γ ⊢i ψ2^[[evar:E↦p]] <---> ψ2^[[evar:E↦q]] using gpi
Σ: Signature
sz: nat
Γ: Theory
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
E: evar
exdepth, mudepth: nat
gpi: ProofInfo
pf: Γ ⊢i p <---> q using gpi
IHsz: (ψ : Pattern) (wfψ : well_formed ψ), size' ψ ≤ sz → (EvS : EVarSet) (SvS : SVarSet), ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ p q wfψ wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ ⊆ SvS → Γ ⊢i ψ^[[evar:E↦p]] <---> ψ^[[evar:E↦q]] using gpi
ψ1, ψ2: Pattern
wfψ: well_formed (ψ1 ---> ψ2)
Hsz: S (size' ψ1 + size' ψ2) ≤ S sz
EvS: EVarSet
SvS: SVarSet
i':= ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (ψ1 ---> ψ2))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (ψ1 ---> ψ2))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (ψ1 ---> ψ2)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E (ψ1 ---> ψ2) p q wfψ wfp wfq): ProofInfo
pile: ProofInfoLe i' gpi
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
E_in_EvS: E ∈ EvS
ψ_sub_EvS: free_evars (ψ1 ---> ψ2) ⊆ EvS
p_sub_SvS: free_svars p ⊆ SvS
q_sub_SvS: free_svars q ⊆ SvS
ψ_sub_SvS: free_svars (ψ1 ---> ψ2) ⊆ SvS
HEinψ: E ∈ free_evars (ψ1 ---> ψ2)
wfψ1: well_formed ψ1 = true
H: size' ψ1 ≤ sz
wfψ2: well_formed ψ2 = true
H0: size' ψ2 ≤ sz
pf₁: Γ ⊢i ψ1^[[evar:E↦p]] <---> ψ1^[[evar:E↦q]] using gpi
pf₂: Γ ⊢i ψ2^[[evar:E↦p]] <---> ψ2^[[evar:E↦q]] using gpi

Γ ⊢i ψ2^[[evar:E↦p]] <---> ψ2^[[evar:E↦q]] using gpi
apply pf₂. }
Σ: Signature
sz: nat
Γ: Theory
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
E: evar
exdepth, mudepth: nat
gpi: ProofInfo
pf: Γ ⊢i p <---> q using gpi
IHsz: (ψ : Pattern) (wfψ : well_formed ψ), size' ψ ≤ sz → (EvS : EVarSet) (SvS : SVarSet), ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ p q wfψ wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ ⊆ SvS → Γ ⊢i ψ^[[evar:E↦p]] <---> ψ^[[evar:E↦q]] using gpi
ψ: Pattern
wfψ: well_formed (ex , ψ)
Hsz: S (size' ψ) ≤ S sz
EvS: EVarSet
SvS: SVarSet
i':= ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (ex , ψ))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (ex , ψ))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (ex , ψ)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E (ex , ψ) p q wfψ wfp wfq): ProofInfo
pile: ProofInfoLe i' gpi
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
E_in_EvS: E ∈ EvS
ψ_sub_EvS: free_evars (ex , ψ) ⊆ EvS
p_sub_SvS: free_svars p ⊆ SvS
q_sub_SvS: free_svars q ⊆ SvS
ψ_sub_SvS: free_svars (ex , ψ) ⊆ SvS
HEinψ: E ∈ free_evars (ex , ψ)

Γ ⊢i (ex , ψ^[[evar:E↦p]]) <---> (ex , ψ^[[evar:E↦q]]) using gpi
Σ: Signature
sz: nat
Γ: Theory
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
E: evar
exdepth, mudepth: nat
gpi: ProofInfo
pf: Γ ⊢i p <---> q using gpi
IHsz: (ψ : Pattern) (wfψ : well_formed ψ), size' ψ ≤ sz → (EvS : EVarSet) (SvS : SVarSet), ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ p q wfψ wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ ⊆ SvS → Γ ⊢i ψ^[[evar:E↦p]] <---> ψ^[[evar:E↦q]] using gpi
ψ: Pattern
wfψ: well_formed (mu , ψ)
Hsz: S (size' ψ) ≤ S sz
EvS: EVarSet
SvS: SVarSet
i':= ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (mu , ψ))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (mu , ψ))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (mu , ψ)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E (mu , ψ) p q wfψ wfp wfq): ProofInfo
pile: ProofInfoLe i' gpi
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
E_in_EvS: E ∈ EvS
ψ_sub_EvS: free_evars (mu , ψ) ⊆ EvS
p_sub_SvS: free_svars p ⊆ SvS
q_sub_SvS: free_svars q ⊆ SvS
ψ_sub_SvS: free_svars (mu , ψ) ⊆ SvS
HEinψ: E ∈ free_evars (mu , ψ)
Γ ⊢i (mu , ψ^[[evar:E↦p]]) <---> (mu , ψ^[[evar:E↦q]]) using gpi
Σ: Signature
sz: nat
Γ: Theory
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
E: evar
exdepth, mudepth: nat
gpi: ProofInfo
pf: Γ ⊢i p <---> q using gpi
IHsz: (ψ : Pattern) (wfψ : well_formed ψ), size' ψ ≤ sz → (EvS : EVarSet) (SvS : SVarSet), ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ p q wfψ wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ ⊆ SvS → Γ ⊢i ψ^[[evar:E↦p]] <---> ψ^[[evar:E↦q]] using gpi
ψ: Pattern
wfψ: well_formed (ex , ψ)
Hsz: S (size' ψ) ≤ S sz
EvS: EVarSet
SvS: SVarSet
i':= ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (ex , ψ))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (ex , ψ))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (ex , ψ)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E (ex , ψ) p q wfψ wfp wfq): ProofInfo
pile: ProofInfoLe i' gpi
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
E_in_EvS: E ∈ EvS
ψ_sub_EvS: free_evars (ex , ψ) ⊆ EvS
p_sub_SvS: free_svars p ⊆ SvS
q_sub_SvS: free_svars q ⊆ SvS
ψ_sub_SvS: free_svars (ex , ψ) ⊆ SvS
HEinψ: E ∈ free_evars (ex , ψ)

Γ ⊢i (ex , ψ^[[evar:E↦p]]) <---> (ex , ψ^[[evar:E↦q]]) using gpi
Σ: Signature
sz: nat
Γ: Theory
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
E: evar
exdepth, mudepth: nat
gpi: ProofInfo
pf: Γ ⊢i p <---> q using gpi
IHsz: (ψ : Pattern) (wfψ : well_formed ψ), size' ψ ≤ sz → (EvS : EVarSet) (SvS : SVarSet), ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ p q wfψ wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ ⊆ SvS → Γ ⊢i ψ^[[evar:E↦p]] <---> ψ^[[evar:E↦q]] using gpi
ψ: Pattern
wfψ: well_formed (ex , ψ)
Hsz: S (size' ψ) ≤ S sz
EvS: EVarSet
SvS: SVarSet
i':= ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (ex , ψ))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (ex , ψ))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (ex , ψ)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E (ex , ψ) p q wfψ wfp wfq): ProofInfo
pile: ProofInfoLe i' gpi
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
E_in_EvS: E ∈ EvS
ψ_sub_EvS: free_evars (ex , ψ) ⊆ EvS
p_sub_SvS: free_svars p ⊆ SvS
q_sub_SvS: free_svars q ⊆ SvS
ψ_sub_SvS: free_svars (ex , ψ) ⊆ SvS
HEinψ: E ∈ free_evars (ex , ψ)
frx: evar_fresh (elements EvS) ∉ EvS

Γ ⊢i (ex , ψ^[[evar:E↦p]]) <---> (ex , ψ^[[evar:E↦q]]) using gpi
Σ: Signature
sz: nat
Γ: Theory
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
E: evar
exdepth, mudepth: nat
gpi: ProofInfo
pf: Γ ⊢i p <---> q using gpi
IHsz: (ψ : Pattern) (wfψ : well_formed ψ), size' ψ ≤ sz → (EvS : EVarSet) (SvS : SVarSet), ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ p q wfψ wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ ⊆ SvS → Γ ⊢i ψ^[[evar:E↦p]] <---> ψ^[[evar:E↦q]] using gpi
ψ: Pattern
wfψ: well_formed (ex , ψ)
Hsz: S (size' ψ) ≤ S sz
EvS: EVarSet
SvS: SVarSet
i':= ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (ex , ψ))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (ex , ψ))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (ex , ψ)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E (ex , ψ) p q wfψ wfp wfq): ProofInfo
pile: ProofInfoLe i' gpi
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
E_in_EvS: E ∈ EvS
ψ_sub_EvS: free_evars (ex , ψ) ⊆ EvS
p_sub_SvS: free_svars p ⊆ SvS
q_sub_SvS: free_svars q ⊆ SvS
ψ_sub_SvS: free_svars (ex , ψ) ⊆ SvS
HEinψ: E ∈ free_evars (ex , ψ)
x: evar
Heqx: x = evar_fresh (elements EvS)
frx: x ∉ EvS

Γ ⊢i (ex , ψ^[[evar:E↦p]]) <---> (ex , ψ^[[evar:E↦q]]) using gpi
(* there used to be a destruct on whether E is in psi *)
Falling back on (well_formed_xy 0 0 ψ^{evar:0↦evar_fresh (elements EvS)} = true)
Σ: Signature
sz: nat
Γ: Theory
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
E: evar
exdepth, mudepth: nat
gpi: ProofInfo
pf: Γ ⊢i p <---> q using gpi
IHsz: (ψ : Pattern) (wfψ : well_formed ψ), size' ψ ≤ sz → (EvS : EVarSet) (SvS : SVarSet), ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ p q wfψ wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ ⊆ SvS → Γ ⊢i ψ^[[evar:E↦p]] <---> ψ^[[evar:E↦q]] using gpi
ψ: Pattern
wfψ: well_formed (ex , ψ)
Hsz: S (size' ψ) ≤ S sz
EvS: EVarSet
SvS: SVarSet
i':= ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (ex , ψ))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (ex , ψ))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (ex , ψ)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E (ex , ψ) p q wfψ wfp wfq): ProofInfo
pile: ProofInfoLe i' gpi
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
E_in_EvS: E ∈ EvS
ψ_sub_EvS: free_evars (ex , ψ) ⊆ EvS
p_sub_SvS: free_svars p ⊆ SvS
q_sub_SvS: free_svars q ⊆ SvS
ψ_sub_SvS: free_svars (ex , ψ) ⊆ SvS
HEinψ: E ∈ free_evars (ex , ψ)
x: evar
Heqx: x = evar_fresh (elements EvS)
frx: x ∉ EvS
H: well_formed ψ^{evar:0↦x}

Γ ⊢i (ex , ψ^[[evar:E↦p]]) <---> (ex , ψ^[[evar:E↦q]]) using gpi
Σ: Signature
sz: nat
Γ: Theory
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
E: evar
exdepth, mudepth: nat
gpi: ProofInfo
pf: Γ ⊢i p <---> q using gpi
IHsz: (ψ : Pattern) (wfψ : well_formed ψ), size' ψ ≤ sz → (EvS : EVarSet) (SvS : SVarSet), ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ p q wfψ wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ ⊆ SvS → Γ ⊢i ψ^[[evar:E↦p]] <---> ψ^[[evar:E↦q]] using gpi
ψ: Pattern
wfψ: well_formed (ex , ψ)
Hsz: S (size' ψ) ≤ S sz
EvS: EVarSet
SvS: SVarSet
i':= ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (ex , ψ))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (ex , ψ))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (ex , ψ)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E (ex , ψ) p q wfψ wfp wfq): ProofInfo
pile: ProofInfoLe i' gpi
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
E_in_EvS: E ∈ EvS
ψ_sub_EvS: free_evars (ex , ψ) ⊆ EvS
p_sub_SvS: free_svars p ⊆ SvS
q_sub_SvS: free_svars q ⊆ SvS
ψ_sub_SvS: free_svars (ex , ψ) ⊆ SvS
HEinψ: E ∈ free_evars (ex , ψ)
x: evar
Heqx: x = evar_fresh (elements EvS)
frx: x ∉ EvS
H: well_formed ψ^{evar:0↦x}
H0: size' ψ^{evar:0↦x} ≤ sz

Γ ⊢i (ex , ψ^[[evar:E↦p]]) <---> (ex , ψ^[[evar:E↦q]]) using gpi
Σ: Signature
sz: nat
Γ: Theory
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
E: evar
exdepth, mudepth: nat
gpi: ProofInfo
pf: Γ ⊢i p <---> q using gpi
IHsz: (ψ : Pattern) (wfψ : well_formed ψ), size' ψ ≤ sz → (EvS : EVarSet) (SvS : SVarSet), ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ p q wfψ wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ ⊆ SvS → Γ ⊢i ψ^[[evar:E↦p]] <---> ψ^[[evar:E↦q]] using gpi
ψ: Pattern
wfψ: well_formed (ex , ψ)
Hsz: S (size' ψ) ≤ S sz
EvS: EVarSet
SvS: SVarSet
i':= ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (ex , ψ))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (ex , ψ))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (ex , ψ)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E (ex , ψ) p q wfψ wfp wfq): ProofInfo
pile: ProofInfoLe i' gpi
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
E_in_EvS: E ∈ EvS
ψ_sub_EvS: free_evars (ex , ψ) ⊆ EvS
p_sub_SvS: free_svars p ⊆ SvS
q_sub_SvS: free_svars q ⊆ SvS
ψ_sub_SvS: free_svars (ex , ψ) ⊆ SvS
HEinψ: E ∈ free_evars (ex , ψ)
x: evar
Heqx: x = evar_fresh (elements EvS)
frx: x ∉ EvS
H: well_formed ψ^{evar:0↦x}
H0: size' ψ^{evar:0↦x} ≤ sz
IH: (EvS : EVarSet) (SvS : SVarSet), ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ^{evar:0↦x})), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ^{evar:0↦x})), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ^{evar:0↦x}) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ^{evar:0↦x} p q H wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ^{evar:0↦x} ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ^{evar:0↦x} ⊆ SvS → Γ ⊢i ψ^{evar:0↦x}^[[evar:E↦p]] <---> ψ^{evar:0↦x}^[[evar:E↦q]] using gpi

Γ ⊢i (ex , ψ^[[evar:E↦p]]) <---> (ex , ψ^[[evar:E↦q]]) using gpi
Σ: Signature
sz: nat
Γ: Theory
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
E: evar
exdepth, mudepth: nat
gpi: ProofInfo
pf: Γ ⊢i p <---> q using gpi
IHsz: (ψ : Pattern) (wfψ : well_formed ψ), size' ψ ≤ sz → (EvS : EVarSet) (SvS : SVarSet), ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ p q wfψ wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ ⊆ SvS → Γ ⊢i ψ^[[evar:E↦p]] <---> ψ^[[evar:E↦q]] using gpi
ψ: Pattern
wfψ: well_formed (ex , ψ)
Hsz: S (size' ψ) ≤ S sz
EvS: EVarSet
SvS: SVarSet
i':= ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (ex , ψ))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (ex , ψ))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (ex , ψ)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E (ex , ψ) p q wfψ wfp wfq): ProofInfo
pile: ProofInfoLe i' gpi
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
E_in_EvS: E ∈ EvS
ψ_sub_EvS: free_evars (ex , ψ) ⊆ EvS
p_sub_SvS: free_svars p ⊆ SvS
q_sub_SvS: free_svars q ⊆ SvS
ψ_sub_SvS: free_svars (ex , ψ) ⊆ SvS
HEinψ: E ∈ free_evars (ex , ψ)
x: evar
Heqx: x = evar_fresh (elements EvS)
frx: x ∉ EvS
H: well_formed ψ^{evar:0↦x}
H0: size' ψ^{evar:0↦x} ≤ sz
IH: ProofInfoLe (ExGen := list_to_set (evar_fresh_seq ({[x]} ∪ EvS) (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ^{evar:0↦x})), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ^{evar:0↦x})), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ^{evar:0↦x}) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' ({[x]} ∪ EvS) SvS E ψ^{evar:0↦x} p q H wfp wfq)) gpi → free_evars p ⊆ {[x]} ∪ EvS → free_evars q ⊆ {[x]} ∪ EvS → E ∈ {[x]} ∪ EvS → free_evars ψ^{evar:0↦x} ⊆ {[x]} ∪ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ^{evar:0↦x} ⊆ SvS → Γ ⊢i ψ^{evar:0↦x}^[[evar:E↦p]] <---> ψ^{evar:0↦x}^[[evar:E↦q]] using gpi

Γ ⊢i (ex , ψ^[[evar:E↦p]]) <---> (ex , ψ^[[evar:E↦q]]) using gpi
Σ: Signature
sz: nat
Γ: Theory
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
E: evar
exdepth, mudepth: nat
gpi: ProofInfo
pf: Γ ⊢i p <---> q using gpi
IHsz: (ψ : Pattern) (wfψ : well_formed ψ), size' ψ ≤ sz → (EvS : EVarSet) (SvS : SVarSet), ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ p q wfψ wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ ⊆ SvS → Γ ⊢i ψ^[[evar:E↦p]] <---> ψ^[[evar:E↦q]] using gpi
ψ: Pattern
wfψ: well_formed (ex , ψ)
Hsz: S (size' ψ) ≤ S sz
EvS: EVarSet
SvS: SVarSet
i':= ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (ex , ψ))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (ex , ψ))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (ex , ψ)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E (ex , ψ) p q wfψ wfp wfq): ProofInfo
pile: ProofInfoLe i' gpi
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
E_in_EvS: E ∈ EvS
ψ_sub_EvS: free_evars (ex , ψ) ⊆ EvS
p_sub_SvS: free_svars p ⊆ SvS
q_sub_SvS: free_svars q ⊆ SvS
ψ_sub_SvS: free_svars (ex , ψ) ⊆ SvS
HEinψ: E ∈ free_evars (ex , ψ)
x: evar
Heqx: x = evar_fresh (elements EvS)
frx: x ∉ EvS
H: well_formed ψ^{evar:0↦x}
H0: size' ψ^{evar:0↦x} ≤ sz
IH: ProofInfoLe (ExGen := list_to_set (evar_fresh_seq ({[x]} ∪ EvS) (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ^{evar:0↦x})), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ^{evar:0↦x})), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ^{evar:0↦x}) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' ({[x]} ∪ EvS) SvS E ψ^{evar:0↦x} p q H wfp wfq)) gpi → free_evars p ⊆ {[x]} ∪ EvS → free_evars q ⊆ {[x]} ∪ EvS → E ∈ {[x]} ∪ EvS → free_evars ψ^{evar:0↦x} ⊆ {[x]} ∪ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ^{evar:0↦x} ⊆ SvS → Γ ⊢i ψ^{evar:0↦x}^[[evar:E↦p]] <---> ψ^{evar:0↦x}^[[evar:E↦q]] using gpi

ProofInfoLe (ExGen := list_to_set (evar_fresh_seq ({[x]} ∪ EvS) (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ^{evar:0↦x})), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ^{evar:0↦x})), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ^{evar:0↦x}) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' ({[x]} ∪ EvS) SvS E ψ^{evar:0↦x} p q H wfp wfq)) gpi
Σ: Signature
sz: nat
Γ: Theory
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
E: evar
exdepth, mudepth: nat
gpi: ProofInfo
pf: Γ ⊢i p <---> q using gpi
IHsz: (ψ : Pattern) (wfψ : well_formed ψ), size' ψ ≤ sz → (EvS : EVarSet) (SvS : SVarSet), ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ p q wfψ wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ ⊆ SvS → Γ ⊢i ψ^[[evar:E↦p]] <---> ψ^[[evar:E↦q]] using gpi
ψ: Pattern
wfψ: well_formed (ex , ψ)
Hsz: S (size' ψ) ≤ S sz
EvS: EVarSet
SvS: SVarSet
i':= ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (ex , ψ))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (ex , ψ))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (ex , ψ)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E (ex , ψ) p q wfψ wfp wfq): ProofInfo
pile: ProofInfoLe i' gpi
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
E_in_EvS: E ∈ EvS
ψ_sub_EvS: free_evars (ex , ψ) ⊆ EvS
p_sub_SvS: free_svars p ⊆ SvS
q_sub_SvS: free_svars q ⊆ SvS
ψ_sub_SvS: free_svars (ex , ψ) ⊆ SvS
HEinψ: E ∈ free_evars (ex , ψ)
x: evar
Heqx: x = evar_fresh (elements EvS)
frx: x ∉ EvS
H: well_formed ψ^{evar:0↦x}
H0: size' ψ^{evar:0↦x} ≤ sz
IH: ProofInfoLe (ExGen := list_to_set (evar_fresh_seq ({[x]} ∪ EvS) (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ^{evar:0↦x})), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ^{evar:0↦x})), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ^{evar:0↦x}) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' ({[x]} ∪ EvS) SvS E ψ^{evar:0↦x} p q H wfp wfq)) gpi → free_evars p ⊆ {[x]} ∪ EvS → free_evars q ⊆ {[x]} ∪ EvS → E ∈ {[x]} ∪ EvS → free_evars ψ^{evar:0↦x} ⊆ {[x]} ∪ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ^{evar:0↦x} ⊆ SvS → Γ ⊢i ψ^{evar:0↦x}^[[evar:E↦p]] <---> ψ^{evar:0↦x}^[[evar:E↦q]] using gpi
free_evars p ⊆ {[x]} ∪ EvS
Σ: Signature
sz: nat
Γ: Theory
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
E: evar
exdepth, mudepth: nat
gpi: ProofInfo
pf: Γ ⊢i p <---> q using gpi
IHsz: (ψ : Pattern) (wfψ : well_formed ψ), size' ψ ≤ sz → (EvS : EVarSet) (SvS : SVarSet), ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ p q wfψ wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ ⊆ SvS → Γ ⊢i ψ^[[evar:E↦p]] <---> ψ^[[evar:E↦q]] using gpi
ψ: Pattern
wfψ: well_formed (ex , ψ)
Hsz: S (size' ψ) ≤ S sz
EvS: EVarSet
SvS: SVarSet
i':= ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (ex , ψ))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (ex , ψ))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (ex , ψ)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E (ex , ψ) p q wfψ wfp wfq): ProofInfo
pile: ProofInfoLe i' gpi
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
E_in_EvS: E ∈ EvS
ψ_sub_EvS: free_evars (ex , ψ) ⊆ EvS
p_sub_SvS: free_svars p ⊆ SvS
q_sub_SvS: free_svars q ⊆ SvS
ψ_sub_SvS: free_svars (ex , ψ) ⊆ SvS
HEinψ: E ∈ free_evars (ex , ψ)
x: evar
Heqx: x = evar_fresh (elements EvS)
frx: x ∉ EvS
H: well_formed ψ^{evar:0↦x}
H0: size' ψ^{evar:0↦x} ≤ sz
IH: ProofInfoLe (ExGen := list_to_set (evar_fresh_seq ({[x]} ∪ EvS) (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ^{evar:0↦x})), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ^{evar:0↦x})), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ^{evar:0↦x}) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' ({[x]} ∪ EvS) SvS E ψ^{evar:0↦x} p q H wfp wfq)) gpi → free_evars p ⊆ {[x]} ∪ EvS → free_evars q ⊆ {[x]} ∪ EvS → E ∈ {[x]} ∪ EvS → free_evars ψ^{evar:0↦x} ⊆ {[x]} ∪ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ^{evar:0↦x} ⊆ SvS → Γ ⊢i ψ^{evar:0↦x}^[[evar:E↦p]] <---> ψ^{evar:0↦x}^[[evar:E↦q]] using gpi
free_evars q ⊆ {[x]} ∪ EvS
Σ: Signature
sz: nat
Γ: Theory
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
E: evar
exdepth, mudepth: nat
gpi: ProofInfo
pf: Γ ⊢i p <---> q using gpi
IHsz: (ψ : Pattern) (wfψ : well_formed ψ), size' ψ ≤ sz → (EvS : EVarSet) (SvS : SVarSet), ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ p q wfψ wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ ⊆ SvS → Γ ⊢i ψ^[[evar:E↦p]] <---> ψ^[[evar:E↦q]] using gpi
ψ: Pattern
wfψ: well_formed (ex , ψ)
Hsz: S (size' ψ) ≤ S sz
EvS: EVarSet
SvS: SVarSet
i':= ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (ex , ψ))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (ex , ψ))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (ex , ψ)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E (ex , ψ) p q wfψ wfp wfq): ProofInfo
pile: ProofInfoLe i' gpi
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
E_in_EvS: E ∈ EvS
ψ_sub_EvS: free_evars (ex , ψ) ⊆ EvS
p_sub_SvS: free_svars p ⊆ SvS
q_sub_SvS: free_svars q ⊆ SvS
ψ_sub_SvS: free_svars (ex , ψ) ⊆ SvS
HEinψ: E ∈ free_evars (ex , ψ)
x: evar
Heqx: x = evar_fresh (elements EvS)
frx: x ∉ EvS
H: well_formed ψ^{evar:0↦x}
H0: size' ψ^{evar:0↦x} ≤ sz
IH: ProofInfoLe (ExGen := list_to_set (evar_fresh_seq ({[x]} ∪ EvS) (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ^{evar:0↦x})), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ^{evar:0↦x})), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ^{evar:0↦x}) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' ({[x]} ∪ EvS) SvS E ψ^{evar:0↦x} p q H wfp wfq)) gpi → free_evars p ⊆ {[x]} ∪ EvS → free_evars q ⊆ {[x]} ∪ EvS → E ∈ {[x]} ∪ EvS → free_evars ψ^{evar:0↦x} ⊆ {[x]} ∪ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ^{evar:0↦x} ⊆ SvS → Γ ⊢i ψ^{evar:0↦x}^[[evar:E↦p]] <---> ψ^{evar:0↦x}^[[evar:E↦q]] using gpi
E ∈ {[x]} ∪ EvS
Σ: Signature
sz: nat
Γ: Theory
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
E: evar
exdepth, mudepth: nat
gpi: ProofInfo
pf: Γ ⊢i p <---> q using gpi
IHsz: (ψ : Pattern) (wfψ : well_formed ψ), size' ψ ≤ sz → (EvS : EVarSet) (SvS : SVarSet), ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ p q wfψ wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ ⊆ SvS → Γ ⊢i ψ^[[evar:E↦p]] <---> ψ^[[evar:E↦q]] using gpi
ψ: Pattern
wfψ: well_formed (ex , ψ)
Hsz: S (size' ψ) ≤ S sz
EvS: EVarSet
SvS: SVarSet
i':= ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (ex , ψ))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (ex , ψ))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (ex , ψ)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E (ex , ψ) p q wfψ wfp wfq): ProofInfo
pile: ProofInfoLe i' gpi
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
E_in_EvS: E ∈ EvS
ψ_sub_EvS: free_evars (ex , ψ) ⊆ EvS
p_sub_SvS: free_svars p ⊆ SvS
q_sub_SvS: free_svars q ⊆ SvS
ψ_sub_SvS: free_svars (ex , ψ) ⊆ SvS
HEinψ: E ∈ free_evars (ex , ψ)
x: evar
Heqx: x = evar_fresh (elements EvS)
frx: x ∉ EvS
H: well_formed ψ^{evar:0↦x}
H0: size' ψ^{evar:0↦x} ≤ sz
IH: ProofInfoLe (ExGen := list_to_set (evar_fresh_seq ({[x]} ∪ EvS) (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ^{evar:0↦x})), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ^{evar:0↦x})), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ^{evar:0↦x}) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' ({[x]} ∪ EvS) SvS E ψ^{evar:0↦x} p q H wfp wfq)) gpi → free_evars p ⊆ {[x]} ∪ EvS → free_evars q ⊆ {[x]} ∪ EvS → E ∈ {[x]} ∪ EvS → free_evars ψ^{evar:0↦x} ⊆ {[x]} ∪ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ^{evar:0↦x} ⊆ SvS → Γ ⊢i ψ^{evar:0↦x}^[[evar:E↦p]] <---> ψ^{evar:0↦x}^[[evar:E↦q]] using gpi
free_evars ψ^{evar:0↦x} ⊆ {[x]} ∪ EvS
Σ: Signature
sz: nat
Γ: Theory
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
E: evar
exdepth, mudepth: nat
gpi: ProofInfo
pf: Γ ⊢i p <---> q using gpi
IHsz: (ψ : Pattern) (wfψ : well_formed ψ), size' ψ ≤ sz → (EvS : EVarSet) (SvS : SVarSet), ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ p q wfψ wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ ⊆ SvS → Γ ⊢i ψ^[[evar:E↦p]] <---> ψ^[[evar:E↦q]] using gpi
ψ: Pattern
wfψ: well_formed (ex , ψ)
Hsz: S (size' ψ) ≤ S sz
EvS: EVarSet
SvS: SVarSet
i':= ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (ex , ψ))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (ex , ψ))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (ex , ψ)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E (ex , ψ) p q wfψ wfp wfq): ProofInfo
pile: ProofInfoLe i' gpi
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
E_in_EvS: E ∈ EvS
ψ_sub_EvS: free_evars (ex , ψ) ⊆ EvS
p_sub_SvS: free_svars p ⊆ SvS
q_sub_SvS: free_svars q ⊆ SvS
ψ_sub_SvS: free_svars (ex , ψ) ⊆ SvS
HEinψ: E ∈ free_evars (ex , ψ)
x: evar
Heqx: x = evar_fresh (elements EvS)
frx: x ∉ EvS
H: well_formed ψ^{evar:0↦x}
H0: size' ψ^{evar:0↦x} ≤ sz
IH: ProofInfoLe (ExGen := list_to_set (evar_fresh_seq ({[x]} ∪ EvS) (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ^{evar:0↦x})), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ^{evar:0↦x})), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ^{evar:0↦x}) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' ({[x]} ∪ EvS) SvS E ψ^{evar:0↦x} p q H wfp wfq)) gpi → free_evars p ⊆ {[x]} ∪ EvS → free_evars q ⊆ {[x]} ∪ EvS → E ∈ {[x]} ∪ EvS → free_evars ψ^{evar:0↦x} ⊆ {[x]} ∪ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ^{evar:0↦x} ⊆ SvS → Γ ⊢i ψ^{evar:0↦x}^[[evar:E↦p]] <---> ψ^{evar:0↦x}^[[evar:E↦q]] using gpi
free_svars p ⊆ SvS
Σ: Signature
sz: nat
Γ: Theory
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
E: evar
exdepth, mudepth: nat
gpi: ProofInfo
pf: Γ ⊢i p <---> q using gpi
IHsz: (ψ : Pattern) (wfψ : well_formed ψ), size' ψ ≤ sz → (EvS : EVarSet) (SvS : SVarSet), ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ p q wfψ wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ ⊆ SvS → Γ ⊢i ψ^[[evar:E↦p]] <---> ψ^[[evar:E↦q]] using gpi
ψ: Pattern
wfψ: well_formed (ex , ψ)
Hsz: S (size' ψ) ≤ S sz
EvS: EVarSet
SvS: SVarSet
i':= ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (ex , ψ))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (ex , ψ))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (ex , ψ)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E (ex , ψ) p q wfψ wfp wfq): ProofInfo
pile: ProofInfoLe i' gpi
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
E_in_EvS: E ∈ EvS
ψ_sub_EvS: free_evars (ex , ψ) ⊆ EvS
p_sub_SvS: free_svars p ⊆ SvS
q_sub_SvS: free_svars q ⊆ SvS
ψ_sub_SvS: free_svars (ex , ψ) ⊆ SvS
HEinψ: E ∈ free_evars (ex , ψ)
x: evar
Heqx: x = evar_fresh (elements EvS)
frx: x ∉ EvS
H: well_formed ψ^{evar:0↦x}
H0: size' ψ^{evar:0↦x} ≤ sz
IH: ProofInfoLe (ExGen := list_to_set (evar_fresh_seq ({[x]} ∪ EvS) (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ^{evar:0↦x})), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ^{evar:0↦x})), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ^{evar:0↦x}) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' ({[x]} ∪ EvS) SvS E ψ^{evar:0↦x} p q H wfp wfq)) gpi → free_evars p ⊆ {[x]} ∪ EvS → free_evars q ⊆ {[x]} ∪ EvS → E ∈ {[x]} ∪ EvS → free_evars ψ^{evar:0↦x} ⊆ {[x]} ∪ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ^{evar:0↦x} ⊆ SvS → Γ ⊢i ψ^{evar:0↦x}^[[evar:E↦p]] <---> ψ^{evar:0↦x}^[[evar:E↦q]] using gpi
free_svars q ⊆ SvS
Σ: Signature
sz: nat
Γ: Theory
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
E: evar
exdepth, mudepth: nat
gpi: ProofInfo
pf: Γ ⊢i p <---> q using gpi
IHsz: (ψ : Pattern) (wfψ : well_formed ψ), size' ψ ≤ sz → (EvS : EVarSet) (SvS : SVarSet), ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ p q wfψ wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ ⊆ SvS → Γ ⊢i ψ^[[evar:E↦p]] <---> ψ^[[evar:E↦q]] using gpi
ψ: Pattern
wfψ: well_formed (ex , ψ)
Hsz: S (size' ψ) ≤ S sz
EvS: EVarSet
SvS: SVarSet
i':= ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (ex , ψ))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (ex , ψ))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (ex , ψ)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E (ex , ψ) p q wfψ wfp wfq): ProofInfo
pile: ProofInfoLe i' gpi
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
E_in_EvS: E ∈ EvS
ψ_sub_EvS: free_evars (ex , ψ) ⊆ EvS
p_sub_SvS: free_svars p ⊆ SvS
q_sub_SvS: free_svars q ⊆ SvS
ψ_sub_SvS: free_svars (ex , ψ) ⊆ SvS
HEinψ: E ∈ free_evars (ex , ψ)
x: evar
Heqx: x = evar_fresh (elements EvS)
frx: x ∉ EvS
H: well_formed ψ^{evar:0↦x}
H0: size' ψ^{evar:0↦x} ≤ sz
IH: ProofInfoLe (ExGen := list_to_set (evar_fresh_seq ({[x]} ∪ EvS) (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ^{evar:0↦x})), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ^{evar:0↦x})), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ^{evar:0↦x}) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' ({[x]} ∪ EvS) SvS E ψ^{evar:0↦x} p q H wfp wfq)) gpi → free_evars p ⊆ {[x]} ∪ EvS → free_evars q ⊆ {[x]} ∪ EvS → E ∈ {[x]} ∪ EvS → free_evars ψ^{evar:0↦x} ⊆ {[x]} ∪ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ^{evar:0↦x} ⊆ SvS → Γ ⊢i ψ^{evar:0↦x}^[[evar:E↦p]] <---> ψ^{evar:0↦x}^[[evar:E↦q]] using gpi
free_svars ψ^{evar:0↦x} ⊆ SvS
Σ: Signature
sz: nat
Γ: Theory
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
E: evar
exdepth, mudepth: nat
gpi: ProofInfo
pf: Γ ⊢i p <---> q using gpi
IHsz: (ψ : Pattern) (wfψ : well_formed ψ), size' ψ ≤ sz → (EvS : EVarSet) (SvS : SVarSet), ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ p q wfψ wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ ⊆ SvS → Γ ⊢i ψ^[[evar:E↦p]] <---> ψ^[[evar:E↦q]] using gpi
ψ: Pattern
wfψ: well_formed (ex , ψ)
Hsz: S (size' ψ) ≤ S sz
EvS: EVarSet
SvS: SVarSet
i':= ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (ex , ψ))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (ex , ψ))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (ex , ψ)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E (ex , ψ) p q wfψ wfp wfq): ProofInfo
pile: ProofInfoLe i' gpi
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
E_in_EvS: E ∈ EvS
ψ_sub_EvS: free_evars (ex , ψ) ⊆ EvS
p_sub_SvS: free_svars p ⊆ SvS
q_sub_SvS: free_svars q ⊆ SvS
ψ_sub_SvS: free_svars (ex , ψ) ⊆ SvS
HEinψ: E ∈ free_evars (ex , ψ)
x: evar
Heqx: x = evar_fresh (elements EvS)
frx: x ∉ EvS
H: well_formed ψ^{evar:0↦x}
H0: size' ψ^{evar:0↦x} ≤ sz
IH: Γ ⊢i ψ^{evar:0↦x}^[[evar:E↦p]] <---> ψ^{evar:0↦x}^[[evar:E↦q]] using gpi
Γ ⊢i (ex , ψ^[[evar:E↦p]]) <---> (ex , ψ^[[evar:E↦q]]) using gpi
Σ: Signature
sz: nat
Γ: Theory
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
E: evar
exdepth, mudepth: nat
gpi: ProofInfo
pf: Γ ⊢i p <---> q using gpi
IHsz: (ψ : Pattern) (wfψ : well_formed ψ), size' ψ ≤ sz → (EvS : EVarSet) (SvS : SVarSet), ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ p q wfψ wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ ⊆ SvS → Γ ⊢i ψ^[[evar:E↦p]] <---> ψ^[[evar:E↦q]] using gpi
ψ: Pattern
wfψ: well_formed (ex , ψ)
Hsz: S (size' ψ) ≤ S sz
EvS: EVarSet
SvS: SVarSet
i':= ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (ex , ψ))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (ex , ψ))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (ex , ψ)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E (ex , ψ) p q wfψ wfp wfq): ProofInfo
pile: ProofInfoLe i' gpi
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
E_in_EvS: E ∈ EvS
ψ_sub_EvS: free_evars (ex , ψ) ⊆ EvS
p_sub_SvS: free_svars p ⊆ SvS
q_sub_SvS: free_svars q ⊆ SvS
ψ_sub_SvS: free_svars (ex , ψ) ⊆ SvS
HEinψ: E ∈ free_evars (ex , ψ)
x: evar
Heqx: x = evar_fresh (elements EvS)
frx: x ∉ EvS
H: well_formed ψ^{evar:0↦x}
H0: size' ψ^{evar:0↦x} ≤ sz
IH: ProofInfoLe (ExGen := list_to_set (evar_fresh_seq ({[x]} ∪ EvS) (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ^{evar:0↦x})), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ^{evar:0↦x})), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ^{evar:0↦x}) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' ({[x]} ∪ EvS) SvS E ψ^{evar:0↦x} p q H wfp wfq)) gpi → free_evars p ⊆ {[x]} ∪ EvS → free_evars q ⊆ {[x]} ∪ EvS → E ∈ {[x]} ∪ EvS → free_evars ψ^{evar:0↦x} ⊆ {[x]} ∪ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ^{evar:0↦x} ⊆ SvS → Γ ⊢i ψ^{evar:0↦x}^[[evar:E↦p]] <---> ψ^{evar:0↦x}^[[evar:E↦q]] using gpi

ProofInfoLe (ExGen := list_to_set (evar_fresh_seq ({[x]} ∪ EvS) (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ^{evar:0↦x})), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ^{evar:0↦x})), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ^{evar:0↦x}) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' ({[x]} ∪ EvS) SvS E ψ^{evar:0↦x} p q H wfp wfq)) gpi
abstract( subst i'; simpl; eapply pile_trans; [|apply pile]; assert (HxneE: x <> E); [(clear -frx E_in_EvS; set_solver)|]; apply pile_evs_svs_kt; [( simpl; rewrite medoeip_evar_open; [(apply not_eq_sym; exact HxneE) |(simpl; rewrite medoeip_S_in; [(assumption) |(remember (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ) as n; simpl; unfold evar_fresh_s; rewrite -Heqx; clear; set_solver) ] )] ) |( simpl; rewrite mmdoeip_evar_open; [(apply not_eq_sym; exact HxneE) |(apply reflexivity) ] ) |( clear IH; repeat case_match; simpl in *; try reflexivity; pose proof (Htmp := n); rewrite mmdoeip_evar_open in Htmp; [(apply not_eq_sym; exact HxneE)|(lia)] ) |(simp frames_on_the_way_to_hole'; subst x; clear; pi_set_solver) ]).
Σ: Signature
sz: nat
Γ: Theory
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
E: evar
exdepth, mudepth: nat
gpi: ProofInfo
pf: Γ ⊢i p <---> q using gpi
IHsz: (ψ : Pattern) (wfψ : well_formed ψ), size' ψ ≤ sz → (EvS : EVarSet) (SvS : SVarSet), ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ p q wfψ wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ ⊆ SvS → Γ ⊢i ψ^[[evar:E↦p]] <---> ψ^[[evar:E↦q]] using gpi
ψ: Pattern
wfψ: well_formed (ex , ψ)
Hsz: S (size' ψ) ≤ S sz
EvS: EVarSet
SvS: SVarSet
i':= ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (ex , ψ))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (ex , ψ))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (ex , ψ)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E (ex , ψ) p q wfψ wfp wfq): ProofInfo
pile: ProofInfoLe i' gpi
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
E_in_EvS: E ∈ EvS
ψ_sub_EvS: free_evars (ex , ψ) ⊆ EvS
p_sub_SvS: free_svars p ⊆ SvS
q_sub_SvS: free_svars q ⊆ SvS
ψ_sub_SvS: free_svars (ex , ψ) ⊆ SvS
HEinψ: E ∈ free_evars (ex , ψ)
x: evar
Heqx: x = evar_fresh (elements EvS)
frx: x ∉ EvS
H: well_formed ψ^{evar:0↦x}
H0: size' ψ^{evar:0↦x} ≤ sz
IH: ProofInfoLe (ExGen := list_to_set (evar_fresh_seq ({[x]} ∪ EvS) (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ^{evar:0↦x})), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ^{evar:0↦x})), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ^{evar:0↦x}) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' ({[x]} ∪ EvS) SvS E ψ^{evar:0↦x} p q H wfp wfq)) gpi → free_evars p ⊆ {[x]} ∪ EvS → free_evars q ⊆ {[x]} ∪ EvS → E ∈ {[x]} ∪ EvS → free_evars ψ^{evar:0↦x} ⊆ {[x]} ∪ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ^{evar:0↦x} ⊆ SvS → Γ ⊢i ψ^{evar:0↦x}^[[evar:E↦p]] <---> ψ^{evar:0↦x}^[[evar:E↦q]] using gpi

free_evars p ⊆ {[x]} ∪ EvS
Σ: Signature
sz: nat
Γ: Theory
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
E: evar
exdepth, mudepth: nat
gpi: ProofInfo
pf: Γ ⊢i p <---> q using gpi
IHsz: (ψ : Pattern) (wfψ : well_formed ψ), size' ψ ≤ sz → (EvS : EVarSet) (SvS : SVarSet), ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ p q wfψ wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ ⊆ SvS → Γ ⊢i ψ^[[evar:E↦p]] <---> ψ^[[evar:E↦q]] using gpi
ψ: Pattern
wfψ: well_formed (ex , ψ)
Hsz: S (size' ψ) ≤ S sz
EvS: EVarSet
SvS: SVarSet
i':= ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (ex , ψ))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (ex , ψ))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (ex , ψ)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E (ex , ψ) p q wfψ wfp wfq): ProofInfo
pile: ProofInfoLe i' gpi
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
E_in_EvS: E ∈ EvS
ψ_sub_EvS: free_evars (ex , ψ) ⊆ EvS
p_sub_SvS: free_svars p ⊆ SvS
q_sub_SvS: free_svars q ⊆ SvS
ψ_sub_SvS: free_svars (ex , ψ) ⊆ SvS
HEinψ: E ∈ free_evars (ex , ψ)
x: evar
Heqx: x = evar_fresh (elements EvS)
frx: x ∉ EvS
H: well_formed ψ^{evar:0↦x}
H0: size' ψ^{evar:0↦x} ≤ sz
IH: ProofInfoLe (ExGen := list_to_set (evar_fresh_seq ({[x]} ∪ EvS) (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ^{evar:0↦x})), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ^{evar:0↦x})), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ^{evar:0↦x}) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' ({[x]} ∪ EvS) SvS E ψ^{evar:0↦x} p q H wfp wfq)) gpi → free_evars p ⊆ {[x]} ∪ EvS → free_evars q ⊆ {[x]} ∪ EvS → E ∈ {[x]} ∪ EvS → free_evars ψ^{evar:0↦x} ⊆ {[x]} ∪ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ^{evar:0↦x} ⊆ SvS → Γ ⊢i ψ^{evar:0↦x}^[[evar:E↦p]] <---> ψ^{evar:0↦x}^[[evar:E↦q]] using gpi
free_evars q ⊆ {[x]} ∪ EvS
Σ: Signature
sz: nat
Γ: Theory
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
E: evar
exdepth, mudepth: nat
gpi: ProofInfo
pf: Γ ⊢i p <---> q using gpi
IHsz: (ψ : Pattern) (wfψ : well_formed ψ), size' ψ ≤ sz → (EvS : EVarSet) (SvS : SVarSet), ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ p q wfψ wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ ⊆ SvS → Γ ⊢i ψ^[[evar:E↦p]] <---> ψ^[[evar:E↦q]] using gpi
ψ: Pattern
wfψ: well_formed (ex , ψ)
Hsz: S (size' ψ) ≤ S sz
EvS: EVarSet
SvS: SVarSet
i':= ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (ex , ψ))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (ex , ψ))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (ex , ψ)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E (ex , ψ) p q wfψ wfp wfq): ProofInfo
pile: ProofInfoLe i' gpi
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
E_in_EvS: E ∈ EvS
ψ_sub_EvS: free_evars (ex , ψ) ⊆ EvS
p_sub_SvS: free_svars p ⊆ SvS
q_sub_SvS: free_svars q ⊆ SvS
ψ_sub_SvS: free_svars (ex , ψ) ⊆ SvS
HEinψ: E ∈ free_evars (ex , ψ)
x: evar
Heqx: x = evar_fresh (elements EvS)
frx: x ∉ EvS
H: well_formed ψ^{evar:0↦x}
H0: size' ψ^{evar:0↦x} ≤ sz
IH: ProofInfoLe (ExGen := list_to_set (evar_fresh_seq ({[x]} ∪ EvS) (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ^{evar:0↦x})), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ^{evar:0↦x})), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ^{evar:0↦x}) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' ({[x]} ∪ EvS) SvS E ψ^{evar:0↦x} p q H wfp wfq)) gpi → free_evars p ⊆ {[x]} ∪ EvS → free_evars q ⊆ {[x]} ∪ EvS → E ∈ {[x]} ∪ EvS → free_evars ψ^{evar:0↦x} ⊆ {[x]} ∪ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ^{evar:0↦x} ⊆ SvS → Γ ⊢i ψ^{evar:0↦x}^[[evar:E↦p]] <---> ψ^{evar:0↦x}^[[evar:E↦q]] using gpi
E ∈ {[x]} ∪ EvS
Σ: Signature
sz: nat
Γ: Theory
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
E: evar
exdepth, mudepth: nat
gpi: ProofInfo
pf: Γ ⊢i p <---> q using gpi
IHsz: (ψ : Pattern) (wfψ : well_formed ψ), size' ψ ≤ sz → (EvS : EVarSet) (SvS : SVarSet), ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ p q wfψ wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ ⊆ SvS → Γ ⊢i ψ^[[evar:E↦p]] <---> ψ^[[evar:E↦q]] using gpi
ψ: Pattern
wfψ: well_formed (ex , ψ)
Hsz: S (size' ψ) ≤ S sz
EvS: EVarSet
SvS: SVarSet
i':= ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (ex , ψ))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (ex , ψ))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (ex , ψ)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E (ex , ψ) p q wfψ wfp wfq): ProofInfo
pile: ProofInfoLe i' gpi
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
E_in_EvS: E ∈ EvS
ψ_sub_EvS: free_evars (ex , ψ) ⊆ EvS
p_sub_SvS: free_svars p ⊆ SvS
q_sub_SvS: free_svars q ⊆ SvS
ψ_sub_SvS: free_svars (ex , ψ) ⊆ SvS
HEinψ: E ∈ free_evars (ex , ψ)
x: evar
Heqx: x = evar_fresh (elements EvS)
frx: x ∉ EvS
H: well_formed ψ^{evar:0↦x}
H0: size' ψ^{evar:0↦x} ≤ sz
IH: ProofInfoLe (ExGen := list_to_set (evar_fresh_seq ({[x]} ∪ EvS) (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ^{evar:0↦x})), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ^{evar:0↦x})), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ^{evar:0↦x}) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' ({[x]} ∪ EvS) SvS E ψ^{evar:0↦x} p q H wfp wfq)) gpi → free_evars p ⊆ {[x]} ∪ EvS → free_evars q ⊆ {[x]} ∪ EvS → E ∈ {[x]} ∪ EvS → free_evars ψ^{evar:0↦x} ⊆ {[x]} ∪ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ^{evar:0↦x} ⊆ SvS → Γ ⊢i ψ^{evar:0↦x}^[[evar:E↦p]] <---> ψ^{evar:0↦x}^[[evar:E↦q]] using gpi
free_evars ψ^{evar:0↦x} ⊆ {[x]} ∪ EvS
Σ: Signature
sz: nat
Γ: Theory
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
E: evar
exdepth, mudepth: nat
gpi: ProofInfo
pf: Γ ⊢i p <---> q using gpi
IHsz: (ψ : Pattern) (wfψ : well_formed ψ), size' ψ ≤ sz → (EvS : EVarSet) (SvS : SVarSet), ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ p q wfψ wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ ⊆ SvS → Γ ⊢i ψ^[[evar:E↦p]] <---> ψ^[[evar:E↦q]] using gpi
ψ: Pattern
wfψ: well_formed (ex , ψ)
Hsz: S (size' ψ) ≤ S sz
EvS: EVarSet
SvS: SVarSet
i':= ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (ex , ψ))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (ex , ψ))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (ex , ψ)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E (ex , ψ) p q wfψ wfp wfq): ProofInfo
pile: ProofInfoLe i' gpi
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
E_in_EvS: E ∈ EvS
ψ_sub_EvS: free_evars (ex , ψ) ⊆ EvS
p_sub_SvS: free_svars p ⊆ SvS
q_sub_SvS: free_svars q ⊆ SvS
ψ_sub_SvS: free_svars (ex , ψ) ⊆ SvS
HEinψ: E ∈ free_evars (ex , ψ)
x: evar
Heqx: x = evar_fresh (elements EvS)
frx: x ∉ EvS
H: well_formed ψ^{evar:0↦x}
H0: size' ψ^{evar:0↦x} ≤ sz
IH: ProofInfoLe (ExGen := list_to_set (evar_fresh_seq ({[x]} ∪ EvS) (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ^{evar:0↦x})), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ^{evar:0↦x})), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ^{evar:0↦x}) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' ({[x]} ∪ EvS) SvS E ψ^{evar:0↦x} p q H wfp wfq)) gpi → free_evars p ⊆ {[x]} ∪ EvS → free_evars q ⊆ {[x]} ∪ EvS → E ∈ {[x]} ∪ EvS → free_evars ψ^{evar:0↦x} ⊆ {[x]} ∪ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ^{evar:0↦x} ⊆ SvS → Γ ⊢i ψ^{evar:0↦x}^[[evar:E↦p]] <---> ψ^{evar:0↦x}^[[evar:E↦q]] using gpi
free_svars p ⊆ SvS
Σ: Signature
sz: nat
Γ: Theory
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
E: evar
exdepth, mudepth: nat
gpi: ProofInfo
pf: Γ ⊢i p <---> q using gpi
IHsz: (ψ : Pattern) (wfψ : well_formed ψ), size' ψ ≤ sz → (EvS : EVarSet) (SvS : SVarSet), ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ p q wfψ wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ ⊆ SvS → Γ ⊢i ψ^[[evar:E↦p]] <---> ψ^[[evar:E↦q]] using gpi
ψ: Pattern
wfψ: well_formed (ex , ψ)
Hsz: S (size' ψ) ≤ S sz
EvS: EVarSet
SvS: SVarSet
i':= ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (ex , ψ))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (ex , ψ))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (ex , ψ)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E (ex , ψ) p q wfψ wfp wfq): ProofInfo
pile: ProofInfoLe i' gpi
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
E_in_EvS: E ∈ EvS
ψ_sub_EvS: free_evars (ex , ψ) ⊆ EvS
p_sub_SvS: free_svars p ⊆ SvS
q_sub_SvS: free_svars q ⊆ SvS
ψ_sub_SvS: free_svars (ex , ψ) ⊆ SvS
HEinψ: E ∈ free_evars (ex , ψ)
x: evar
Heqx: x = evar_fresh (elements EvS)
frx: x ∉ EvS
H: well_formed ψ^{evar:0↦x}
H0: size' ψ^{evar:0↦x} ≤ sz
IH: ProofInfoLe (ExGen := list_to_set (evar_fresh_seq ({[x]} ∪ EvS) (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ^{evar:0↦x})), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ^{evar:0↦x})), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ^{evar:0↦x}) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' ({[x]} ∪ EvS) SvS E ψ^{evar:0↦x} p q H wfp wfq)) gpi → free_evars p ⊆ {[x]} ∪ EvS → free_evars q ⊆ {[x]} ∪ EvS → E ∈ {[x]} ∪ EvS → free_evars ψ^{evar:0↦x} ⊆ {[x]} ∪ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ^{evar:0↦x} ⊆ SvS → Γ ⊢i ψ^{evar:0↦x}^[[evar:E↦p]] <---> ψ^{evar:0↦x}^[[evar:E↦q]] using gpi
free_svars q ⊆ SvS
Σ: Signature
sz: nat
Γ: Theory
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
E: evar
exdepth, mudepth: nat
gpi: ProofInfo
pf: Γ ⊢i p <---> q using gpi
IHsz: (ψ : Pattern) (wfψ : well_formed ψ), size' ψ ≤ sz → (EvS : EVarSet) (SvS : SVarSet), ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ p q wfψ wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ ⊆ SvS → Γ ⊢i ψ^[[evar:E↦p]] <---> ψ^[[evar:E↦q]] using gpi
ψ: Pattern
wfψ: well_formed (ex , ψ)
Hsz: S (size' ψ) ≤ S sz
EvS: EVarSet
SvS: SVarSet
i':= ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (ex , ψ))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (ex , ψ))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (ex , ψ)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E (ex , ψ) p q wfψ wfp wfq): ProofInfo
pile: ProofInfoLe i' gpi
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
E_in_EvS: E ∈ EvS
ψ_sub_EvS: free_evars (ex , ψ) ⊆ EvS
p_sub_SvS: free_svars p ⊆ SvS
q_sub_SvS: free_svars q ⊆ SvS
ψ_sub_SvS: free_svars (ex , ψ) ⊆ SvS
HEinψ: E ∈ free_evars (ex , ψ)
x: evar
Heqx: x = evar_fresh (elements EvS)
frx: x ∉ EvS
H: well_formed ψ^{evar:0↦x}
H0: size' ψ^{evar:0↦x} ≤ sz
IH: ProofInfoLe (ExGen := list_to_set (evar_fresh_seq ({[x]} ∪ EvS) (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ^{evar:0↦x})), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ^{evar:0↦x})), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ^{evar:0↦x}) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' ({[x]} ∪ EvS) SvS E ψ^{evar:0↦x} p q H wfp wfq)) gpi → free_evars p ⊆ {[x]} ∪ EvS → free_evars q ⊆ {[x]} ∪ EvS → E ∈ {[x]} ∪ EvS → free_evars ψ^{evar:0↦x} ⊆ {[x]} ∪ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ^{evar:0↦x} ⊆ SvS → Γ ⊢i ψ^{evar:0↦x}^[[evar:E↦p]] <---> ψ^{evar:0↦x}^[[evar:E↦q]] using gpi
free_svars ψ^{evar:0↦x} ⊆ SvS
Σ: Signature
sz: nat
Γ: Theory
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
E: evar
exdepth, mudepth: nat
gpi: ProofInfo
pf: Γ ⊢i p <---> q using gpi
IHsz: (ψ : Pattern) (wfψ : well_formed ψ), size' ψ ≤ sz → (EvS : EVarSet) (SvS : SVarSet), ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ p q wfψ wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ ⊆ SvS → Γ ⊢i ψ^[[evar:E↦p]] <---> ψ^[[evar:E↦q]] using gpi
ψ: Pattern
wfψ: well_formed (ex , ψ)
Hsz: S (size' ψ) ≤ S sz
EvS: EVarSet
SvS: SVarSet
i':= ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (ex , ψ))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (ex , ψ))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (ex , ψ)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E (ex , ψ) p q wfψ wfp wfq): ProofInfo
pile: ProofInfoLe i' gpi
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
E_in_EvS: E ∈ EvS
ψ_sub_EvS: free_evars (ex , ψ) ⊆ EvS
p_sub_SvS: free_svars p ⊆ SvS
q_sub_SvS: free_svars q ⊆ SvS
ψ_sub_SvS: free_svars (ex , ψ) ⊆ SvS
HEinψ: E ∈ free_evars (ex , ψ)
x: evar
Heqx: x = evar_fresh (elements EvS)
frx: x ∉ EvS
H: well_formed ψ^{evar:0↦x}
H0: size' ψ^{evar:0↦x} ≤ sz
IH: Γ ⊢i ψ^{evar:0↦x}^[[evar:E↦p]] <---> ψ^{evar:0↦x}^[[evar:E↦q]] using gpi
Γ ⊢i (ex , ψ^[[evar:E↦p]]) <---> (ex , ψ^[[evar:E↦q]]) using gpi
Σ: Signature
sz: nat
Γ: Theory
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
E: evar
exdepth, mudepth: nat
gpi: ProofInfo
pf: Γ ⊢i p <---> q using gpi
IHsz: (ψ : Pattern) (wfψ : well_formed ψ), size' ψ ≤ sz → (EvS : EVarSet) (SvS : SVarSet), ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ p q wfψ wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ ⊆ SvS → Γ ⊢i ψ^[[evar:E↦p]] <---> ψ^[[evar:E↦q]] using gpi
ψ: Pattern
wfψ: well_formed (ex , ψ)
Hsz: S (size' ψ) ≤ S sz
EvS: EVarSet
SvS: SVarSet
i':= ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (ex , ψ))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (ex , ψ))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (ex , ψ)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E (ex , ψ) p q wfψ wfp wfq): ProofInfo
pile: ProofInfoLe i' gpi
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
E_in_EvS: E ∈ EvS
ψ_sub_EvS: free_evars (ex , ψ) ⊆ EvS
p_sub_SvS: free_svars p ⊆ SvS
q_sub_SvS: free_svars q ⊆ SvS
ψ_sub_SvS: free_svars (ex , ψ) ⊆ SvS
HEinψ: E ∈ free_evars (ex , ψ)
x: evar
Heqx: x = evar_fresh (elements EvS)
frx: x ∉ EvS
H: well_formed ψ^{evar:0↦x}
H0: size' ψ^{evar:0↦x} ≤ sz
IH: ProofInfoLe (ExGen := list_to_set (evar_fresh_seq ({[x]} ∪ EvS) (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ^{evar:0↦x})), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ^{evar:0↦x})), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ^{evar:0↦x}) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' ({[x]} ∪ EvS) SvS E ψ^{evar:0↦x} p q H wfp wfq)) gpi → free_evars p ⊆ {[x]} ∪ EvS → free_evars q ⊆ {[x]} ∪ EvS → E ∈ {[x]} ∪ EvS → free_evars ψ^{evar:0↦x} ⊆ {[x]} ∪ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ^{evar:0↦x} ⊆ SvS → Γ ⊢i ψ^{evar:0↦x}^[[evar:E↦p]] <---> ψ^{evar:0↦x}^[[evar:E↦q]] using gpi

free_evars p ⊆ {[x]} ∪ EvS
Σ: Signature
p: Pattern
EvS: EVarSet
p_sub_EvS: free_evars p ⊆ EvS
x: evar

free_evars p ⊆ {[x]} ∪ EvS
abstract (set_solver).
Σ: Signature
sz: nat
Γ: Theory
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
E: evar
exdepth, mudepth: nat
gpi: ProofInfo
pf: Γ ⊢i p <---> q using gpi
IHsz: (ψ : Pattern) (wfψ : well_formed ψ), size' ψ ≤ sz → (EvS : EVarSet) (SvS : SVarSet), ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ p q wfψ wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ ⊆ SvS → Γ ⊢i ψ^[[evar:E↦p]] <---> ψ^[[evar:E↦q]] using gpi
ψ: Pattern
wfψ: well_formed (ex , ψ)
Hsz: S (size' ψ) ≤ S sz
EvS: EVarSet
SvS: SVarSet
i':= ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (ex , ψ))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (ex , ψ))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (ex , ψ)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E (ex , ψ) p q wfψ wfp wfq): ProofInfo
pile: ProofInfoLe i' gpi
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
E_in_EvS: E ∈ EvS
ψ_sub_EvS: free_evars (ex , ψ) ⊆ EvS
p_sub_SvS: free_svars p ⊆ SvS
q_sub_SvS: free_svars q ⊆ SvS
ψ_sub_SvS: free_svars (ex , ψ) ⊆ SvS
HEinψ: E ∈ free_evars (ex , ψ)
x: evar
Heqx: x = evar_fresh (elements EvS)
frx: x ∉ EvS
H: well_formed ψ^{evar:0↦x}
H0: size' ψ^{evar:0↦x} ≤ sz
IH: ProofInfoLe (ExGen := list_to_set (evar_fresh_seq ({[x]} ∪ EvS) (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ^{evar:0↦x})), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ^{evar:0↦x})), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ^{evar:0↦x}) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' ({[x]} ∪ EvS) SvS E ψ^{evar:0↦x} p q H wfp wfq)) gpi → free_evars p ⊆ {[x]} ∪ EvS → free_evars q ⊆ {[x]} ∪ EvS → E ∈ {[x]} ∪ EvS → free_evars ψ^{evar:0↦x} ⊆ {[x]} ∪ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ^{evar:0↦x} ⊆ SvS → Γ ⊢i ψ^{evar:0↦x}^[[evar:E↦p]] <---> ψ^{evar:0↦x}^[[evar:E↦q]] using gpi

free_evars q ⊆ {[x]} ∪ EvS
Σ: Signature
sz: nat
Γ: Theory
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
E: evar
exdepth, mudepth: nat
gpi: ProofInfo
pf: Γ ⊢i p <---> q using gpi
IHsz: (ψ : Pattern) (wfψ : well_formed ψ), size' ψ ≤ sz → (EvS : EVarSet) (SvS : SVarSet), ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ p q wfψ wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ ⊆ SvS → Γ ⊢i ψ^[[evar:E↦p]] <---> ψ^[[evar:E↦q]] using gpi
ψ: Pattern
wfψ: well_formed (ex , ψ)
Hsz: S (size' ψ) ≤ S sz
EvS: EVarSet
SvS: SVarSet
i':= ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (ex , ψ))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (ex , ψ))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (ex , ψ)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E (ex , ψ) p q wfψ wfp wfq): ProofInfo
pile: ProofInfoLe i' gpi
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
E_in_EvS: E ∈ EvS
ψ_sub_EvS: free_evars (ex , ψ) ⊆ EvS
p_sub_SvS: free_svars p ⊆ SvS
q_sub_SvS: free_svars q ⊆ SvS
ψ_sub_SvS: free_svars (ex , ψ) ⊆ SvS
HEinψ: E ∈ free_evars (ex , ψ)
x: evar
Heqx: x = evar_fresh (elements EvS)
frx: x ∉ EvS
H: well_formed ψ^{evar:0↦x}
H0: size' ψ^{evar:0↦x} ≤ sz
IH: ProofInfoLe (ExGen := list_to_set (evar_fresh_seq ({[x]} ∪ EvS) (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ^{evar:0↦x})), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ^{evar:0↦x})), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ^{evar:0↦x}) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' ({[x]} ∪ EvS) SvS E ψ^{evar:0↦x} p q H wfp wfq)) gpi → free_evars p ⊆ {[x]} ∪ EvS → free_evars q ⊆ {[x]} ∪ EvS → E ∈ {[x]} ∪ EvS → free_evars ψ^{evar:0↦x} ⊆ {[x]} ∪ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ^{evar:0↦x} ⊆ SvS → Γ ⊢i ψ^{evar:0↦x}^[[evar:E↦p]] <---> ψ^{evar:0↦x}^[[evar:E↦q]] using gpi
E ∈ {[x]} ∪ EvS
Σ: Signature
sz: nat
Γ: Theory
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
E: evar
exdepth, mudepth: nat
gpi: ProofInfo
pf: Γ ⊢i p <---> q using gpi
IHsz: (ψ : Pattern) (wfψ : well_formed ψ), size' ψ ≤ sz → (EvS : EVarSet) (SvS : SVarSet), ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ p q wfψ wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ ⊆ SvS → Γ ⊢i ψ^[[evar:E↦p]] <---> ψ^[[evar:E↦q]] using gpi
ψ: Pattern
wfψ: well_formed (ex , ψ)
Hsz: S (size' ψ) ≤ S sz
EvS: EVarSet
SvS: SVarSet
i':= ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (ex , ψ))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (ex , ψ))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (ex , ψ)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E (ex , ψ) p q wfψ wfp wfq): ProofInfo
pile: ProofInfoLe i' gpi
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
E_in_EvS: E ∈ EvS
ψ_sub_EvS: free_evars (ex , ψ) ⊆ EvS
p_sub_SvS: free_svars p ⊆ SvS
q_sub_SvS: free_svars q ⊆ SvS
ψ_sub_SvS: free_svars (ex , ψ) ⊆ SvS
HEinψ: E ∈ free_evars (ex , ψ)
x: evar
Heqx: x = evar_fresh (elements EvS)
frx: x ∉ EvS
H: well_formed ψ^{evar:0↦x}
H0: size' ψ^{evar:0↦x} ≤ sz
IH: ProofInfoLe (ExGen := list_to_set (evar_fresh_seq ({[x]} ∪ EvS) (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ^{evar:0↦x})), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ^{evar:0↦x})), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ^{evar:0↦x}) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' ({[x]} ∪ EvS) SvS E ψ^{evar:0↦x} p q H wfp wfq)) gpi → free_evars p ⊆ {[x]} ∪ EvS → free_evars q ⊆ {[x]} ∪ EvS → E ∈ {[x]} ∪ EvS → free_evars ψ^{evar:0↦x} ⊆ {[x]} ∪ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ^{evar:0↦x} ⊆ SvS → Γ ⊢i ψ^{evar:0↦x}^[[evar:E↦p]] <---> ψ^{evar:0↦x}^[[evar:E↦q]] using gpi
free_evars ψ^{evar:0↦x} ⊆ {[x]} ∪ EvS
Σ: Signature
sz: nat
Γ: Theory
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
E: evar
exdepth, mudepth: nat
gpi: ProofInfo
pf: Γ ⊢i p <---> q using gpi
IHsz: (ψ : Pattern) (wfψ : well_formed ψ), size' ψ ≤ sz → (EvS : EVarSet) (SvS : SVarSet), ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ p q wfψ wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ ⊆ SvS → Γ ⊢i ψ^[[evar:E↦p]] <---> ψ^[[evar:E↦q]] using gpi
ψ: Pattern
wfψ: well_formed (ex , ψ)
Hsz: S (size' ψ) ≤ S sz
EvS: EVarSet
SvS: SVarSet
i':= ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (ex , ψ))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (ex , ψ))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (ex , ψ)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E (ex , ψ) p q wfψ wfp wfq): ProofInfo
pile: ProofInfoLe i' gpi
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
E_in_EvS: E ∈ EvS
ψ_sub_EvS: free_evars (ex , ψ) ⊆ EvS
p_sub_SvS: free_svars p ⊆ SvS
q_sub_SvS: free_svars q ⊆ SvS
ψ_sub_SvS: free_svars (ex , ψ) ⊆ SvS
HEinψ: E ∈ free_evars (ex , ψ)
x: evar
Heqx: x = evar_fresh (elements EvS)
frx: x ∉ EvS
H: well_formed ψ^{evar:0↦x}
H0: size' ψ^{evar:0↦x} ≤ sz
IH: ProofInfoLe (ExGen := list_to_set (evar_fresh_seq ({[x]} ∪ EvS) (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ^{evar:0↦x})), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ^{evar:0↦x})), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ^{evar:0↦x}) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' ({[x]} ∪ EvS) SvS E ψ^{evar:0↦x} p q H wfp wfq)) gpi → free_evars p ⊆ {[x]} ∪ EvS → free_evars q ⊆ {[x]} ∪ EvS → E ∈ {[x]} ∪ EvS → free_evars ψ^{evar:0↦x} ⊆ {[x]} ∪ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ^{evar:0↦x} ⊆ SvS → Γ ⊢i ψ^{evar:0↦x}^[[evar:E↦p]] <---> ψ^{evar:0↦x}^[[evar:E↦q]] using gpi
free_svars p ⊆ SvS
Σ: Signature
sz: nat
Γ: Theory
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
E: evar
exdepth, mudepth: nat
gpi: ProofInfo
pf: Γ ⊢i p <---> q using gpi
IHsz: (ψ : Pattern) (wfψ : well_formed ψ), size' ψ ≤ sz → (EvS : EVarSet) (SvS : SVarSet), ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ p q wfψ wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ ⊆ SvS → Γ ⊢i ψ^[[evar:E↦p]] <---> ψ^[[evar:E↦q]] using gpi
ψ: Pattern
wfψ: well_formed (ex , ψ)
Hsz: S (size' ψ) ≤ S sz
EvS: EVarSet
SvS: SVarSet
i':= ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (ex , ψ))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (ex , ψ))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (ex , ψ)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E (ex , ψ) p q wfψ wfp wfq): ProofInfo
pile: ProofInfoLe i' gpi
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
E_in_EvS: E ∈ EvS
ψ_sub_EvS: free_evars (ex , ψ) ⊆ EvS
p_sub_SvS: free_svars p ⊆ SvS
q_sub_SvS: free_svars q ⊆ SvS
ψ_sub_SvS: free_svars (ex , ψ) ⊆ SvS
HEinψ: E ∈ free_evars (ex , ψ)
x: evar
Heqx: x = evar_fresh (elements EvS)
frx: x ∉ EvS
H: well_formed ψ^{evar:0↦x}
H0: size' ψ^{evar:0↦x} ≤ sz
IH: ProofInfoLe (ExGen := list_to_set (evar_fresh_seq ({[x]} ∪ EvS) (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ^{evar:0↦x})), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ^{evar:0↦x})), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ^{evar:0↦x}) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' ({[x]} ∪ EvS) SvS E ψ^{evar:0↦x} p q H wfp wfq)) gpi → free_evars p ⊆ {[x]} ∪ EvS → free_evars q ⊆ {[x]} ∪ EvS → E ∈ {[x]} ∪ EvS → free_evars ψ^{evar:0↦x} ⊆ {[x]} ∪ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ^{evar:0↦x} ⊆ SvS → Γ ⊢i ψ^{evar:0↦x}^[[evar:E↦p]] <---> ψ^{evar:0↦x}^[[evar:E↦q]] using gpi
free_svars q ⊆ SvS
Σ: Signature
sz: nat
Γ: Theory
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
E: evar
exdepth, mudepth: nat
gpi: ProofInfo
pf: Γ ⊢i p <---> q using gpi
IHsz: (ψ : Pattern) (wfψ : well_formed ψ), size' ψ ≤ sz → (EvS : EVarSet) (SvS : SVarSet), ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ p q wfψ wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ ⊆ SvS → Γ ⊢i ψ^[[evar:E↦p]] <---> ψ^[[evar:E↦q]] using gpi
ψ: Pattern
wfψ: well_formed (ex , ψ)
Hsz: S (size' ψ) ≤ S sz
EvS: EVarSet
SvS: SVarSet
i':= ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (ex , ψ))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (ex , ψ))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (ex , ψ)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E (ex , ψ) p q wfψ wfp wfq): ProofInfo
pile: ProofInfoLe i' gpi
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
E_in_EvS: E ∈ EvS
ψ_sub_EvS: free_evars (ex , ψ) ⊆ EvS
p_sub_SvS: free_svars p ⊆ SvS
q_sub_SvS: free_svars q ⊆ SvS
ψ_sub_SvS: free_svars (ex , ψ) ⊆ SvS
HEinψ: E ∈ free_evars (ex , ψ)
x: evar
Heqx: x = evar_fresh (elements EvS)
frx: x ∉ EvS
H: well_formed ψ^{evar:0↦x}
H0: size' ψ^{evar:0↦x} ≤ sz
IH: ProofInfoLe (ExGen := list_to_set (evar_fresh_seq ({[x]} ∪ EvS) (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ^{evar:0↦x})), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ^{evar:0↦x})), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ^{evar:0↦x}) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' ({[x]} ∪ EvS) SvS E ψ^{evar:0↦x} p q H wfp wfq)) gpi → free_evars p ⊆ {[x]} ∪ EvS → free_evars q ⊆ {[x]} ∪ EvS → E ∈ {[x]} ∪ EvS → free_evars ψ^{evar:0↦x} ⊆ {[x]} ∪ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ^{evar:0↦x} ⊆ SvS → Γ ⊢i ψ^{evar:0↦x}^[[evar:E↦p]] <---> ψ^{evar:0↦x}^[[evar:E↦q]] using gpi
free_svars ψ^{evar:0↦x} ⊆ SvS
Σ: Signature
sz: nat
Γ: Theory
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
E: evar
exdepth, mudepth: nat
gpi: ProofInfo
pf: Γ ⊢i p <---> q using gpi
IHsz: (ψ : Pattern) (wfψ : well_formed ψ), size' ψ ≤ sz → (EvS : EVarSet) (SvS : SVarSet), ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ p q wfψ wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ ⊆ SvS → Γ ⊢i ψ^[[evar:E↦p]] <---> ψ^[[evar:E↦q]] using gpi
ψ: Pattern
wfψ: well_formed (ex , ψ)
Hsz: S (size' ψ) ≤ S sz
EvS: EVarSet
SvS: SVarSet
i':= ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (ex , ψ))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (ex , ψ))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (ex , ψ)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E (ex , ψ) p q wfψ wfp wfq): ProofInfo
pile: ProofInfoLe i' gpi
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
E_in_EvS: E ∈ EvS
ψ_sub_EvS: free_evars (ex , ψ) ⊆ EvS
p_sub_SvS: free_svars p ⊆ SvS
q_sub_SvS: free_svars q ⊆ SvS
ψ_sub_SvS: free_svars (ex , ψ) ⊆ SvS
HEinψ: E ∈ free_evars (ex , ψ)
x: evar
Heqx: x = evar_fresh (elements EvS)
frx: x ∉ EvS
H: well_formed ψ^{evar:0↦x}
H0: size' ψ^{evar:0↦x} ≤ sz
IH: Γ ⊢i ψ^{evar:0↦x}^[[evar:E↦p]] <---> ψ^{evar:0↦x}^[[evar:E↦q]] using gpi
Γ ⊢i (ex , ψ^[[evar:E↦p]]) <---> (ex , ψ^[[evar:E↦q]]) using gpi
Σ: Signature
sz: nat
Γ: Theory
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
E: evar
exdepth, mudepth: nat
gpi: ProofInfo
pf: Γ ⊢i p <---> q using gpi
IHsz: (ψ : Pattern) (wfψ : well_formed ψ), size' ψ ≤ sz → (EvS : EVarSet) (SvS : SVarSet), ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ p q wfψ wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ ⊆ SvS → Γ ⊢i ψ^[[evar:E↦p]] <---> ψ^[[evar:E↦q]] using gpi
ψ: Pattern
wfψ: well_formed (ex , ψ)
Hsz: S (size' ψ) ≤ S sz
EvS: EVarSet
SvS: SVarSet
i':= ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (ex , ψ))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (ex , ψ))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (ex , ψ)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E (ex , ψ) p q wfψ wfp wfq): ProofInfo
pile: ProofInfoLe i' gpi
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
E_in_EvS: E ∈ EvS
ψ_sub_EvS: free_evars (ex , ψ) ⊆ EvS
p_sub_SvS: free_svars p ⊆ SvS
q_sub_SvS: free_svars q ⊆ SvS
ψ_sub_SvS: free_svars (ex , ψ) ⊆ SvS
HEinψ: E ∈ free_evars (ex , ψ)
x: evar
Heqx: x = evar_fresh (elements EvS)
frx: x ∉ EvS
H: well_formed ψ^{evar:0↦x}
H0: size' ψ^{evar:0↦x} ≤ sz
IH: ProofInfoLe (ExGen := list_to_set (evar_fresh_seq ({[x]} ∪ EvS) (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ^{evar:0↦x})), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ^{evar:0↦x})), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ^{evar:0↦x}) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' ({[x]} ∪ EvS) SvS E ψ^{evar:0↦x} p q H wfp wfq)) gpi → free_evars p ⊆ {[x]} ∪ EvS → free_evars q ⊆ {[x]} ∪ EvS → E ∈ {[x]} ∪ EvS → free_evars ψ^{evar:0↦x} ⊆ {[x]} ∪ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ^{evar:0↦x} ⊆ SvS → Γ ⊢i ψ^{evar:0↦x}^[[evar:E↦p]] <---> ψ^{evar:0↦x}^[[evar:E↦q]] using gpi

free_evars q ⊆ {[x]} ∪ EvS
Σ: Signature
q: Pattern
EvS: EVarSet
q_sub_EvS: free_evars q ⊆ EvS
x: evar

free_evars q ⊆ {[x]} ∪ EvS
abstract (set_solver).
Σ: Signature
sz: nat
Γ: Theory
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
E: evar
exdepth, mudepth: nat
gpi: ProofInfo
pf: Γ ⊢i p <---> q using gpi
IHsz: (ψ : Pattern) (wfψ : well_formed ψ), size' ψ ≤ sz → (EvS : EVarSet) (SvS : SVarSet), ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ p q wfψ wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ ⊆ SvS → Γ ⊢i ψ^[[evar:E↦p]] <---> ψ^[[evar:E↦q]] using gpi
ψ: Pattern
wfψ: well_formed (ex , ψ)
Hsz: S (size' ψ) ≤ S sz
EvS: EVarSet
SvS: SVarSet
i':= ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (ex , ψ))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (ex , ψ))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (ex , ψ)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E (ex , ψ) p q wfψ wfp wfq): ProofInfo
pile: ProofInfoLe i' gpi
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
E_in_EvS: E ∈ EvS
ψ_sub_EvS: free_evars (ex , ψ) ⊆ EvS
p_sub_SvS: free_svars p ⊆ SvS
q_sub_SvS: free_svars q ⊆ SvS
ψ_sub_SvS: free_svars (ex , ψ) ⊆ SvS
HEinψ: E ∈ free_evars (ex , ψ)
x: evar
Heqx: x = evar_fresh (elements EvS)
frx: x ∉ EvS
H: well_formed ψ^{evar:0↦x}
H0: size' ψ^{evar:0↦x} ≤ sz
IH: ProofInfoLe (ExGen := list_to_set (evar_fresh_seq ({[x]} ∪ EvS) (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ^{evar:0↦x})), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ^{evar:0↦x})), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ^{evar:0↦x}) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' ({[x]} ∪ EvS) SvS E ψ^{evar:0↦x} p q H wfp wfq)) gpi → free_evars p ⊆ {[x]} ∪ EvS → free_evars q ⊆ {[x]} ∪ EvS → E ∈ {[x]} ∪ EvS → free_evars ψ^{evar:0↦x} ⊆ {[x]} ∪ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ^{evar:0↦x} ⊆ SvS → Γ ⊢i ψ^{evar:0↦x}^[[evar:E↦p]] <---> ψ^{evar:0↦x}^[[evar:E↦q]] using gpi

E ∈ {[x]} ∪ EvS
Σ: Signature
sz: nat
Γ: Theory
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
E: evar
exdepth, mudepth: nat
gpi: ProofInfo
pf: Γ ⊢i p <---> q using gpi
IHsz: (ψ : Pattern) (wfψ : well_formed ψ), size' ψ ≤ sz → (EvS : EVarSet) (SvS : SVarSet), ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ p q wfψ wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ ⊆ SvS → Γ ⊢i ψ^[[evar:E↦p]] <---> ψ^[[evar:E↦q]] using gpi
ψ: Pattern
wfψ: well_formed (ex , ψ)
Hsz: S (size' ψ) ≤ S sz
EvS: EVarSet
SvS: SVarSet
i':= ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (ex , ψ))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (ex , ψ))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (ex , ψ)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E (ex , ψ) p q wfψ wfp wfq): ProofInfo
pile: ProofInfoLe i' gpi
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
E_in_EvS: E ∈ EvS
ψ_sub_EvS: free_evars (ex , ψ) ⊆ EvS
p_sub_SvS: free_svars p ⊆ SvS
q_sub_SvS: free_svars q ⊆ SvS
ψ_sub_SvS: free_svars (ex , ψ) ⊆ SvS
HEinψ: E ∈ free_evars (ex , ψ)
x: evar
Heqx: x = evar_fresh (elements EvS)
frx: x ∉ EvS
H: well_formed ψ^{evar:0↦x}
H0: size' ψ^{evar:0↦x} ≤ sz
IH: ProofInfoLe (ExGen := list_to_set (evar_fresh_seq ({[x]} ∪ EvS) (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ^{evar:0↦x})), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ^{evar:0↦x})), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ^{evar:0↦x}) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' ({[x]} ∪ EvS) SvS E ψ^{evar:0↦x} p q H wfp wfq)) gpi → free_evars p ⊆ {[x]} ∪ EvS → free_evars q ⊆ {[x]} ∪ EvS → E ∈ {[x]} ∪ EvS → free_evars ψ^{evar:0↦x} ⊆ {[x]} ∪ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ^{evar:0↦x} ⊆ SvS → Γ ⊢i ψ^{evar:0↦x}^[[evar:E↦p]] <---> ψ^{evar:0↦x}^[[evar:E↦q]] using gpi
free_evars ψ^{evar:0↦x} ⊆ {[x]} ∪ EvS
Σ: Signature
sz: nat
Γ: Theory
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
E: evar
exdepth, mudepth: nat
gpi: ProofInfo
pf: Γ ⊢i p <---> q using gpi
IHsz: (ψ : Pattern) (wfψ : well_formed ψ), size' ψ ≤ sz → (EvS : EVarSet) (SvS : SVarSet), ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ p q wfψ wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ ⊆ SvS → Γ ⊢i ψ^[[evar:E↦p]] <---> ψ^[[evar:E↦q]] using gpi
ψ: Pattern
wfψ: well_formed (ex , ψ)
Hsz: S (size' ψ) ≤ S sz
EvS: EVarSet
SvS: SVarSet
i':= ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (ex , ψ))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (ex , ψ))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (ex , ψ)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E (ex , ψ) p q wfψ wfp wfq): ProofInfo
pile: ProofInfoLe i' gpi
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
E_in_EvS: E ∈ EvS
ψ_sub_EvS: free_evars (ex , ψ) ⊆ EvS
p_sub_SvS: free_svars p ⊆ SvS
q_sub_SvS: free_svars q ⊆ SvS
ψ_sub_SvS: free_svars (ex , ψ) ⊆ SvS
HEinψ: E ∈ free_evars (ex , ψ)
x: evar
Heqx: x = evar_fresh (elements EvS)
frx: x ∉ EvS
H: well_formed ψ^{evar:0↦x}
H0: size' ψ^{evar:0↦x} ≤ sz
IH: ProofInfoLe (ExGen := list_to_set (evar_fresh_seq ({[x]} ∪ EvS) (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ^{evar:0↦x})), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ^{evar:0↦x})), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ^{evar:0↦x}) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' ({[x]} ∪ EvS) SvS E ψ^{evar:0↦x} p q H wfp wfq)) gpi → free_evars p ⊆ {[x]} ∪ EvS → free_evars q ⊆ {[x]} ∪ EvS → E ∈ {[x]} ∪ EvS → free_evars ψ^{evar:0↦x} ⊆ {[x]} ∪ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ^{evar:0↦x} ⊆ SvS → Γ ⊢i ψ^{evar:0↦x}^[[evar:E↦p]] <---> ψ^{evar:0↦x}^[[evar:E↦q]] using gpi
free_svars p ⊆ SvS
Σ: Signature
sz: nat
Γ: Theory
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
E: evar
exdepth, mudepth: nat
gpi: ProofInfo
pf: Γ ⊢i p <---> q using gpi
IHsz: (ψ : Pattern) (wfψ : well_formed ψ), size' ψ ≤ sz → (EvS : EVarSet) (SvS : SVarSet), ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ p q wfψ wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ ⊆ SvS → Γ ⊢i ψ^[[evar:E↦p]] <---> ψ^[[evar:E↦q]] using gpi
ψ: Pattern
wfψ: well_formed (ex , ψ)
Hsz: S (size' ψ) ≤ S sz
EvS: EVarSet
SvS: SVarSet
i':= ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (ex , ψ))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (ex , ψ))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (ex , ψ)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E (ex , ψ) p q wfψ wfp wfq): ProofInfo
pile: ProofInfoLe i' gpi
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
E_in_EvS: E ∈ EvS
ψ_sub_EvS: free_evars (ex , ψ) ⊆ EvS
p_sub_SvS: free_svars p ⊆ SvS
q_sub_SvS: free_svars q ⊆ SvS
ψ_sub_SvS: free_svars (ex , ψ) ⊆ SvS
HEinψ: E ∈ free_evars (ex , ψ)
x: evar
Heqx: x = evar_fresh (elements EvS)
frx: x ∉ EvS
H: well_formed ψ^{evar:0↦x}
H0: size' ψ^{evar:0↦x} ≤ sz
IH: ProofInfoLe (ExGen := list_to_set (evar_fresh_seq ({[x]} ∪ EvS) (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ^{evar:0↦x})), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ^{evar:0↦x})), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ^{evar:0↦x}) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' ({[x]} ∪ EvS) SvS E ψ^{evar:0↦x} p q H wfp wfq)) gpi → free_evars p ⊆ {[x]} ∪ EvS → free_evars q ⊆ {[x]} ∪ EvS → E ∈ {[x]} ∪ EvS → free_evars ψ^{evar:0↦x} ⊆ {[x]} ∪ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ^{evar:0↦x} ⊆ SvS → Γ ⊢i ψ^{evar:0↦x}^[[evar:E↦p]] <---> ψ^{evar:0↦x}^[[evar:E↦q]] using gpi
free_svars q ⊆ SvS
Σ: Signature
sz: nat
Γ: Theory
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
E: evar
exdepth, mudepth: nat
gpi: ProofInfo
pf: Γ ⊢i p <---> q using gpi
IHsz: (ψ : Pattern) (wfψ : well_formed ψ), size' ψ ≤ sz → (EvS : EVarSet) (SvS : SVarSet), ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ p q wfψ wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ ⊆ SvS → Γ ⊢i ψ^[[evar:E↦p]] <---> ψ^[[evar:E↦q]] using gpi
ψ: Pattern
wfψ: well_formed (ex , ψ)
Hsz: S (size' ψ) ≤ S sz
EvS: EVarSet
SvS: SVarSet
i':= ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (ex , ψ))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (ex , ψ))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (ex , ψ)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E (ex , ψ) p q wfψ wfp wfq): ProofInfo
pile: ProofInfoLe i' gpi
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
E_in_EvS: E ∈ EvS
ψ_sub_EvS: free_evars (ex , ψ) ⊆ EvS
p_sub_SvS: free_svars p ⊆ SvS
q_sub_SvS: free_svars q ⊆ SvS
ψ_sub_SvS: free_svars (ex , ψ) ⊆ SvS
HEinψ: E ∈ free_evars (ex , ψ)
x: evar
Heqx: x = evar_fresh (elements EvS)
frx: x ∉ EvS
H: well_formed ψ^{evar:0↦x}
H0: size' ψ^{evar:0↦x} ≤ sz
IH: ProofInfoLe (ExGen := list_to_set (evar_fresh_seq ({[x]} ∪ EvS) (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ^{evar:0↦x})), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ^{evar:0↦x})), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ^{evar:0↦x}) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' ({[x]} ∪ EvS) SvS E ψ^{evar:0↦x} p q H wfp wfq)) gpi → free_evars p ⊆ {[x]} ∪ EvS → free_evars q ⊆ {[x]} ∪ EvS → E ∈ {[x]} ∪ EvS → free_evars ψ^{evar:0↦x} ⊆ {[x]} ∪ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ^{evar:0↦x} ⊆ SvS → Γ ⊢i ψ^{evar:0↦x}^[[evar:E↦p]] <---> ψ^{evar:0↦x}^[[evar:E↦q]] using gpi
free_svars ψ^{evar:0↦x} ⊆ SvS
Σ: Signature
sz: nat
Γ: Theory
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
E: evar
exdepth, mudepth: nat
gpi: ProofInfo
pf: Γ ⊢i p <---> q using gpi
IHsz: (ψ : Pattern) (wfψ : well_formed ψ), size' ψ ≤ sz → (EvS : EVarSet) (SvS : SVarSet), ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ p q wfψ wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ ⊆ SvS → Γ ⊢i ψ^[[evar:E↦p]] <---> ψ^[[evar:E↦q]] using gpi
ψ: Pattern
wfψ: well_formed (ex , ψ)
Hsz: S (size' ψ) ≤ S sz
EvS: EVarSet
SvS: SVarSet
i':= ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (ex , ψ))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (ex , ψ))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (ex , ψ)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E (ex , ψ) p q wfψ wfp wfq): ProofInfo
pile: ProofInfoLe i' gpi
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
E_in_EvS: E ∈ EvS
ψ_sub_EvS: free_evars (ex , ψ) ⊆ EvS
p_sub_SvS: free_svars p ⊆ SvS
q_sub_SvS: free_svars q ⊆ SvS
ψ_sub_SvS: free_svars (ex , ψ) ⊆ SvS
HEinψ: E ∈ free_evars (ex , ψ)
x: evar
Heqx: x = evar_fresh (elements EvS)
frx: x ∉ EvS
H: well_formed ψ^{evar:0↦x}
H0: size' ψ^{evar:0↦x} ≤ sz
IH: Γ ⊢i ψ^{evar:0↦x}^[[evar:E↦p]] <---> ψ^{evar:0↦x}^[[evar:E↦q]] using gpi
Γ ⊢i (ex , ψ^[[evar:E↦p]]) <---> (ex , ψ^[[evar:E↦q]]) using gpi
Σ: Signature
sz: nat
Γ: Theory
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
E: evar
exdepth, mudepth: nat
gpi: ProofInfo
pf: Γ ⊢i p <---> q using gpi
IHsz: (ψ : Pattern) (wfψ : well_formed ψ), size' ψ ≤ sz → (EvS : EVarSet) (SvS : SVarSet), ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ p q wfψ wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ ⊆ SvS → Γ ⊢i ψ^[[evar:E↦p]] <---> ψ^[[evar:E↦q]] using gpi
ψ: Pattern
wfψ: well_formed (ex , ψ)
Hsz: S (size' ψ) ≤ S sz
EvS: EVarSet
SvS: SVarSet
i':= ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (ex , ψ))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (ex , ψ))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (ex , ψ)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E (ex , ψ) p q wfψ wfp wfq): ProofInfo
pile: ProofInfoLe i' gpi
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
E_in_EvS: E ∈ EvS
ψ_sub_EvS: free_evars (ex , ψ) ⊆ EvS
p_sub_SvS: free_svars p ⊆ SvS
q_sub_SvS: free_svars q ⊆ SvS
ψ_sub_SvS: free_svars (ex , ψ) ⊆ SvS
HEinψ: E ∈ free_evars (ex , ψ)
x: evar
Heqx: x = evar_fresh (elements EvS)
frx: x ∉ EvS
H: well_formed ψ^{evar:0↦x}
H0: size' ψ^{evar:0↦x} ≤ sz
IH: ProofInfoLe (ExGen := list_to_set (evar_fresh_seq ({[x]} ∪ EvS) (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ^{evar:0↦x})), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ^{evar:0↦x})), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ^{evar:0↦x}) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' ({[x]} ∪ EvS) SvS E ψ^{evar:0↦x} p q H wfp wfq)) gpi → free_evars p ⊆ {[x]} ∪ EvS → free_evars q ⊆ {[x]} ∪ EvS → E ∈ {[x]} ∪ EvS → free_evars ψ^{evar:0↦x} ⊆ {[x]} ∪ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ^{evar:0↦x} ⊆ SvS → Γ ⊢i ψ^{evar:0↦x}^[[evar:E↦p]] <---> ψ^{evar:0↦x}^[[evar:E↦q]] using gpi

E ∈ {[x]} ∪ EvS
Σ: Signature
E: evar
EvS: EVarSet
E_in_EvS: E ∈ EvS
x: evar

E ∈ {[x]} ∪ EvS
abstract (set_solver).
Σ: Signature
sz: nat
Γ: Theory
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
E: evar
exdepth, mudepth: nat
gpi: ProofInfo
pf: Γ ⊢i p <---> q using gpi
IHsz: (ψ : Pattern) (wfψ : well_formed ψ), size' ψ ≤ sz → (EvS : EVarSet) (SvS : SVarSet), ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ p q wfψ wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ ⊆ SvS → Γ ⊢i ψ^[[evar:E↦p]] <---> ψ^[[evar:E↦q]] using gpi
ψ: Pattern
wfψ: well_formed (ex , ψ)
Hsz: S (size' ψ) ≤ S sz
EvS: EVarSet
SvS: SVarSet
i':= ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (ex , ψ))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (ex , ψ))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (ex , ψ)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E (ex , ψ) p q wfψ wfp wfq): ProofInfo
pile: ProofInfoLe i' gpi
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
E_in_EvS: E ∈ EvS
ψ_sub_EvS: free_evars (ex , ψ) ⊆ EvS
p_sub_SvS: free_svars p ⊆ SvS
q_sub_SvS: free_svars q ⊆ SvS
ψ_sub_SvS: free_svars (ex , ψ) ⊆ SvS
HEinψ: E ∈ free_evars (ex , ψ)
x: evar
Heqx: x = evar_fresh (elements EvS)
frx: x ∉ EvS
H: well_formed ψ^{evar:0↦x}
H0: size' ψ^{evar:0↦x} ≤ sz
IH: ProofInfoLe (ExGen := list_to_set (evar_fresh_seq ({[x]} ∪ EvS) (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ^{evar:0↦x})), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ^{evar:0↦x})), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ^{evar:0↦x}) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' ({[x]} ∪ EvS) SvS E ψ^{evar:0↦x} p q H wfp wfq)) gpi → free_evars p ⊆ {[x]} ∪ EvS → free_evars q ⊆ {[x]} ∪ EvS → E ∈ {[x]} ∪ EvS → free_evars ψ^{evar:0↦x} ⊆ {[x]} ∪ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ^{evar:0↦x} ⊆ SvS → Γ ⊢i ψ^{evar:0↦x}^[[evar:E↦p]] <---> ψ^{evar:0↦x}^[[evar:E↦q]] using gpi

free_evars ψ^{evar:0↦x} ⊆ {[x]} ∪ EvS
Σ: Signature
sz: nat
Γ: Theory
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
E: evar
exdepth, mudepth: nat
gpi: ProofInfo
pf: Γ ⊢i p <---> q using gpi
IHsz: (ψ : Pattern) (wfψ : well_formed ψ), size' ψ ≤ sz → (EvS : EVarSet) (SvS : SVarSet), ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ p q wfψ wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ ⊆ SvS → Γ ⊢i ψ^[[evar:E↦p]] <---> ψ^[[evar:E↦q]] using gpi
ψ: Pattern
wfψ: well_formed (ex , ψ)
Hsz: S (size' ψ) ≤ S sz
EvS: EVarSet
SvS: SVarSet
i':= ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (ex , ψ))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (ex , ψ))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (ex , ψ)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E (ex , ψ) p q wfψ wfp wfq): ProofInfo
pile: ProofInfoLe i' gpi
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
E_in_EvS: E ∈ EvS
ψ_sub_EvS: free_evars (ex , ψ) ⊆ EvS
p_sub_SvS: free_svars p ⊆ SvS
q_sub_SvS: free_svars q ⊆ SvS
ψ_sub_SvS: free_svars (ex , ψ) ⊆ SvS
HEinψ: E ∈ free_evars (ex , ψ)
x: evar
Heqx: x = evar_fresh (elements EvS)
frx: x ∉ EvS
H: well_formed ψ^{evar:0↦x}
H0: size' ψ^{evar:0↦x} ≤ sz
IH: ProofInfoLe (ExGen := list_to_set (evar_fresh_seq ({[x]} ∪ EvS) (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ^{evar:0↦x})), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ^{evar:0↦x})), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ^{evar:0↦x}) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' ({[x]} ∪ EvS) SvS E ψ^{evar:0↦x} p q H wfp wfq)) gpi → free_evars p ⊆ {[x]} ∪ EvS → free_evars q ⊆ {[x]} ∪ EvS → E ∈ {[x]} ∪ EvS → free_evars ψ^{evar:0↦x} ⊆ {[x]} ∪ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ^{evar:0↦x} ⊆ SvS → Γ ⊢i ψ^{evar:0↦x}^[[evar:E↦p]] <---> ψ^{evar:0↦x}^[[evar:E↦q]] using gpi
free_svars p ⊆ SvS
Σ: Signature
sz: nat
Γ: Theory
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
E: evar
exdepth, mudepth: nat
gpi: ProofInfo
pf: Γ ⊢i p <---> q using gpi
IHsz: (ψ : Pattern) (wfψ : well_formed ψ), size' ψ ≤ sz → (EvS : EVarSet) (SvS : SVarSet), ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ p q wfψ wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ ⊆ SvS → Γ ⊢i ψ^[[evar:E↦p]] <---> ψ^[[evar:E↦q]] using gpi
ψ: Pattern
wfψ: well_formed (ex , ψ)
Hsz: S (size' ψ) ≤ S sz
EvS: EVarSet
SvS: SVarSet
i':= ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (ex , ψ))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (ex , ψ))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (ex , ψ)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E (ex , ψ) p q wfψ wfp wfq): ProofInfo
pile: ProofInfoLe i' gpi
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
E_in_EvS: E ∈ EvS
ψ_sub_EvS: free_evars (ex , ψ) ⊆ EvS
p_sub_SvS: free_svars p ⊆ SvS
q_sub_SvS: free_svars q ⊆ SvS
ψ_sub_SvS: free_svars (ex , ψ) ⊆ SvS
HEinψ: E ∈ free_evars (ex , ψ)
x: evar
Heqx: x = evar_fresh (elements EvS)
frx: x ∉ EvS
H: well_formed ψ^{evar:0↦x}
H0: size' ψ^{evar:0↦x} ≤ sz
IH: ProofInfoLe (ExGen := list_to_set (evar_fresh_seq ({[x]} ∪ EvS) (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ^{evar:0↦x})), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ^{evar:0↦x})), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ^{evar:0↦x}) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' ({[x]} ∪ EvS) SvS E ψ^{evar:0↦x} p q H wfp wfq)) gpi → free_evars p ⊆ {[x]} ∪ EvS → free_evars q ⊆ {[x]} ∪ EvS → E ∈ {[x]} ∪ EvS → free_evars ψ^{evar:0↦x} ⊆ {[x]} ∪ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ^{evar:0↦x} ⊆ SvS → Γ ⊢i ψ^{evar:0↦x}^[[evar:E↦p]] <---> ψ^{evar:0↦x}^[[evar:E↦q]] using gpi
free_svars q ⊆ SvS
Σ: Signature
sz: nat
Γ: Theory
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
E: evar
exdepth, mudepth: nat
gpi: ProofInfo
pf: Γ ⊢i p <---> q using gpi
IHsz: (ψ : Pattern) (wfψ : well_formed ψ), size' ψ ≤ sz → (EvS : EVarSet) (SvS : SVarSet), ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ p q wfψ wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ ⊆ SvS → Γ ⊢i ψ^[[evar:E↦p]] <---> ψ^[[evar:E↦q]] using gpi
ψ: Pattern
wfψ: well_formed (ex , ψ)
Hsz: S (size' ψ) ≤ S sz
EvS: EVarSet
SvS: SVarSet
i':= ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (ex , ψ))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (ex , ψ))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (ex , ψ)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E (ex , ψ) p q wfψ wfp wfq): ProofInfo
pile: ProofInfoLe i' gpi
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
E_in_EvS: E ∈ EvS
ψ_sub_EvS: free_evars (ex , ψ) ⊆ EvS
p_sub_SvS: free_svars p ⊆ SvS
q_sub_SvS: free_svars q ⊆ SvS
ψ_sub_SvS: free_svars (ex , ψ) ⊆ SvS
HEinψ: E ∈ free_evars (ex , ψ)
x: evar
Heqx: x = evar_fresh (elements EvS)
frx: x ∉ EvS
H: well_formed ψ^{evar:0↦x}
H0: size' ψ^{evar:0↦x} ≤ sz
IH: ProofInfoLe (ExGen := list_to_set (evar_fresh_seq ({[x]} ∪ EvS) (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ^{evar:0↦x})), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ^{evar:0↦x})), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ^{evar:0↦x}) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' ({[x]} ∪ EvS) SvS E ψ^{evar:0↦x} p q H wfp wfq)) gpi → free_evars p ⊆ {[x]} ∪ EvS → free_evars q ⊆ {[x]} ∪ EvS → E ∈ {[x]} ∪ EvS → free_evars ψ^{evar:0↦x} ⊆ {[x]} ∪ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ^{evar:0↦x} ⊆ SvS → Γ ⊢i ψ^{evar:0↦x}^[[evar:E↦p]] <---> ψ^{evar:0↦x}^[[evar:E↦q]] using gpi
free_svars ψ^{evar:0↦x} ⊆ SvS
Σ: Signature
sz: nat
Γ: Theory
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
E: evar
exdepth, mudepth: nat
gpi: ProofInfo
pf: Γ ⊢i p <---> q using gpi
IHsz: (ψ : Pattern) (wfψ : well_formed ψ), size' ψ ≤ sz → (EvS : EVarSet) (SvS : SVarSet), ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ p q wfψ wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ ⊆ SvS → Γ ⊢i ψ^[[evar:E↦p]] <---> ψ^[[evar:E↦q]] using gpi
ψ: Pattern
wfψ: well_formed (ex , ψ)
Hsz: S (size' ψ) ≤ S sz
EvS: EVarSet
SvS: SVarSet
i':= ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (ex , ψ))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (ex , ψ))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (ex , ψ)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E (ex , ψ) p q wfψ wfp wfq): ProofInfo
pile: ProofInfoLe i' gpi
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
E_in_EvS: E ∈ EvS
ψ_sub_EvS: free_evars (ex , ψ) ⊆ EvS
p_sub_SvS: free_svars p ⊆ SvS
q_sub_SvS: free_svars q ⊆ SvS
ψ_sub_SvS: free_svars (ex , ψ) ⊆ SvS
HEinψ: E ∈ free_evars (ex , ψ)
x: evar
Heqx: x = evar_fresh (elements EvS)
frx: x ∉ EvS
H: well_formed ψ^{evar:0↦x}
H0: size' ψ^{evar:0↦x} ≤ sz
IH: Γ ⊢i ψ^{evar:0↦x}^[[evar:E↦p]] <---> ψ^{evar:0↦x}^[[evar:E↦q]] using gpi
Γ ⊢i (ex , ψ^[[evar:E↦p]]) <---> (ex , ψ^[[evar:E↦q]]) using gpi
Σ: Signature
sz: nat
Γ: Theory
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
E: evar
exdepth, mudepth: nat
gpi: ProofInfo
pf: Γ ⊢i p <---> q using gpi
IHsz: (ψ : Pattern) (wfψ : well_formed ψ), size' ψ ≤ sz → (EvS : EVarSet) (SvS : SVarSet), ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ p q wfψ wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ ⊆ SvS → Γ ⊢i ψ^[[evar:E↦p]] <---> ψ^[[evar:E↦q]] using gpi
ψ: Pattern
wfψ: well_formed (ex , ψ)
Hsz: S (size' ψ) ≤ S sz
EvS: EVarSet
SvS: SVarSet
i':= ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (ex , ψ))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (ex , ψ))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (ex , ψ)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E (ex , ψ) p q wfψ wfp wfq): ProofInfo
pile: ProofInfoLe i' gpi
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
E_in_EvS: E ∈ EvS
ψ_sub_EvS: free_evars (ex , ψ) ⊆ EvS
p_sub_SvS: free_svars p ⊆ SvS
q_sub_SvS: free_svars q ⊆ SvS
ψ_sub_SvS: free_svars (ex , ψ) ⊆ SvS
HEinψ: E ∈ free_evars (ex , ψ)
x: evar
Heqx: x = evar_fresh (elements EvS)
frx: x ∉ EvS
H: well_formed ψ^{evar:0↦x}
H0: size' ψ^{evar:0↦x} ≤ sz
IH: ProofInfoLe (ExGen := list_to_set (evar_fresh_seq ({[x]} ∪ EvS) (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ^{evar:0↦x})), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ^{evar:0↦x})), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ^{evar:0↦x}) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' ({[x]} ∪ EvS) SvS E ψ^{evar:0↦x} p q H wfp wfq)) gpi → free_evars p ⊆ {[x]} ∪ EvS → free_evars q ⊆ {[x]} ∪ EvS → E ∈ {[x]} ∪ EvS → free_evars ψ^{evar:0↦x} ⊆ {[x]} ∪ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ^{evar:0↦x} ⊆ SvS → Γ ⊢i ψ^{evar:0↦x}^[[evar:E↦p]] <---> ψ^{evar:0↦x}^[[evar:E↦q]] using gpi

free_evars ψ^{evar:0↦x} ⊆ {[x]} ∪ EvS
Σ: Signature
ψ: Pattern
EvS: EVarSet
ψ_sub_EvS: free_evars (ex , ψ) ⊆ EvS
x: evar

free_evars ψ^{evar:0↦x} ⊆ {[x]} ∪ EvS
abstract ( rewrite elem_of_subseteq; intros x0; rewrite free_evars_evar_open''; intros [[H1 H2]| H2]; [ (subst; clear; set_solver) |(simpl in ψ_sub_EvS; set_solver) ] ).
Σ: Signature
sz: nat
Γ: Theory
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
E: evar
exdepth, mudepth: nat
gpi: ProofInfo
pf: Γ ⊢i p <---> q using gpi
IHsz: (ψ : Pattern) (wfψ : well_formed ψ), size' ψ ≤ sz → (EvS : EVarSet) (SvS : SVarSet), ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ p q wfψ wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ ⊆ SvS → Γ ⊢i ψ^[[evar:E↦p]] <---> ψ^[[evar:E↦q]] using gpi
ψ: Pattern
wfψ: well_formed (ex , ψ)
Hsz: S (size' ψ) ≤ S sz
EvS: EVarSet
SvS: SVarSet
i':= ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (ex , ψ))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (ex , ψ))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (ex , ψ)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E (ex , ψ) p q wfψ wfp wfq): ProofInfo
pile: ProofInfoLe i' gpi
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
E_in_EvS: E ∈ EvS
ψ_sub_EvS: free_evars (ex , ψ) ⊆ EvS
p_sub_SvS: free_svars p ⊆ SvS
q_sub_SvS: free_svars q ⊆ SvS
ψ_sub_SvS: free_svars (ex , ψ) ⊆ SvS
HEinψ: E ∈ free_evars (ex , ψ)
x: evar
Heqx: x = evar_fresh (elements EvS)
frx: x ∉ EvS
H: well_formed ψ^{evar:0↦x}
H0: size' ψ^{evar:0↦x} ≤ sz
IH: ProofInfoLe (ExGen := list_to_set (evar_fresh_seq ({[x]} ∪ EvS) (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ^{evar:0↦x})), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ^{evar:0↦x})), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ^{evar:0↦x}) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' ({[x]} ∪ EvS) SvS E ψ^{evar:0↦x} p q H wfp wfq)) gpi → free_evars p ⊆ {[x]} ∪ EvS → free_evars q ⊆ {[x]} ∪ EvS → E ∈ {[x]} ∪ EvS → free_evars ψ^{evar:0↦x} ⊆ {[x]} ∪ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ^{evar:0↦x} ⊆ SvS → Γ ⊢i ψ^{evar:0↦x}^[[evar:E↦p]] <---> ψ^{evar:0↦x}^[[evar:E↦q]] using gpi

free_svars p ⊆ SvS
Σ: Signature
sz: nat
Γ: Theory
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
E: evar
exdepth, mudepth: nat
gpi: ProofInfo
pf: Γ ⊢i p <---> q using gpi
IHsz: (ψ : Pattern) (wfψ : well_formed ψ), size' ψ ≤ sz → (EvS : EVarSet) (SvS : SVarSet), ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ p q wfψ wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ ⊆ SvS → Γ ⊢i ψ^[[evar:E↦p]] <---> ψ^[[evar:E↦q]] using gpi
ψ: Pattern
wfψ: well_formed (ex , ψ)
Hsz: S (size' ψ) ≤ S sz
EvS: EVarSet
SvS: SVarSet
i':= ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (ex , ψ))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (ex , ψ))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (ex , ψ)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E (ex , ψ) p q wfψ wfp wfq): ProofInfo
pile: ProofInfoLe i' gpi
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
E_in_EvS: E ∈ EvS
ψ_sub_EvS: free_evars (ex , ψ) ⊆ EvS
p_sub_SvS: free_svars p ⊆ SvS
q_sub_SvS: free_svars q ⊆ SvS
ψ_sub_SvS: free_svars (ex , ψ) ⊆ SvS
HEinψ: E ∈ free_evars (ex , ψ)
x: evar
Heqx: x = evar_fresh (elements EvS)
frx: x ∉ EvS
H: well_formed ψ^{evar:0↦x}
H0: size' ψ^{evar:0↦x} ≤ sz
IH: ProofInfoLe (ExGen := list_to_set (evar_fresh_seq ({[x]} ∪ EvS) (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ^{evar:0↦x})), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ^{evar:0↦x})), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ^{evar:0↦x}) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' ({[x]} ∪ EvS) SvS E ψ^{evar:0↦x} p q H wfp wfq)) gpi → free_evars p ⊆ {[x]} ∪ EvS → free_evars q ⊆ {[x]} ∪ EvS → E ∈ {[x]} ∪ EvS → free_evars ψ^{evar:0↦x} ⊆ {[x]} ∪ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ^{evar:0↦x} ⊆ SvS → Γ ⊢i ψ^{evar:0↦x}^[[evar:E↦p]] <---> ψ^{evar:0↦x}^[[evar:E↦q]] using gpi
free_svars q ⊆ SvS
Σ: Signature
sz: nat
Γ: Theory
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
E: evar
exdepth, mudepth: nat
gpi: ProofInfo
pf: Γ ⊢i p <---> q using gpi
IHsz: (ψ : Pattern) (wfψ : well_formed ψ), size' ψ ≤ sz → (EvS : EVarSet) (SvS : SVarSet), ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ p q wfψ wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ ⊆ SvS → Γ ⊢i ψ^[[evar:E↦p]] <---> ψ^[[evar:E↦q]] using gpi
ψ: Pattern
wfψ: well_formed (ex , ψ)
Hsz: S (size' ψ) ≤ S sz
EvS: EVarSet
SvS: SVarSet
i':= ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (ex , ψ))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (ex , ψ))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (ex , ψ)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E (ex , ψ) p q wfψ wfp wfq): ProofInfo
pile: ProofInfoLe i' gpi
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
E_in_EvS: E ∈ EvS
ψ_sub_EvS: free_evars (ex , ψ) ⊆ EvS
p_sub_SvS: free_svars p ⊆ SvS
q_sub_SvS: free_svars q ⊆ SvS
ψ_sub_SvS: free_svars (ex , ψ) ⊆ SvS
HEinψ: E ∈ free_evars (ex , ψ)
x: evar
Heqx: x = evar_fresh (elements EvS)
frx: x ∉ EvS
H: well_formed ψ^{evar:0↦x}
H0: size' ψ^{evar:0↦x} ≤ sz
IH: ProofInfoLe (ExGen := list_to_set (evar_fresh_seq ({[x]} ∪ EvS) (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ^{evar:0↦x})), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ^{evar:0↦x})), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ^{evar:0↦x}) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' ({[x]} ∪ EvS) SvS E ψ^{evar:0↦x} p q H wfp wfq)) gpi → free_evars p ⊆ {[x]} ∪ EvS → free_evars q ⊆ {[x]} ∪ EvS → E ∈ {[x]} ∪ EvS → free_evars ψ^{evar:0↦x} ⊆ {[x]} ∪ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ^{evar:0↦x} ⊆ SvS → Γ ⊢i ψ^{evar:0↦x}^[[evar:E↦p]] <---> ψ^{evar:0↦x}^[[evar:E↦q]] using gpi
free_svars ψ^{evar:0↦x} ⊆ SvS
Σ: Signature
sz: nat
Γ: Theory
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
E: evar
exdepth, mudepth: nat
gpi: ProofInfo
pf: Γ ⊢i p <---> q using gpi
IHsz: (ψ : Pattern) (wfψ : well_formed ψ), size' ψ ≤ sz → (EvS : EVarSet) (SvS : SVarSet), ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ p q wfψ wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ ⊆ SvS → Γ ⊢i ψ^[[evar:E↦p]] <---> ψ^[[evar:E↦q]] using gpi
ψ: Pattern
wfψ: well_formed (ex , ψ)
Hsz: S (size' ψ) ≤ S sz
EvS: EVarSet
SvS: SVarSet
i':= ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (ex , ψ))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (ex , ψ))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (ex , ψ)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E (ex , ψ) p q wfψ wfp wfq): ProofInfo
pile: ProofInfoLe i' gpi
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
E_in_EvS: E ∈ EvS
ψ_sub_EvS: free_evars (ex , ψ) ⊆ EvS
p_sub_SvS: free_svars p ⊆ SvS
q_sub_SvS: free_svars q ⊆ SvS
ψ_sub_SvS: free_svars (ex , ψ) ⊆ SvS
HEinψ: E ∈ free_evars (ex , ψ)
x: evar
Heqx: x = evar_fresh (elements EvS)
frx: x ∉ EvS
H: well_formed ψ^{evar:0↦x}
H0: size' ψ^{evar:0↦x} ≤ sz
IH: Γ ⊢i ψ^{evar:0↦x}^[[evar:E↦p]] <---> ψ^{evar:0↦x}^[[evar:E↦q]] using gpi
Γ ⊢i (ex , ψ^[[evar:E↦p]]) <---> (ex , ψ^[[evar:E↦q]]) using gpi
Σ: Signature
sz: nat
Γ: Theory
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
E: evar
exdepth, mudepth: nat
gpi: ProofInfo
pf: Γ ⊢i p <---> q using gpi
IHsz: (ψ : Pattern) (wfψ : well_formed ψ), size' ψ ≤ sz → (EvS : EVarSet) (SvS : SVarSet), ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ p q wfψ wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ ⊆ SvS → Γ ⊢i ψ^[[evar:E↦p]] <---> ψ^[[evar:E↦q]] using gpi
ψ: Pattern
wfψ: well_formed (ex , ψ)
Hsz: S (size' ψ) ≤ S sz
EvS: EVarSet
SvS: SVarSet
i':= ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (ex , ψ))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (ex , ψ))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (ex , ψ)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E (ex , ψ) p q wfψ wfp wfq): ProofInfo
pile: ProofInfoLe i' gpi
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
E_in_EvS: E ∈ EvS
ψ_sub_EvS: free_evars (ex , ψ) ⊆ EvS
p_sub_SvS: free_svars p ⊆ SvS
q_sub_SvS: free_svars q ⊆ SvS
ψ_sub_SvS: free_svars (ex , ψ) ⊆ SvS
HEinψ: E ∈ free_evars (ex , ψ)
x: evar
Heqx: x = evar_fresh (elements EvS)
frx: x ∉ EvS
H: well_formed ψ^{evar:0↦x}
H0: size' ψ^{evar:0↦x} ≤ sz
IH: ProofInfoLe (ExGen := list_to_set (evar_fresh_seq ({[x]} ∪ EvS) (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ^{evar:0↦x})), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ^{evar:0↦x})), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ^{evar:0↦x}) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' ({[x]} ∪ EvS) SvS E ψ^{evar:0↦x} p q H wfp wfq)) gpi → free_evars p ⊆ {[x]} ∪ EvS → free_evars q ⊆ {[x]} ∪ EvS → E ∈ {[x]} ∪ EvS → free_evars ψ^{evar:0↦x} ⊆ {[x]} ∪ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ^{evar:0↦x} ⊆ SvS → Γ ⊢i ψ^{evar:0↦x}^[[evar:E↦p]] <---> ψ^{evar:0↦x}^[[evar:E↦q]] using gpi

free_svars p ⊆ SvS
exact p_sub_SvS.
Σ: Signature
sz: nat
Γ: Theory
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
E: evar
exdepth, mudepth: nat
gpi: ProofInfo
pf: Γ ⊢i p <---> q using gpi
IHsz: (ψ : Pattern) (wfψ : well_formed ψ), size' ψ ≤ sz → (EvS : EVarSet) (SvS : SVarSet), ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ p q wfψ wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ ⊆ SvS → Γ ⊢i ψ^[[evar:E↦p]] <---> ψ^[[evar:E↦q]] using gpi
ψ: Pattern
wfψ: well_formed (ex , ψ)
Hsz: S (size' ψ) ≤ S sz
EvS: EVarSet
SvS: SVarSet
i':= ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (ex , ψ))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (ex , ψ))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (ex , ψ)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E (ex , ψ) p q wfψ wfp wfq): ProofInfo
pile: ProofInfoLe i' gpi
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
E_in_EvS: E ∈ EvS
ψ_sub_EvS: free_evars (ex , ψ) ⊆ EvS
p_sub_SvS: free_svars p ⊆ SvS
q_sub_SvS: free_svars q ⊆ SvS
ψ_sub_SvS: free_svars (ex , ψ) ⊆ SvS
HEinψ: E ∈ free_evars (ex , ψ)
x: evar
Heqx: x = evar_fresh (elements EvS)
frx: x ∉ EvS
H: well_formed ψ^{evar:0↦x}
H0: size' ψ^{evar:0↦x} ≤ sz
IH: ProofInfoLe (ExGen := list_to_set (evar_fresh_seq ({[x]} ∪ EvS) (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ^{evar:0↦x})), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ^{evar:0↦x})), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ^{evar:0↦x}) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' ({[x]} ∪ EvS) SvS E ψ^{evar:0↦x} p q H wfp wfq)) gpi → free_evars p ⊆ {[x]} ∪ EvS → free_evars q ⊆ {[x]} ∪ EvS → E ∈ {[x]} ∪ EvS → free_evars ψ^{evar:0↦x} ⊆ {[x]} ∪ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ^{evar:0↦x} ⊆ SvS → Γ ⊢i ψ^{evar:0↦x}^[[evar:E↦p]] <---> ψ^{evar:0↦x}^[[evar:E↦q]] using gpi

free_svars q ⊆ SvS
Σ: Signature
sz: nat
Γ: Theory
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
E: evar
exdepth, mudepth: nat
gpi: ProofInfo
pf: Γ ⊢i p <---> q using gpi
IHsz: (ψ : Pattern) (wfψ : well_formed ψ), size' ψ ≤ sz → (EvS : EVarSet) (SvS : SVarSet), ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ p q wfψ wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ ⊆ SvS → Γ ⊢i ψ^[[evar:E↦p]] <---> ψ^[[evar:E↦q]] using gpi
ψ: Pattern
wfψ: well_formed (ex , ψ)
Hsz: S (size' ψ) ≤ S sz
EvS: EVarSet
SvS: SVarSet
i':= ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (ex , ψ))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (ex , ψ))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (ex , ψ)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E (ex , ψ) p q wfψ wfp wfq): ProofInfo
pile: ProofInfoLe i' gpi
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
E_in_EvS: E ∈ EvS
ψ_sub_EvS: free_evars (ex , ψ) ⊆ EvS
p_sub_SvS: free_svars p ⊆ SvS
q_sub_SvS: free_svars q ⊆ SvS
ψ_sub_SvS: free_svars (ex , ψ) ⊆ SvS
HEinψ: E ∈ free_evars (ex , ψ)
x: evar
Heqx: x = evar_fresh (elements EvS)
frx: x ∉ EvS
H: well_formed ψ^{evar:0↦x}
H0: size' ψ^{evar:0↦x} ≤ sz
IH: ProofInfoLe (ExGen := list_to_set (evar_fresh_seq ({[x]} ∪ EvS) (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ^{evar:0↦x})), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ^{evar:0↦x})), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ^{evar:0↦x}) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' ({[x]} ∪ EvS) SvS E ψ^{evar:0↦x} p q H wfp wfq)) gpi → free_evars p ⊆ {[x]} ∪ EvS → free_evars q ⊆ {[x]} ∪ EvS → E ∈ {[x]} ∪ EvS → free_evars ψ^{evar:0↦x} ⊆ {[x]} ∪ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ^{evar:0↦x} ⊆ SvS → Γ ⊢i ψ^{evar:0↦x}^[[evar:E↦p]] <---> ψ^{evar:0↦x}^[[evar:E↦q]] using gpi
free_svars ψ^{evar:0↦x} ⊆ SvS
Σ: Signature
sz: nat
Γ: Theory
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
E: evar
exdepth, mudepth: nat
gpi: ProofInfo
pf: Γ ⊢i p <---> q using gpi
IHsz: (ψ : Pattern) (wfψ : well_formed ψ), size' ψ ≤ sz → (EvS : EVarSet) (SvS : SVarSet), ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ p q wfψ wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ ⊆ SvS → Γ ⊢i ψ^[[evar:E↦p]] <---> ψ^[[evar:E↦q]] using gpi
ψ: Pattern
wfψ: well_formed (ex , ψ)
Hsz: S (size' ψ) ≤ S sz
EvS: EVarSet
SvS: SVarSet
i':= ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (ex , ψ))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (ex , ψ))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (ex , ψ)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E (ex , ψ) p q wfψ wfp wfq): ProofInfo
pile: ProofInfoLe i' gpi
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
E_in_EvS: E ∈ EvS
ψ_sub_EvS: free_evars (ex , ψ) ⊆ EvS
p_sub_SvS: free_svars p ⊆ SvS
q_sub_SvS: free_svars q ⊆ SvS
ψ_sub_SvS: free_svars (ex , ψ) ⊆ SvS
HEinψ: E ∈ free_evars (ex , ψ)
x: evar
Heqx: x = evar_fresh (elements EvS)
frx: x ∉ EvS
H: well_formed ψ^{evar:0↦x}
H0: size' ψ^{evar:0↦x} ≤ sz
IH: Γ ⊢i ψ^{evar:0↦x}^[[evar:E↦p]] <---> ψ^{evar:0↦x}^[[evar:E↦q]] using gpi
Γ ⊢i (ex , ψ^[[evar:E↦p]]) <---> (ex , ψ^[[evar:E↦q]]) using gpi
Σ: Signature
sz: nat
Γ: Theory
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
E: evar
exdepth, mudepth: nat
gpi: ProofInfo
pf: Γ ⊢i p <---> q using gpi
IHsz: (ψ : Pattern) (wfψ : well_formed ψ), size' ψ ≤ sz → (EvS : EVarSet) (SvS : SVarSet), ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ p q wfψ wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ ⊆ SvS → Γ ⊢i ψ^[[evar:E↦p]] <---> ψ^[[evar:E↦q]] using gpi
ψ: Pattern
wfψ: well_formed (ex , ψ)
Hsz: S (size' ψ) ≤ S sz
EvS: EVarSet
SvS: SVarSet
i':= ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (ex , ψ))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (ex , ψ))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (ex , ψ)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E (ex , ψ) p q wfψ wfp wfq): ProofInfo
pile: ProofInfoLe i' gpi
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
E_in_EvS: E ∈ EvS
ψ_sub_EvS: free_evars (ex , ψ) ⊆ EvS
p_sub_SvS: free_svars p ⊆ SvS
q_sub_SvS: free_svars q ⊆ SvS
ψ_sub_SvS: free_svars (ex , ψ) ⊆ SvS
HEinψ: E ∈ free_evars (ex , ψ)
x: evar
Heqx: x = evar_fresh (elements EvS)
frx: x ∉ EvS
H: well_formed ψ^{evar:0↦x}
H0: size' ψ^{evar:0↦x} ≤ sz
IH: ProofInfoLe (ExGen := list_to_set (evar_fresh_seq ({[x]} ∪ EvS) (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ^{evar:0↦x})), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ^{evar:0↦x})), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ^{evar:0↦x}) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' ({[x]} ∪ EvS) SvS E ψ^{evar:0↦x} p q H wfp wfq)) gpi → free_evars p ⊆ {[x]} ∪ EvS → free_evars q ⊆ {[x]} ∪ EvS → E ∈ {[x]} ∪ EvS → free_evars ψ^{evar:0↦x} ⊆ {[x]} ∪ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ^{evar:0↦x} ⊆ SvS → Γ ⊢i ψ^{evar:0↦x}^[[evar:E↦p]] <---> ψ^{evar:0↦x}^[[evar:E↦q]] using gpi

free_svars q ⊆ SvS
exact q_sub_SvS.
Σ: Signature
sz: nat
Γ: Theory
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
E: evar
exdepth, mudepth: nat
gpi: ProofInfo
pf: Γ ⊢i p <---> q using gpi
IHsz: (ψ : Pattern) (wfψ : well_formed ψ), size' ψ ≤ sz → (EvS : EVarSet) (SvS : SVarSet), ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ p q wfψ wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ ⊆ SvS → Γ ⊢i ψ^[[evar:E↦p]] <---> ψ^[[evar:E↦q]] using gpi
ψ: Pattern
wfψ: well_formed (ex , ψ)
Hsz: S (size' ψ) ≤ S sz
EvS: EVarSet
SvS: SVarSet
i':= ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (ex , ψ))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (ex , ψ))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (ex , ψ)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E (ex , ψ) p q wfψ wfp wfq): ProofInfo
pile: ProofInfoLe i' gpi
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
E_in_EvS: E ∈ EvS
ψ_sub_EvS: free_evars (ex , ψ) ⊆ EvS
p_sub_SvS: free_svars p ⊆ SvS
q_sub_SvS: free_svars q ⊆ SvS
ψ_sub_SvS: free_svars (ex , ψ) ⊆ SvS
HEinψ: E ∈ free_evars (ex , ψ)
x: evar
Heqx: x = evar_fresh (elements EvS)
frx: x ∉ EvS
H: well_formed ψ^{evar:0↦x}
H0: size' ψ^{evar:0↦x} ≤ sz
IH: ProofInfoLe (ExGen := list_to_set (evar_fresh_seq ({[x]} ∪ EvS) (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ^{evar:0↦x})), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ^{evar:0↦x})), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ^{evar:0↦x}) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' ({[x]} ∪ EvS) SvS E ψ^{evar:0↦x} p q H wfp wfq)) gpi → free_evars p ⊆ {[x]} ∪ EvS → free_evars q ⊆ {[x]} ∪ EvS → E ∈ {[x]} ∪ EvS → free_evars ψ^{evar:0↦x} ⊆ {[x]} ∪ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ^{evar:0↦x} ⊆ SvS → Γ ⊢i ψ^{evar:0↦x}^[[evar:E↦p]] <---> ψ^{evar:0↦x}^[[evar:E↦q]] using gpi

free_svars ψ^{evar:0↦x} ⊆ SvS
Σ: Signature
sz: nat
Γ: Theory
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
E: evar
exdepth, mudepth: nat
gpi: ProofInfo
pf: Γ ⊢i p <---> q using gpi
IHsz: (ψ : Pattern) (wfψ : well_formed ψ), size' ψ ≤ sz → (EvS : EVarSet) (SvS : SVarSet), ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ p q wfψ wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ ⊆ SvS → Γ ⊢i ψ^[[evar:E↦p]] <---> ψ^[[evar:E↦q]] using gpi
ψ: Pattern
wfψ: well_formed (ex , ψ)
Hsz: S (size' ψ) ≤ S sz
EvS: EVarSet
SvS: SVarSet
i':= ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (ex , ψ))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (ex , ψ))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (ex , ψ)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E (ex , ψ) p q wfψ wfp wfq): ProofInfo
pile: ProofInfoLe i' gpi
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
E_in_EvS: E ∈ EvS
ψ_sub_EvS: free_evars (ex , ψ) ⊆ EvS
p_sub_SvS: free_svars p ⊆ SvS
q_sub_SvS: free_svars q ⊆ SvS
ψ_sub_SvS: free_svars (ex , ψ) ⊆ SvS
HEinψ: E ∈ free_evars (ex , ψ)
x: evar
Heqx: x = evar_fresh (elements EvS)
frx: x ∉ EvS
H: well_formed ψ^{evar:0↦x}
H0: size' ψ^{evar:0↦x} ≤ sz
IH: Γ ⊢i ψ^{evar:0↦x}^[[evar:E↦p]] <---> ψ^{evar:0↦x}^[[evar:E↦q]] using gpi
Γ ⊢i (ex , ψ^[[evar:E↦p]]) <---> (ex , ψ^[[evar:E↦q]]) using gpi
Σ: Signature
sz: nat
Γ: Theory
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
E: evar
exdepth, mudepth: nat
gpi: ProofInfo
pf: Γ ⊢i p <---> q using gpi
IHsz: (ψ : Pattern) (wfψ : well_formed ψ), size' ψ ≤ sz → (EvS : EVarSet) (SvS : SVarSet), ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ p q wfψ wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ ⊆ SvS → Γ ⊢i ψ^[[evar:E↦p]] <---> ψ^[[evar:E↦q]] using gpi
ψ: Pattern
wfψ: well_formed (ex , ψ)
Hsz: S (size' ψ) ≤ S sz
EvS: EVarSet
SvS: SVarSet
i':= ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (ex , ψ))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (ex , ψ))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (ex , ψ)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E (ex , ψ) p q wfψ wfp wfq): ProofInfo
pile: ProofInfoLe i' gpi
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
E_in_EvS: E ∈ EvS
ψ_sub_EvS: free_evars (ex , ψ) ⊆ EvS
p_sub_SvS: free_svars p ⊆ SvS
q_sub_SvS: free_svars q ⊆ SvS
ψ_sub_SvS: free_svars (ex , ψ) ⊆ SvS
HEinψ: E ∈ free_evars (ex , ψ)
x: evar
Heqx: x = evar_fresh (elements EvS)
frx: x ∉ EvS
H: well_formed ψ^{evar:0↦x}
H0: size' ψ^{evar:0↦x} ≤ sz
IH: ProofInfoLe (ExGen := list_to_set (evar_fresh_seq ({[x]} ∪ EvS) (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ^{evar:0↦x})), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ^{evar:0↦x})), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ^{evar:0↦x}) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' ({[x]} ∪ EvS) SvS E ψ^{evar:0↦x} p q H wfp wfq)) gpi → free_evars p ⊆ {[x]} ∪ EvS → free_evars q ⊆ {[x]} ∪ EvS → E ∈ {[x]} ∪ EvS → free_evars ψ^{evar:0↦x} ⊆ {[x]} ∪ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ^{evar:0↦x} ⊆ SvS → Γ ⊢i ψ^{evar:0↦x}^[[evar:E↦p]] <---> ψ^{evar:0↦x}^[[evar:E↦q]] using gpi

free_svars ψ^{evar:0↦x} ⊆ SvS
abstract ( simpl in ψ_sub_SvS; clear -ψ_sub_SvS; rewrite free_svars_evar_open; exact ψ_sub_SvS ).
Σ: Signature
sz: nat
Γ: Theory
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
E: evar
exdepth, mudepth: nat
gpi: ProofInfo
pf: Γ ⊢i p <---> q using gpi
IHsz: (ψ : Pattern) (wfψ : well_formed ψ), size' ψ ≤ sz → (EvS : EVarSet) (SvS : SVarSet), ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ p q wfψ wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ ⊆ SvS → Γ ⊢i ψ^[[evar:E↦p]] <---> ψ^[[evar:E↦q]] using gpi
ψ: Pattern
wfψ: well_formed (ex , ψ)
Hsz: S (size' ψ) ≤ S sz
EvS: EVarSet
SvS: SVarSet
i':= ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (ex , ψ))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (ex , ψ))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (ex , ψ)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E (ex , ψ) p q wfψ wfp wfq): ProofInfo
pile: ProofInfoLe i' gpi
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
E_in_EvS: E ∈ EvS
ψ_sub_EvS: free_evars (ex , ψ) ⊆ EvS
p_sub_SvS: free_svars p ⊆ SvS
q_sub_SvS: free_svars q ⊆ SvS
ψ_sub_SvS: free_svars (ex , ψ) ⊆ SvS
HEinψ: E ∈ free_evars (ex , ψ)
x: evar
Heqx: x = evar_fresh (elements EvS)
frx: x ∉ EvS
H: well_formed ψ^{evar:0↦x}
H0: size' ψ^{evar:0↦x} ≤ sz
IH: Γ ⊢i ψ^{evar:0↦x}^[[evar:E↦p]] <---> ψ^{evar:0↦x}^[[evar:E↦q]] using gpi

Γ ⊢i (ex , ψ^[[evar:E↦p]]) <---> (ex , ψ^[[evar:E↦q]]) using gpi
Σ: Signature
sz: nat
Γ: Theory
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
E: evar
exdepth, mudepth: nat
gpi: ProofInfo
pf: Γ ⊢i p <---> q using gpi
IHsz: (ψ : Pattern) (wfψ : well_formed ψ), size' ψ ≤ sz → (EvS : EVarSet) (SvS : SVarSet), ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ p q wfψ wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ ⊆ SvS → Γ ⊢i ψ^[[evar:E↦p]] <---> ψ^[[evar:E↦q]] using gpi
ψ: Pattern
wfψ: well_formed (ex , ψ)
Hsz: S (size' ψ) ≤ S sz
EvS: EVarSet
SvS: SVarSet
i':= ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (ex , ψ))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (ex , ψ))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (ex , ψ)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E (ex , ψ) p q wfψ wfp wfq): ProofInfo
pile: ProofInfoLe i' gpi
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
E_in_EvS: E ∈ EvS
ψ_sub_EvS: free_evars (ex , ψ) ⊆ EvS
p_sub_SvS: free_svars p ⊆ SvS
q_sub_SvS: free_svars q ⊆ SvS
ψ_sub_SvS: free_svars (ex , ψ) ⊆ SvS
HEinψ: E ∈ free_evars (ex , ψ)
x: evar
Heqx: x = evar_fresh (elements EvS)
frx: x ∉ EvS
H: well_formed ψ^{evar:0↦x}
H0: size' ψ^{evar:0↦x} ≤ sz
IH: Γ ⊢i ψ^{evar:0↦x}^[[evar:E↦p]] <---> ψ^{evar:0↦x}^[[evar:E↦q]] using gpi

x ≠ E
Σ: Signature
sz: nat
Γ: Theory
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
E: evar
exdepth, mudepth: nat
gpi: ProofInfo
pf: Γ ⊢i p <---> q using gpi
IHsz: (ψ : Pattern) (wfψ : well_formed ψ), size' ψ ≤ sz → (EvS : EVarSet) (SvS : SVarSet), ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ p q wfψ wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ ⊆ SvS → Γ ⊢i ψ^[[evar:E↦p]] <---> ψ^[[evar:E↦q]] using gpi
ψ: Pattern
wfψ: well_formed (ex , ψ)
Hsz: S (size' ψ) ≤ S sz
EvS: EVarSet
SvS: SVarSet
i':= ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (ex , ψ))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (ex , ψ))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (ex , ψ)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E (ex , ψ) p q wfψ wfp wfq): ProofInfo
pile: ProofInfoLe i' gpi
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
E_in_EvS: E ∈ EvS
ψ_sub_EvS: free_evars (ex , ψ) ⊆ EvS
p_sub_SvS: free_svars p ⊆ SvS
q_sub_SvS: free_svars q ⊆ SvS
ψ_sub_SvS: free_svars (ex , ψ) ⊆ SvS
HEinψ: E ∈ free_evars (ex , ψ)
x: evar
Heqx: x = evar_fresh (elements EvS)
frx: x ∉ EvS
H: well_formed ψ^{evar:0↦x}
H0: size' ψ^{evar:0↦x} ≤ sz
IH: Γ ⊢i ψ^{evar:0↦x}^[[evar:E↦p]] <---> ψ^{evar:0↦x}^[[evar:E↦q]] using gpi
?i' = (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (ex , ψ))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (ex , ψ))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (ex , ψ)) then false else true, FP := ∅)
Σ: Signature
sz: nat
Γ: Theory
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
E: evar
exdepth, mudepth: nat
gpi: ProofInfo
pf: Γ ⊢i p <---> q using gpi
IHsz: (ψ : Pattern) (wfψ : well_formed ψ), size' ψ ≤ sz → (EvS : EVarSet) (SvS : SVarSet), ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ p q wfψ wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ ⊆ SvS → Γ ⊢i ψ^[[evar:E↦p]] <---> ψ^[[evar:E↦q]] using gpi
ψ: Pattern
wfψ: well_formed (ex , ψ)
Hsz: S (size' ψ) ≤ S sz
EvS: EVarSet
SvS: SVarSet
i':= ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (ex , ψ))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (ex , ψ))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (ex , ψ)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E (ex , ψ) p q wfψ wfp wfq): ProofInfo
pile: ProofInfoLe i' gpi
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
E_in_EvS: E ∈ EvS
ψ_sub_EvS: free_evars (ex , ψ) ⊆ EvS
p_sub_SvS: free_svars p ⊆ SvS
q_sub_SvS: free_svars q ⊆ SvS
ψ_sub_SvS: free_svars (ex , ψ) ⊆ SvS
HEinψ: E ∈ free_evars (ex , ψ)
x: evar
Heqx: x = evar_fresh (elements EvS)
frx: x ∉ EvS
H: well_formed ψ^{evar:0↦x}
H0: size' ψ^{evar:0↦x} ≤ sz
IH: Γ ⊢i ψ^{evar:0↦x}^[[evar:E↦p]] <---> ψ^{evar:0↦x}^[[evar:E↦q]] using gpi
ProofInfoLe ?i' gpi
Σ: Signature
sz: nat
Γ: Theory
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
E: evar
exdepth, mudepth: nat
gpi: ProofInfo
pf: Γ ⊢i p <---> q using gpi
IHsz: (ψ : Pattern) (wfψ : well_formed ψ), size' ψ ≤ sz → (EvS : EVarSet) (SvS : SVarSet), ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ p q wfψ wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ ⊆ SvS → Γ ⊢i ψ^[[evar:E↦p]] <---> ψ^[[evar:E↦q]] using gpi
ψ: Pattern
wfψ: well_formed (ex , ψ)
Hsz: S (size' ψ) ≤ S sz
EvS: EVarSet
SvS: SVarSet
i':= ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (ex , ψ))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (ex , ψ))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (ex , ψ)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E (ex , ψ) p q wfψ wfp wfq): ProofInfo
pile: ProofInfoLe i' gpi
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
E_in_EvS: E ∈ EvS
ψ_sub_EvS: free_evars (ex , ψ) ⊆ EvS
p_sub_SvS: free_svars p ⊆ SvS
q_sub_SvS: free_svars q ⊆ SvS
ψ_sub_SvS: free_svars (ex , ψ) ⊆ SvS
HEinψ: E ∈ free_evars (ex , ψ)
x: evar
Heqx: x = evar_fresh (elements EvS)
frx: x ∉ EvS
H: well_formed ψ^{evar:0↦x}
H0: size' ψ^{evar:0↦x} ≤ sz
IH: Γ ⊢i ψ^{evar:0↦x}^[[evar:E↦p]] <---> ψ^{evar:0↦x}^[[evar:E↦q]] using gpi

x ≠ E
set_solver.
Σ: Signature
sz: nat
Γ: Theory
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
E: evar
exdepth, mudepth: nat
gpi: ProofInfo
pf: Γ ⊢i p <---> q using gpi
IHsz: (ψ : Pattern) (wfψ : well_formed ψ), size' ψ ≤ sz → (EvS : EVarSet) (SvS : SVarSet), ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ p q wfψ wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ ⊆ SvS → Γ ⊢i ψ^[[evar:E↦p]] <---> ψ^[[evar:E↦q]] using gpi
ψ: Pattern
wfψ: well_formed (ex , ψ)
Hsz: S (size' ψ) ≤ S sz
EvS: EVarSet
SvS: SVarSet
i':= ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (ex , ψ))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (ex , ψ))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (ex , ψ)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E (ex , ψ) p q wfψ wfp wfq): ProofInfo
pile: ProofInfoLe i' gpi
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
E_in_EvS: E ∈ EvS
ψ_sub_EvS: free_evars (ex , ψ) ⊆ EvS
p_sub_SvS: free_svars p ⊆ SvS
q_sub_SvS: free_svars q ⊆ SvS
ψ_sub_SvS: free_svars (ex , ψ) ⊆ SvS
HEinψ: E ∈ free_evars (ex , ψ)
x: evar
Heqx: x = evar_fresh (elements EvS)
frx: x ∉ EvS
H: well_formed ψ^{evar:0↦x}
H0: size' ψ^{evar:0↦x} ≤ sz
IH: Γ ⊢i ψ^{evar:0↦x}^[[evar:E↦p]] <---> ψ^{evar:0↦x}^[[evar:E↦q]] using gpi

?i' = (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (ex , ψ))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (ex , ψ))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (ex , ψ)) then false else true, FP := ∅)
Σ: Signature
sz: nat
Γ: Theory
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
E: evar
exdepth, mudepth: nat
gpi: ProofInfo
pf: Γ ⊢i p <---> q using gpi
IHsz: (ψ : Pattern) (wfψ : well_formed ψ), size' ψ ≤ sz → (EvS : EVarSet) (SvS : SVarSet), ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ p q wfψ wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ ⊆ SvS → Γ ⊢i ψ^[[evar:E↦p]] <---> ψ^[[evar:E↦q]] using gpi
ψ: Pattern
wfψ: well_formed (ex , ψ)
Hsz: S (size' ψ) ≤ S sz
EvS: EVarSet
SvS: SVarSet
i':= ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (ex , ψ))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (ex , ψ))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (ex , ψ)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E (ex , ψ) p q wfψ wfp wfq): ProofInfo
pile: ProofInfoLe i' gpi
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
E_in_EvS: E ∈ EvS
ψ_sub_EvS: free_evars (ex , ψ) ⊆ EvS
p_sub_SvS: free_svars p ⊆ SvS
q_sub_SvS: free_svars q ⊆ SvS
ψ_sub_SvS: free_svars (ex , ψ) ⊆ SvS
HEinψ: E ∈ free_evars (ex , ψ)
x: evar
Heqx: x = evar_fresh (elements EvS)
frx: x ∉ EvS
H: well_formed ψ^{evar:0↦x}
H0: size' ψ^{evar:0↦x} ≤ sz
IH: Γ ⊢i ψ^{evar:0↦x}^[[evar:E↦p]] <---> ψ^{evar:0↦x}^[[evar:E↦q]] using gpi
ProofInfoLe ?i' gpi
Σ: Signature
sz: nat
Γ: Theory
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
E: evar
exdepth, mudepth: nat
gpi: ProofInfo
pf: Γ ⊢i p <---> q using gpi
IHsz: (ψ : Pattern) (wfψ : well_formed ψ), size' ψ ≤ sz → (EvS : EVarSet) (SvS : SVarSet), ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ p q wfψ wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ ⊆ SvS → Γ ⊢i ψ^[[evar:E↦p]] <---> ψ^[[evar:E↦q]] using gpi
ψ: Pattern
wfψ: well_formed (ex , ψ)
Hsz: S (size' ψ) ≤ S sz
EvS: EVarSet
SvS: SVarSet
i':= ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (ex , ψ))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (ex , ψ))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (ex , ψ)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E (ex , ψ) p q wfψ wfp wfq): ProofInfo
pile: ProofInfoLe i' gpi
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
E_in_EvS: E ∈ EvS
ψ_sub_EvS: free_evars (ex , ψ) ⊆ EvS
p_sub_SvS: free_svars p ⊆ SvS
q_sub_SvS: free_svars q ⊆ SvS
ψ_sub_SvS: free_svars (ex , ψ) ⊆ SvS
HEinψ: E ∈ free_evars (ex , ψ)
x: evar
Heqx: x = evar_fresh (elements EvS)
frx: x ∉ EvS
H: well_formed ψ^{evar:0↦x}
H0: size' ψ^{evar:0↦x} ≤ sz
IH: Γ ⊢i ψ^{evar:0↦x}^[[evar:E↦p]] <---> ψ^{evar:0↦x}^[[evar:E↦q]] using gpi

?i' = (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (ex , ψ))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (ex , ψ))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (ex , ψ)) then false else true, FP := ∅)
reflexivity.
Σ: Signature
sz: nat
Γ: Theory
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
E: evar
exdepth, mudepth: nat
gpi: ProofInfo
pf: Γ ⊢i p <---> q using gpi
IHsz: (ψ : Pattern) (wfψ : well_formed ψ), size' ψ ≤ sz → (EvS : EVarSet) (SvS : SVarSet), ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ p q wfψ wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ ⊆ SvS → Γ ⊢i ψ^[[evar:E↦p]] <---> ψ^[[evar:E↦q]] using gpi
ψ: Pattern
wfψ: well_formed (ex , ψ)
Hsz: S (size' ψ) ≤ S sz
EvS: EVarSet
SvS: SVarSet
i':= ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (ex , ψ))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (ex , ψ))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (ex , ψ)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E (ex , ψ) p q wfψ wfp wfq): ProofInfo
pile: ProofInfoLe i' gpi
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
E_in_EvS: E ∈ EvS
ψ_sub_EvS: free_evars (ex , ψ) ⊆ EvS
p_sub_SvS: free_svars p ⊆ SvS
q_sub_SvS: free_svars q ⊆ SvS
ψ_sub_SvS: free_svars (ex , ψ) ⊆ SvS
HEinψ: E ∈ free_evars (ex , ψ)
x: evar
Heqx: x = evar_fresh (elements EvS)
frx: x ∉ EvS
H: well_formed ψ^{evar:0↦x}
H0: size' ψ^{evar:0↦x} ≤ sz
IH: Γ ⊢i ψ^{evar:0↦x}^[[evar:E↦p]] <---> ψ^{evar:0↦x}^[[evar:E↦q]] using gpi

ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (ex , ψ))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (ex , ψ))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (ex , ψ)) then false else true, FP := ∅) gpi
Σ: Signature
sz: nat
Γ: Theory
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
E: evar
exdepth, mudepth: nat
gpi: ProofInfo
pf: Γ ⊢i p <---> q using gpi
IHsz: (ψ : Pattern) (wfψ : well_formed ψ), size' ψ ≤ sz → (EvS : EVarSet) (SvS : SVarSet), ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ p q wfψ wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ ⊆ SvS → Γ ⊢i ψ^[[evar:E↦p]] <---> ψ^[[evar:E↦q]] using gpi
ψ: Pattern
wfψ: well_formed (ex , ψ)
Hsz: S (size' ψ) ≤ S sz
EvS: EVarSet
SvS: SVarSet
i':= ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (ex , ψ))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (ex , ψ))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (ex , ψ)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E (ex , ψ) p q wfψ wfp wfq): ProofInfo
pile: ProofInfoLe i' gpi
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
E_in_EvS: E ∈ EvS
ψ_sub_EvS: free_evars (ex , ψ) ⊆ EvS
p_sub_SvS: free_svars p ⊆ SvS
q_sub_SvS: free_svars q ⊆ SvS
ψ_sub_SvS: free_svars (ex , ψ) ⊆ SvS
HEinψ: E ∈ free_evars (ex , ψ)
x: evar
Heqx: x = evar_fresh (elements EvS)
frx: x ∉ EvS
H: well_formed ψ^{evar:0↦x}
H0: size' ψ^{evar:0↦x} ≤ sz
IH: Γ ⊢i ψ^{evar:0↦x}^[[evar:E↦p]] <---> ψ^{evar:0↦x}^[[evar:E↦q]] using gpi

ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (ex , ψ))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (ex , ψ))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (ex , ψ)) then false else true, FP := ∅) gpi
Σ: Signature
sz: nat
Γ: Theory
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
E: evar
exdepth, mudepth: nat
gpi: ProofInfo
pf: Γ ⊢i p <---> q using gpi
IHsz: (ψ : Pattern) (wfψ : well_formed ψ), size' ψ ≤ sz → (EvS : EVarSet) (SvS : SVarSet), ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ p q wfψ wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ ⊆ SvS → Γ ⊢i ψ^[[evar:E↦p]] <---> ψ^[[evar:E↦q]] using gpi
ψ: Pattern
wfψ: well_formed (ex , ψ)
Hsz: S (size' ψ) ≤ S sz
EvS: EVarSet
SvS: SVarSet
i':= ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (ex , ψ))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (ex , ψ))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (ex , ψ)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E (ex , ψ) p q wfψ wfp wfq): ProofInfo
pile: ProofInfoLe i' gpi
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
E_in_EvS: E ∈ EvS
ψ_sub_EvS: free_evars (ex , ψ) ⊆ EvS
p_sub_SvS: free_svars p ⊆ SvS
q_sub_SvS: free_svars q ⊆ SvS
ψ_sub_SvS: free_svars (ex , ψ) ⊆ SvS
HEinψ: E ∈ free_evars (ex , ψ)
x: evar
Heqx: x = evar_fresh (elements EvS)
frx: x ∉ EvS
H: well_formed ψ^{evar:0↦x}
H0: size' ψ^{evar:0↦x} ≤ sz
IH: Γ ⊢i ψ^{evar:0↦x}^[[evar:E↦p]] <---> ψ^{evar:0↦x}^[[evar:E↦q]] using gpi

ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (ex , ψ))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (ex , ψ))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (ex , ψ)) then false else true, FP := ∅) i'
Σ: Signature
sz: nat
Γ: Theory
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
E: evar
exdepth, mudepth: nat
gpi: ProofInfo
pf: Γ ⊢i p <---> q using gpi
IHsz: (ψ : Pattern) (wfψ : well_formed ψ), size' ψ ≤ sz → (EvS : EVarSet) (SvS : SVarSet), ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ p q wfψ wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ ⊆ SvS → Γ ⊢i ψ^[[evar:E↦p]] <---> ψ^[[evar:E↦q]] using gpi
ψ: Pattern
wfψ: well_formed (ex , ψ)
Hsz: S (size' ψ) ≤ S sz
EvS: EVarSet
SvS: SVarSet
i':= ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (ex , ψ))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (ex , ψ))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (ex , ψ)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E (ex , ψ) p q wfψ wfp wfq): ProofInfo
pile: ProofInfoLe i' gpi
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
E_in_EvS: E ∈ EvS
ψ_sub_EvS: free_evars (ex , ψ) ⊆ EvS
p_sub_SvS: free_svars p ⊆ SvS
q_sub_SvS: free_svars q ⊆ SvS
ψ_sub_SvS: free_svars (ex , ψ) ⊆ SvS
HEinψ: E ∈ free_evars (ex , ψ)
x: evar
Heqx: x = evar_fresh (elements EvS)
frx: x ∉ EvS
H: well_formed ψ^{evar:0↦x}
H0: size' ψ^{evar:0↦x} ≤ sz
IH: Γ ⊢i ψ^{evar:0↦x}^[[evar:E↦p]] <---> ψ^{evar:0↦x}^[[evar:E↦q]] using gpi

ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (ex , ψ))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (ex , ψ))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (ex , ψ)) then false else true, FP := ∅) (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (ex , ψ))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (ex , ψ))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (ex , ψ)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E (ex , ψ) p q wfψ wfp wfq))
Σ: Signature
sz: nat
Γ: Theory
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
E: evar
exdepth, mudepth: nat
gpi: ProofInfo
pf: Γ ⊢i p <---> q using gpi
IHsz: (ψ : Pattern) (wfψ : well_formed ψ), size' ψ ≤ sz → (EvS : EVarSet) (SvS : SVarSet), ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ p q wfψ wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ ⊆ SvS → Γ ⊢i ψ^[[evar:E↦p]] <---> ψ^[[evar:E↦q]] using gpi
ψ: Pattern
wfψ: well_formed (ex , ψ)
Hsz: S (size' ψ) ≤ S sz
EvS: EVarSet
SvS: SVarSet
i':= ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (ex , ψ))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (ex , ψ))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (ex , ψ)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E (ex , ψ) p q wfψ wfp wfq): ProofInfo
pile: ProofInfoLe i' gpi
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
E_in_EvS: E ∈ EvS
ψ_sub_EvS: free_evars (ex , ψ) ⊆ EvS
p_sub_SvS: free_svars p ⊆ SvS
q_sub_SvS: free_svars q ⊆ SvS
ψ_sub_SvS: free_svars (ex , ψ) ⊆ SvS
HEinψ: E ∈ free_evars (ex , ψ)
x: evar
Heqx: x = evar_fresh (elements EvS)
frx: x ∉ EvS
H: well_formed ψ^{evar:0↦x}
H0: size' ψ^{evar:0↦x} ≤ sz
IH: Γ ⊢i ψ^{evar:0↦x}^[[evar:E↦p]] <---> ψ^{evar:0↦x}^[[evar:E↦q]] using gpi

list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (ex , ψ))) ⊆ list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (ex , ψ)))
Σ: Signature
sz: nat
Γ: Theory
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
E: evar
exdepth, mudepth: nat
gpi: ProofInfo
pf: Γ ⊢i p <---> q using gpi
IHsz: (ψ : Pattern) (wfψ : well_formed ψ), size' ψ ≤ sz → (EvS : EVarSet) (SvS : SVarSet), ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ p q wfψ wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ ⊆ SvS → Γ ⊢i ψ^[[evar:E↦p]] <---> ψ^[[evar:E↦q]] using gpi
ψ: Pattern
wfψ: well_formed (ex , ψ)
Hsz: S (size' ψ) ≤ S sz
EvS: EVarSet
SvS: SVarSet
i':= ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (ex , ψ))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (ex , ψ))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (ex , ψ)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E (ex , ψ) p q wfψ wfp wfq): ProofInfo
pile: ProofInfoLe i' gpi
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
E_in_EvS: E ∈ EvS
ψ_sub_EvS: free_evars (ex , ψ) ⊆ EvS
p_sub_SvS: free_svars p ⊆ SvS
q_sub_SvS: free_svars q ⊆ SvS
ψ_sub_SvS: free_svars (ex , ψ) ⊆ SvS
HEinψ: E ∈ free_evars (ex , ψ)
x: evar
Heqx: x = evar_fresh (elements EvS)
frx: x ∉ EvS
H: well_formed ψ^{evar:0↦x}
H0: size' ψ^{evar:0↦x} ≤ sz
IH: Γ ⊢i ψ^{evar:0↦x}^[[evar:E↦p]] <---> ψ^{evar:0↦x}^[[evar:E↦q]] using gpi
list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (ex , ψ))) ⊆ list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (ex , ψ)))
Σ: Signature
sz: nat
Γ: Theory
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
E: evar
exdepth, mudepth: nat
gpi: ProofInfo
pf: Γ ⊢i p <---> q using gpi
IHsz: (ψ : Pattern) (wfψ : well_formed ψ), size' ψ ≤ sz → (EvS : EVarSet) (SvS : SVarSet), ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ p q wfψ wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ ⊆ SvS → Γ ⊢i ψ^[[evar:E↦p]] <---> ψ^[[evar:E↦q]] using gpi
ψ: Pattern
wfψ: well_formed (ex , ψ)
Hsz: S (size' ψ) ≤ S sz
EvS: EVarSet
SvS: SVarSet
i':= ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (ex , ψ))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (ex , ψ))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (ex , ψ)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E (ex , ψ) p q wfψ wfp wfq): ProofInfo
pile: ProofInfoLe i' gpi
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
E_in_EvS: E ∈ EvS
ψ_sub_EvS: free_evars (ex , ψ) ⊆ EvS
p_sub_SvS: free_svars p ⊆ SvS
q_sub_SvS: free_svars q ⊆ SvS
ψ_sub_SvS: free_svars (ex , ψ) ⊆ SvS
HEinψ: E ∈ free_evars (ex , ψ)
x: evar
Heqx: x = evar_fresh (elements EvS)
frx: x ∉ EvS
H: well_formed ψ^{evar:0↦x}
H0: size' ψ^{evar:0↦x} ≤ sz
IH: Γ ⊢i ψ^{evar:0↦x}^[[evar:E↦p]] <---> ψ^{evar:0↦x}^[[evar:E↦q]] using gpi
(if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (ex , ψ)) then false else true) ==> (if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (ex , ψ)) then false else true)
Σ: Signature
sz: nat
Γ: Theory
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
E: evar
exdepth, mudepth: nat
gpi: ProofInfo
pf: Γ ⊢i p <---> q using gpi
IHsz: (ψ : Pattern) (wfψ : well_formed ψ), size' ψ ≤ sz → (EvS : EVarSet) (SvS : SVarSet), ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ p q wfψ wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ ⊆ SvS → Γ ⊢i ψ^[[evar:E↦p]] <---> ψ^[[evar:E↦q]] using gpi
ψ: Pattern
wfψ: well_formed (ex , ψ)
Hsz: S (size' ψ) ≤ S sz
EvS: EVarSet
SvS: SVarSet
i':= ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (ex , ψ))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (ex , ψ))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (ex , ψ)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E (ex , ψ) p q wfψ wfp wfq): ProofInfo
pile: ProofInfoLe i' gpi
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
E_in_EvS: E ∈ EvS
ψ_sub_EvS: free_evars (ex , ψ) ⊆ EvS
p_sub_SvS: free_svars p ⊆ SvS
q_sub_SvS: free_svars q ⊆ SvS
ψ_sub_SvS: free_svars (ex , ψ) ⊆ SvS
HEinψ: E ∈ free_evars (ex , ψ)
x: evar
Heqx: x = evar_fresh (elements EvS)
frx: x ∉ EvS
H: well_formed ψ^{evar:0↦x}
H0: size' ψ^{evar:0↦x} ≤ sz
IH: Γ ⊢i ψ^{evar:0↦x}^[[evar:E↦p]] <---> ψ^{evar:0↦x}^[[evar:E↦q]] using gpi
∅ ⊆ gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E (ex , ψ) p q wfψ wfp wfq)
Σ: Signature
sz: nat
Γ: Theory
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
E: evar
exdepth, mudepth: nat
gpi: ProofInfo
pf: Γ ⊢i p <---> q using gpi
IHsz: (ψ : Pattern) (wfψ : well_formed ψ), size' ψ ≤ sz → (EvS : EVarSet) (SvS : SVarSet), ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ p q wfψ wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ ⊆ SvS → Γ ⊢i ψ^[[evar:E↦p]] <---> ψ^[[evar:E↦q]] using gpi
ψ: Pattern
wfψ: well_formed (ex , ψ)
Hsz: S (size' ψ) ≤ S sz
EvS: EVarSet
SvS: SVarSet
i':= ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (ex , ψ))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (ex , ψ))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (ex , ψ)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E (ex , ψ) p q wfψ wfp wfq): ProofInfo
pile: ProofInfoLe i' gpi
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
E_in_EvS: E ∈ EvS
ψ_sub_EvS: free_evars (ex , ψ) ⊆ EvS
p_sub_SvS: free_svars p ⊆ SvS
q_sub_SvS: free_svars q ⊆ SvS
ψ_sub_SvS: free_svars (ex , ψ) ⊆ SvS
HEinψ: E ∈ free_evars (ex , ψ)
x: evar
Heqx: x = evar_fresh (elements EvS)
frx: x ∉ EvS
H: well_formed ψ^{evar:0↦x}
H0: size' ψ^{evar:0↦x} ≤ sz
IH: Γ ⊢i ψ^{evar:0↦x}^[[evar:E↦p]] <---> ψ^{evar:0↦x}^[[evar:E↦q]] using gpi

list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (ex , ψ))) ⊆ list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (ex , ψ)))
apply reflexivity.
Σ: Signature
sz: nat
Γ: Theory
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
E: evar
exdepth, mudepth: nat
gpi: ProofInfo
pf: Γ ⊢i p <---> q using gpi
IHsz: (ψ : Pattern) (wfψ : well_formed ψ), size' ψ ≤ sz → (EvS : EVarSet) (SvS : SVarSet), ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ p q wfψ wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ ⊆ SvS → Γ ⊢i ψ^[[evar:E↦p]] <---> ψ^[[evar:E↦q]] using gpi
ψ: Pattern
wfψ: well_formed (ex , ψ)
Hsz: S (size' ψ) ≤ S sz
EvS: EVarSet
SvS: SVarSet
i':= ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (ex , ψ))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (ex , ψ))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (ex , ψ)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E (ex , ψ) p q wfψ wfp wfq): ProofInfo
pile: ProofInfoLe i' gpi
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
E_in_EvS: E ∈ EvS
ψ_sub_EvS: free_evars (ex , ψ) ⊆ EvS
p_sub_SvS: free_svars p ⊆ SvS
q_sub_SvS: free_svars q ⊆ SvS
ψ_sub_SvS: free_svars (ex , ψ) ⊆ SvS
HEinψ: E ∈ free_evars (ex , ψ)
x: evar
Heqx: x = evar_fresh (elements EvS)
frx: x ∉ EvS
H: well_formed ψ^{evar:0↦x}
H0: size' ψ^{evar:0↦x} ≤ sz
IH: Γ ⊢i ψ^{evar:0↦x}^[[evar:E↦p]] <---> ψ^{evar:0↦x}^[[evar:E↦q]] using gpi

list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (ex , ψ))) ⊆ list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (ex , ψ)))
Σ: Signature
sz: nat
Γ: Theory
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
E: evar
exdepth, mudepth: nat
gpi: ProofInfo
pf: Γ ⊢i p <---> q using gpi
IHsz: (ψ : Pattern) (wfψ : well_formed ψ), size' ψ ≤ sz → (EvS : EVarSet) (SvS : SVarSet), ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ p q wfψ wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ ⊆ SvS → Γ ⊢i ψ^[[evar:E↦p]] <---> ψ^[[evar:E↦q]] using gpi
ψ: Pattern
wfψ: well_formed (ex , ψ)
Hsz: S (size' ψ) ≤ S sz
EvS: EVarSet
SvS: SVarSet
i':= ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (ex , ψ))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (ex , ψ))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (ex , ψ)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E (ex , ψ) p q wfψ wfp wfq): ProofInfo
pile: ProofInfoLe i' gpi
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
E_in_EvS: E ∈ EvS
ψ_sub_EvS: free_evars (ex , ψ) ⊆ EvS
p_sub_SvS: free_svars p ⊆ SvS
q_sub_SvS: free_svars q ⊆ SvS
ψ_sub_SvS: free_svars (ex , ψ) ⊆ SvS
HEinψ: E ∈ free_evars (ex , ψ)
x: evar
Heqx: x = evar_fresh (elements EvS)
frx: x ∉ EvS
H: well_formed ψ^{evar:0↦x}
H0: size' ψ^{evar:0↦x} ≤ sz
IH: Γ ⊢i ψ^{evar:0↦x}^[[evar:E↦p]] <---> ψ^{evar:0↦x}^[[evar:E↦q]] using gpi
(if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (ex , ψ)) then false else true) ==> (if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (ex , ψ)) then false else true)
Σ: Signature
sz: nat
Γ: Theory
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
E: evar
exdepth, mudepth: nat
gpi: ProofInfo
pf: Γ ⊢i p <---> q using gpi
IHsz: (ψ : Pattern) (wfψ : well_formed ψ), size' ψ ≤ sz → (EvS : EVarSet) (SvS : SVarSet), ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ p q wfψ wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ ⊆ SvS → Γ ⊢i ψ^[[evar:E↦p]] <---> ψ^[[evar:E↦q]] using gpi
ψ: Pattern
wfψ: well_formed (ex , ψ)
Hsz: S (size' ψ) ≤ S sz
EvS: EVarSet
SvS: SVarSet
i':= ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (ex , ψ))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (ex , ψ))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (ex , ψ)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E (ex , ψ) p q wfψ wfp wfq): ProofInfo
pile: ProofInfoLe i' gpi
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
E_in_EvS: E ∈ EvS
ψ_sub_EvS: free_evars (ex , ψ) ⊆ EvS
p_sub_SvS: free_svars p ⊆ SvS
q_sub_SvS: free_svars q ⊆ SvS
ψ_sub_SvS: free_svars (ex , ψ) ⊆ SvS
HEinψ: E ∈ free_evars (ex , ψ)
x: evar
Heqx: x = evar_fresh (elements EvS)
frx: x ∉ EvS
H: well_formed ψ^{evar:0↦x}
H0: size' ψ^{evar:0↦x} ≤ sz
IH: Γ ⊢i ψ^{evar:0↦x}^[[evar:E↦p]] <---> ψ^{evar:0↦x}^[[evar:E↦q]] using gpi
∅ ⊆ gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E (ex , ψ) p q wfψ wfp wfq)
Σ: Signature
sz: nat
Γ: Theory
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
E: evar
exdepth, mudepth: nat
gpi: ProofInfo
pf: Γ ⊢i p <---> q using gpi
IHsz: (ψ : Pattern) (wfψ : well_formed ψ), size' ψ ≤ sz → (EvS : EVarSet) (SvS : SVarSet), ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ p q wfψ wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ ⊆ SvS → Γ ⊢i ψ^[[evar:E↦p]] <---> ψ^[[evar:E↦q]] using gpi
ψ: Pattern
wfψ: well_formed (ex , ψ)
Hsz: S (size' ψ) ≤ S sz
EvS: EVarSet
SvS: SVarSet
i':= ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (ex , ψ))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (ex , ψ))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (ex , ψ)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E (ex , ψ) p q wfψ wfp wfq): ProofInfo
pile: ProofInfoLe i' gpi
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
E_in_EvS: E ∈ EvS
ψ_sub_EvS: free_evars (ex , ψ) ⊆ EvS
p_sub_SvS: free_svars p ⊆ SvS
q_sub_SvS: free_svars q ⊆ SvS
ψ_sub_SvS: free_svars (ex , ψ) ⊆ SvS
HEinψ: E ∈ free_evars (ex , ψ)
x: evar
Heqx: x = evar_fresh (elements EvS)
frx: x ∉ EvS
H: well_formed ψ^{evar:0↦x}
H0: size' ψ^{evar:0↦x} ≤ sz
IH: Γ ⊢i ψ^{evar:0↦x}^[[evar:E↦p]] <---> ψ^{evar:0↦x}^[[evar:E↦q]] using gpi

list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (ex , ψ))) ⊆ list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (ex , ψ)))
apply reflexivity.
Σ: Signature
sz: nat
Γ: Theory
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
E: evar
exdepth, mudepth: nat
gpi: ProofInfo
pf: Γ ⊢i p <---> q using gpi
IHsz: (ψ : Pattern) (wfψ : well_formed ψ), size' ψ ≤ sz → (EvS : EVarSet) (SvS : SVarSet), ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ p q wfψ wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ ⊆ SvS → Γ ⊢i ψ^[[evar:E↦p]] <---> ψ^[[evar:E↦q]] using gpi
ψ: Pattern
wfψ: well_formed (ex , ψ)
Hsz: S (size' ψ) ≤ S sz
EvS: EVarSet
SvS: SVarSet
i':= ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (ex , ψ))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (ex , ψ))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (ex , ψ)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E (ex , ψ) p q wfψ wfp wfq): ProofInfo
pile: ProofInfoLe i' gpi
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
E_in_EvS: E ∈ EvS
ψ_sub_EvS: free_evars (ex , ψ) ⊆ EvS
p_sub_SvS: free_svars p ⊆ SvS
q_sub_SvS: free_svars q ⊆ SvS
ψ_sub_SvS: free_svars (ex , ψ) ⊆ SvS
HEinψ: E ∈ free_evars (ex , ψ)
x: evar
Heqx: x = evar_fresh (elements EvS)
frx: x ∉ EvS
H: well_formed ψ^{evar:0↦x}
H0: size' ψ^{evar:0↦x} ≤ sz
IH: Γ ⊢i ψ^{evar:0↦x}^[[evar:E↦p]] <---> ψ^{evar:0↦x}^[[evar:E↦q]] using gpi

(if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (ex , ψ)) then false else true) ==> (if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (ex , ψ)) then false else true)
Σ: Signature
sz: nat
Γ: Theory
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
E: evar
exdepth, mudepth: nat
gpi: ProofInfo
pf: Γ ⊢i p <---> q using gpi
IHsz: (ψ : Pattern) (wfψ : well_formed ψ), size' ψ ≤ sz → (EvS : EVarSet) (SvS : SVarSet), ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ p q wfψ wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ ⊆ SvS → Γ ⊢i ψ^[[evar:E↦p]] <---> ψ^[[evar:E↦q]] using gpi
ψ: Pattern
wfψ: well_formed (ex , ψ)
Hsz: S (size' ψ) ≤ S sz
EvS: EVarSet
SvS: SVarSet
i':= ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (ex , ψ))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (ex , ψ))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (ex , ψ)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E (ex , ψ) p q wfψ wfp wfq): ProofInfo
pile: ProofInfoLe i' gpi
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
E_in_EvS: E ∈ EvS
ψ_sub_EvS: free_evars (ex , ψ) ⊆ EvS
p_sub_SvS: free_svars p ⊆ SvS
q_sub_SvS: free_svars q ⊆ SvS
ψ_sub_SvS: free_svars (ex , ψ) ⊆ SvS
HEinψ: E ∈ free_evars (ex , ψ)
x: evar
Heqx: x = evar_fresh (elements EvS)
frx: x ∉ EvS
H: well_formed ψ^{evar:0↦x}
H0: size' ψ^{evar:0↦x} ≤ sz
IH: Γ ⊢i ψ^{evar:0↦x}^[[evar:E↦p]] <---> ψ^{evar:0↦x}^[[evar:E↦q]] using gpi
∅ ⊆ gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E (ex , ψ) p q wfψ wfp wfq)
Σ: Signature
sz: nat
Γ: Theory
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
E: evar
exdepth, mudepth: nat
gpi: ProofInfo
pf: Γ ⊢i p <---> q using gpi
IHsz: (ψ : Pattern) (wfψ : well_formed ψ), size' ψ ≤ sz → (EvS : EVarSet) (SvS : SVarSet), ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ p q wfψ wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ ⊆ SvS → Γ ⊢i ψ^[[evar:E↦p]] <---> ψ^[[evar:E↦q]] using gpi
ψ: Pattern
wfψ: well_formed (ex , ψ)
Hsz: S (size' ψ) ≤ S sz
EvS: EVarSet
SvS: SVarSet
i':= ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (ex , ψ))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (ex , ψ))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (ex , ψ)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E (ex , ψ) p q wfψ wfp wfq): ProofInfo
pile: ProofInfoLe i' gpi
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
E_in_EvS: E ∈ EvS
ψ_sub_EvS: free_evars (ex , ψ) ⊆ EvS
p_sub_SvS: free_svars p ⊆ SvS
q_sub_SvS: free_svars q ⊆ SvS
ψ_sub_SvS: free_svars (ex , ψ) ⊆ SvS
HEinψ: E ∈ free_evars (ex , ψ)
x: evar
Heqx: x = evar_fresh (elements EvS)
frx: x ∉ EvS
H: well_formed ψ^{evar:0↦x}
H0: size' ψ^{evar:0↦x} ≤ sz
IH: Γ ⊢i ψ^{evar:0↦x}^[[evar:E↦p]] <---> ψ^{evar:0↦x}^[[evar:E↦q]] using gpi

(if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (ex , ψ)) then false else true) ==> (if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (ex , ψ)) then false else true)
case_match; reflexivity.
Σ: Signature
sz: nat
Γ: Theory
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
E: evar
exdepth, mudepth: nat
gpi: ProofInfo
pf: Γ ⊢i p <---> q using gpi
IHsz: (ψ : Pattern) (wfψ : well_formed ψ), size' ψ ≤ sz → (EvS : EVarSet) (SvS : SVarSet), ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ p q wfψ wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ ⊆ SvS → Γ ⊢i ψ^[[evar:E↦p]] <---> ψ^[[evar:E↦q]] using gpi
ψ: Pattern
wfψ: well_formed (ex , ψ)
Hsz: S (size' ψ) ≤ S sz
EvS: EVarSet
SvS: SVarSet
i':= ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (ex , ψ))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (ex , ψ))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (ex , ψ)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E (ex , ψ) p q wfψ wfp wfq): ProofInfo
pile: ProofInfoLe i' gpi
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
E_in_EvS: E ∈ EvS
ψ_sub_EvS: free_evars (ex , ψ) ⊆ EvS
p_sub_SvS: free_svars p ⊆ SvS
q_sub_SvS: free_svars q ⊆ SvS
ψ_sub_SvS: free_svars (ex , ψ) ⊆ SvS
HEinψ: E ∈ free_evars (ex , ψ)
x: evar
Heqx: x = evar_fresh (elements EvS)
frx: x ∉ EvS
H: well_formed ψ^{evar:0↦x}
H0: size' ψ^{evar:0↦x} ≤ sz
IH: Γ ⊢i ψ^{evar:0↦x}^[[evar:E↦p]] <---> ψ^{evar:0↦x}^[[evar:E↦q]] using gpi

∅ ⊆ gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E (ex , ψ) p q wfψ wfp wfq)
Σ: Signature
sz: nat
Γ: Theory
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
E: evar
exdepth, mudepth: nat
gpi: ProofInfo
pf: Γ ⊢i p <---> q using gpi
IHsz: (ψ : Pattern) (wfψ : well_formed ψ), size' ψ ≤ sz → (EvS : EVarSet) (SvS : SVarSet), ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ p q wfψ wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ ⊆ SvS → Γ ⊢i ψ^[[evar:E↦p]] <---> ψ^[[evar:E↦q]] using gpi
ψ: Pattern
wfψ: well_formed (ex , ψ)
Hsz: S (size' ψ) ≤ S sz
EvS: EVarSet
SvS: SVarSet
i':= ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (ex , ψ))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (ex , ψ))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (ex , ψ)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E (ex , ψ) p q wfψ wfp wfq): ProofInfo
pile: ProofInfoLe i' gpi
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
E_in_EvS: E ∈ EvS
ψ_sub_EvS: free_evars (ex , ψ) ⊆ EvS
p_sub_SvS: free_svars p ⊆ SvS
q_sub_SvS: free_svars q ⊆ SvS
ψ_sub_SvS: free_svars (ex , ψ) ⊆ SvS
HEinψ: E ∈ free_evars (ex , ψ)
x: evar
Heqx: x = evar_fresh (elements EvS)
frx: x ∉ EvS
H: well_formed ψ^{evar:0↦x}
H0: size' ψ^{evar:0↦x} ≤ sz
IH: Γ ⊢i ψ^{evar:0↦x}^[[evar:E↦p]] <---> ψ^{evar:0↦x}^[[evar:E↦q]] using gpi

∅ ⊆ gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E (ex , ψ) p q wfψ wfp wfq)
Σ: Signature
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
E: evar
ψ: Pattern
wfψ: well_formed (ex , ψ)
EvS: EVarSet
SvS: SVarSet

∅ ⊆ gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E (ex , ψ) p q wfψ wfp wfq)
set_solver. } }
Σ: Signature
sz: nat
Γ: Theory
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
E: evar
exdepth, mudepth: nat
gpi: ProofInfo
pf: Γ ⊢i p <---> q using gpi
IHsz: (ψ : Pattern) (wfψ : well_formed ψ), size' ψ ≤ sz → (EvS : EVarSet) (SvS : SVarSet), ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ p q wfψ wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ ⊆ SvS → Γ ⊢i ψ^[[evar:E↦p]] <---> ψ^[[evar:E↦q]] using gpi
ψ: Pattern
wfψ: well_formed (mu , ψ)
Hsz: S (size' ψ) ≤ S sz
EvS: EVarSet
SvS: SVarSet
i':= ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (mu , ψ))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (mu , ψ))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (mu , ψ)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E (mu , ψ) p q wfψ wfp wfq): ProofInfo
pile: ProofInfoLe i' gpi
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
E_in_EvS: E ∈ EvS
ψ_sub_EvS: free_evars (mu , ψ) ⊆ EvS
p_sub_SvS: free_svars p ⊆ SvS
q_sub_SvS: free_svars q ⊆ SvS
ψ_sub_SvS: free_svars (mu , ψ) ⊆ SvS
HEinψ: E ∈ free_evars (mu , ψ)

Γ ⊢i (mu , ψ^[[evar:E↦p]]) <---> (mu , ψ^[[evar:E↦q]]) using gpi
Σ: Signature
sz: nat
Γ: Theory
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
E: evar
exdepth, mudepth: nat
gpi: ProofInfo
pf: Γ ⊢i p <---> q using gpi
IHsz: (ψ : Pattern) (wfψ : well_formed ψ), size' ψ ≤ sz → (EvS : EVarSet) (SvS : SVarSet), ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ p q wfψ wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ ⊆ SvS → Γ ⊢i ψ^[[evar:E↦p]] <---> ψ^[[evar:E↦q]] using gpi
ψ: Pattern
wfψ: well_formed (mu , ψ)
Hsz: S (size' ψ) ≤ S sz
EvS: EVarSet
SvS: SVarSet
i':= ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (mu , ψ))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (mu , ψ))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (mu , ψ)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E (mu , ψ) p q wfψ wfp wfq): ProofInfo
pile: ProofInfoLe i' gpi
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
E_in_EvS: E ∈ EvS
ψ_sub_EvS: free_evars (mu , ψ) ⊆ EvS
p_sub_SvS: free_svars p ⊆ SvS
q_sub_SvS: free_svars q ⊆ SvS
ψ_sub_SvS: free_svars (mu , ψ) ⊆ SvS
HEinψ: E ∈ free_evars (mu , ψ)

Γ ⊢i (mu , ψ^[[evar:E↦p]]) <---> (mu , ψ^[[evar:E↦q]]) using gpi
Σ: Signature
sz: nat
Γ: Theory
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
E: evar
exdepth, mudepth: nat
gpi: ProofInfo
pf: Γ ⊢i p <---> q using gpi
IHsz: (ψ : Pattern) (wfψ : well_formed ψ), size' ψ ≤ sz → (EvS : EVarSet) (SvS : SVarSet), ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ p q wfψ wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ ⊆ SvS → Γ ⊢i ψ^[[evar:E↦p]] <---> ψ^[[evar:E↦q]] using gpi
ψ: Pattern
wfψ: well_formed (mu , ψ)
Hsz: S (size' ψ) ≤ S sz
EvS: EVarSet
SvS: SVarSet
i':= ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (mu , ψ))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (mu , ψ))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (mu , ψ)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E (mu , ψ) p q wfψ wfp wfq): ProofInfo
pile: ProofInfoLe i' gpi
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
E_in_EvS: E ∈ EvS
ψ_sub_EvS: free_evars (mu , ψ) ⊆ EvS
p_sub_SvS: free_svars p ⊆ SvS
q_sub_SvS: free_svars q ⊆ SvS
ψ_sub_SvS: free_svars (mu , ψ) ⊆ SvS
HEinψ: E ∈ free_evars (mu , ψ)
frX: svar_fresh (elements SvS) ∉ SvS

Γ ⊢i (mu , ψ^[[evar:E↦p]]) <---> (mu , ψ^[[evar:E↦q]]) using gpi
Σ: Signature
sz: nat
Γ: Theory
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
E: evar
exdepth, mudepth: nat
gpi: ProofInfo
pf: Γ ⊢i p <---> q using gpi
IHsz: (ψ : Pattern) (wfψ : well_formed ψ), size' ψ ≤ sz → (EvS : EVarSet) (SvS : SVarSet), ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ p q wfψ wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ ⊆ SvS → Γ ⊢i ψ^[[evar:E↦p]] <---> ψ^[[evar:E↦q]] using gpi
ψ: Pattern
wfψ: well_formed (mu , ψ)
Hsz: S (size' ψ) ≤ S sz
EvS: EVarSet
SvS: SVarSet
i':= ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (mu , ψ))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (mu , ψ))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (mu , ψ)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E (mu , ψ) p q wfψ wfp wfq): ProofInfo
pile: ProofInfoLe i' gpi
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
E_in_EvS: E ∈ EvS
ψ_sub_EvS: free_evars (mu , ψ) ⊆ EvS
p_sub_SvS: free_svars p ⊆ SvS
q_sub_SvS: free_svars q ⊆ SvS
ψ_sub_SvS: free_svars (mu , ψ) ⊆ SvS
HEinψ: E ∈ free_evars (mu , ψ)
X: svar
HeqX: X = svar_fresh (elements SvS)
frX: X ∉ SvS

Γ ⊢i (mu , ψ^[[evar:E↦p]]) <---> (mu , ψ^[[evar:E↦q]]) using gpi
Σ: Signature
sz: nat
Γ: Theory
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
E: evar
exdepth, mudepth: nat
gpi: ProofInfo
pf: Γ ⊢i p <---> q using gpi
IHsz: (ψ : Pattern) (wfψ : well_formed ψ), size' ψ ≤ sz → (EvS : EVarSet) (SvS : SVarSet), ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ p q wfψ wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ ⊆ SvS → Γ ⊢i ψ^[[evar:E↦p]] <---> ψ^[[evar:E↦q]] using gpi
ψ: Pattern
wfψ: well_formed (mu , ψ)
Hsz: S (size' ψ) ≤ S sz
EvS: EVarSet
SvS: SVarSet
i':= ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (mu , ψ))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (mu , ψ))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (mu , ψ)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E (mu , ψ) p q wfψ wfp wfq): ProofInfo
pile: ProofInfoLe i' gpi
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
E_in_EvS: E ∈ EvS
ψ_sub_EvS: free_evars (mu , ψ) ⊆ EvS
p_sub_SvS: free_svars p ⊆ SvS
q_sub_SvS: free_svars q ⊆ SvS
ψ_sub_SvS: free_svars (mu , ψ) ⊆ SvS
HEinψ: E ∈ free_evars ψ
X: svar
HeqX: X = svar_fresh (elements SvS)
frX: X ∉ SvS

Γ ⊢i (mu , ψ^[[evar:E↦p]]) <---> (mu , ψ^[[evar:E↦q]]) using gpi
Falling back on (well_formed_xy 0 0 ψ^{svar:0↦X} = true)
Σ: Signature
sz: nat
Γ: Theory
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
E: evar
exdepth, mudepth: nat
gpi: ProofInfo
pf: Γ ⊢i p <---> q using gpi
IHsz: (ψ : Pattern) (wfψ : well_formed ψ), size' ψ ≤ sz → (EvS : EVarSet) (SvS : SVarSet), ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ p q wfψ wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ ⊆ SvS → Γ ⊢i ψ^[[evar:E↦p]] <---> ψ^[[evar:E↦q]] using gpi
ψ: Pattern
wfψ: well_formed (mu , ψ)
Hsz: S (size' ψ) ≤ S sz
EvS: EVarSet
SvS: SVarSet
i':= ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (mu , ψ))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (mu , ψ))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (mu , ψ)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E (mu , ψ) p q wfψ wfp wfq): ProofInfo
pile: ProofInfoLe i' gpi
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
E_in_EvS: E ∈ EvS
ψ_sub_EvS: free_evars (mu , ψ) ⊆ EvS
p_sub_SvS: free_svars p ⊆ SvS
q_sub_SvS: free_svars q ⊆ SvS
ψ_sub_SvS: free_svars (mu , ψ) ⊆ SvS
HEinψ: E ∈ free_evars ψ
X: svar
HeqX: X = svar_fresh (elements SvS)
frX: X ∉ SvS
H: well_formed ψ^{svar:0↦X} = true

Γ ⊢i (mu , ψ^[[evar:E↦p]]) <---> (mu , ψ^[[evar:E↦q]]) using gpi
Σ: Signature
sz: nat
Γ: Theory
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
E: evar
exdepth, mudepth: nat
gpi: ProofInfo
pf: Γ ⊢i p <---> q using gpi
IHsz: (ψ : Pattern) (wfψ : well_formed ψ), size' ψ ≤ sz → (EvS : EVarSet) (SvS : SVarSet), ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ p q wfψ wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ ⊆ SvS → Γ ⊢i ψ^[[evar:E↦p]] <---> ψ^[[evar:E↦q]] using gpi
ψ: Pattern
wfψ: well_formed (mu , ψ)
Hsz: S (size' ψ) ≤ S sz
EvS: EVarSet
SvS: SVarSet
i':= ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (mu , ψ))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (mu , ψ))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (mu , ψ)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E (mu , ψ) p q wfψ wfp wfq): ProofInfo
pile: ProofInfoLe i' gpi
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
E_in_EvS: E ∈ EvS
ψ_sub_EvS: free_evars (mu , ψ) ⊆ EvS
p_sub_SvS: free_svars p ⊆ SvS
q_sub_SvS: free_svars q ⊆ SvS
ψ_sub_SvS: free_svars (mu , ψ) ⊆ SvS
HEinψ: E ∈ free_evars ψ
X: svar
HeqX: X = svar_fresh (elements SvS)
frX: X ∉ SvS
H: well_formed ψ^{svar:0↦X} = true
H0: size' ψ^{svar:0↦X} ≤ sz

Γ ⊢i (mu , ψ^[[evar:E↦p]]) <---> (mu , ψ^[[evar:E↦q]]) using gpi
Σ: Signature
sz: nat
Γ: Theory
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
E: evar
exdepth, mudepth: nat
gpi: ProofInfo
pf: Γ ⊢i p <---> q using gpi
IHsz: (ψ : Pattern) (wfψ : well_formed ψ), size' ψ ≤ sz → (EvS : EVarSet) (SvS : SVarSet), ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ p q wfψ wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ ⊆ SvS → Γ ⊢i ψ^[[evar:E↦p]] <---> ψ^[[evar:E↦q]] using gpi
ψ: Pattern
wfψ: well_formed (mu , ψ)
Hsz: S (size' ψ) ≤ S sz
EvS: EVarSet
SvS: SVarSet
i':= ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (mu , ψ))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (mu , ψ))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (mu , ψ)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E (mu , ψ) p q wfψ wfp wfq): ProofInfo
pile: ProofInfoLe i' gpi
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
E_in_EvS: E ∈ EvS
ψ_sub_EvS: free_evars (mu , ψ) ⊆ EvS
p_sub_SvS: free_svars p ⊆ SvS
q_sub_SvS: free_svars q ⊆ SvS
ψ_sub_SvS: free_svars (mu , ψ) ⊆ SvS
HEinψ: E ∈ free_evars ψ
X: svar
HeqX: X = svar_fresh (elements SvS)
frX: X ∉ SvS
H: well_formed ψ^{svar:0↦X} = true
H0: size' ψ^{svar:0↦X} ≤ sz
IH: (EvS : EVarSet) (SvS : SVarSet), ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ^{svar:0↦X})), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ^{svar:0↦X})), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ^{svar:0↦X}) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ^{svar:0↦X} p q H wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ^{svar:0↦X} ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ^{svar:0↦X} ⊆ SvS → Γ ⊢i ψ^{svar:0↦X}^[[evar:E↦p]] <---> ψ^{svar:0↦X}^[[evar:E↦q]] using gpi

Γ ⊢i (mu , ψ^[[evar:E↦p]]) <---> (mu , ψ^[[evar:E↦q]]) using gpi
Σ: Signature
sz: nat
Γ: Theory
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
E: evar
exdepth, mudepth: nat
gpi: ProofInfo
pf: Γ ⊢i p <---> q using gpi
IHsz: (ψ : Pattern) (wfψ : well_formed ψ), size' ψ ≤ sz → (EvS : EVarSet) (SvS : SVarSet), ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ p q wfψ wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ ⊆ SvS → Γ ⊢i ψ^[[evar:E↦p]] <---> ψ^[[evar:E↦q]] using gpi
ψ: Pattern
wfψ: well_formed (mu , ψ)
Hsz: S (size' ψ) ≤ S sz
EvS: EVarSet
SvS: SVarSet
i':= ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (mu , ψ))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (mu , ψ))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (mu , ψ)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E (mu , ψ) p q wfψ wfp wfq): ProofInfo
pile: ProofInfoLe i' gpi
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
E_in_EvS: E ∈ EvS
ψ_sub_EvS: free_evars (mu , ψ) ⊆ EvS
p_sub_SvS: free_svars p ⊆ SvS
q_sub_SvS: free_svars q ⊆ SvS
ψ_sub_SvS: free_svars (mu , ψ) ⊆ SvS
HEinψ: E ∈ free_evars ψ
X: svar
HeqX: X = svar_fresh (elements SvS)
frX: X ∉ SvS
H: well_formed ψ^{svar:0↦X} = true
H0: size' ψ^{svar:0↦X} ≤ sz
IH: ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ^{svar:0↦X})), SVSubst := list_to_set (svar_fresh_seq ({[X]} ∪ SvS) (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ^{svar:0↦X})), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ^{svar:0↦X}) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS ({[X]} ∪ SvS) E ψ^{svar:0↦X} p q H wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ^{svar:0↦X} ⊆ EvS → free_svars p ⊆ {[X]} ∪ SvS → free_svars q ⊆ {[X]} ∪ SvS → free_svars ψ^{svar:0↦X} ⊆ {[X]} ∪ SvS → Γ ⊢i ψ^{svar:0↦X}^[[evar:E↦p]] <---> ψ^{svar:0↦X}^[[evar:E↦q]] using gpi

Γ ⊢i (mu , ψ^[[evar:E↦p]]) <---> (mu , ψ^[[evar:E↦q]]) using gpi
Σ: Signature
sz: nat
Γ: Theory
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
E: evar
exdepth, mudepth: nat
gpi: ProofInfo
pf: Γ ⊢i p <---> q using gpi
IHsz: (ψ : Pattern) (wfψ : well_formed ψ), size' ψ ≤ sz → (EvS : EVarSet) (SvS : SVarSet), ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ p q wfψ wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ ⊆ SvS → Γ ⊢i ψ^[[evar:E↦p]] <---> ψ^[[evar:E↦q]] using gpi
ψ: Pattern
wfψ: well_formed (mu , ψ)
Hsz: S (size' ψ) ≤ S sz
EvS: EVarSet
SvS: SVarSet
i':= ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (mu , ψ))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (mu , ψ))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (mu , ψ)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E (mu , ψ) p q wfψ wfp wfq): ProofInfo
pile: ProofInfoLe i' gpi
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
E_in_EvS: E ∈ EvS
ψ_sub_EvS: free_evars (mu , ψ) ⊆ EvS
p_sub_SvS: free_svars p ⊆ SvS
q_sub_SvS: free_svars q ⊆ SvS
ψ_sub_SvS: free_svars (mu , ψ) ⊆ SvS
HEinψ: E ∈ free_evars ψ
X: svar
HeqX: X = svar_fresh (elements SvS)
frX: X ∉ SvS
H: well_formed ψ^{svar:0↦X} = true
H0: size' ψ^{svar:0↦X} ≤ sz
IH: ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ^{svar:0↦X})), SVSubst := list_to_set (svar_fresh_seq ({[X]} ∪ SvS) (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ^{svar:0↦X})), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ^{svar:0↦X}) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS ({[X]} ∪ SvS) E ψ^{svar:0↦X} p q H wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ^{svar:0↦X} ⊆ EvS → free_svars p ⊆ {[X]} ∪ SvS → free_svars q ⊆ {[X]} ∪ SvS → free_svars ψ^{svar:0↦X} ⊆ {[X]} ∪ SvS → Γ ⊢i ψ^{svar:0↦X}^[[evar:E↦p]] <---> ψ^{svar:0↦X}^[[evar:E↦q]] using gpi

ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ^{svar:0↦X})), SVSubst := list_to_set (svar_fresh_seq ({[X]} ∪ SvS) (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ^{svar:0↦X})), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ^{svar:0↦X}) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS ({[X]} ∪ SvS) E ψ^{svar:0↦X} p q H wfp wfq)) gpi
Σ: Signature
sz: nat
Γ: Theory
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
E: evar
exdepth, mudepth: nat
gpi: ProofInfo
pf: Γ ⊢i p <---> q using gpi
IHsz: (ψ : Pattern) (wfψ : well_formed ψ), size' ψ ≤ sz → (EvS : EVarSet) (SvS : SVarSet), ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ p q wfψ wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ ⊆ SvS → Γ ⊢i ψ^[[evar:E↦p]] <---> ψ^[[evar:E↦q]] using gpi
ψ: Pattern
wfψ: well_formed (mu , ψ)
Hsz: S (size' ψ) ≤ S sz
EvS: EVarSet
SvS: SVarSet
i':= ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (mu , ψ))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (mu , ψ))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (mu , ψ)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E (mu , ψ) p q wfψ wfp wfq): ProofInfo
pile: ProofInfoLe i' gpi
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
E_in_EvS: E ∈ EvS
ψ_sub_EvS: free_evars (mu , ψ) ⊆ EvS
p_sub_SvS: free_svars p ⊆ SvS
q_sub_SvS: free_svars q ⊆ SvS
ψ_sub_SvS: free_svars (mu , ψ) ⊆ SvS
HEinψ: E ∈ free_evars ψ
X: svar
HeqX: X = svar_fresh (elements SvS)
frX: X ∉ SvS
H: well_formed ψ^{svar:0↦X} = true
H0: size' ψ^{svar:0↦X} ≤ sz
IH: ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ^{svar:0↦X})), SVSubst := list_to_set (svar_fresh_seq ({[X]} ∪ SvS) (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ^{svar:0↦X})), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ^{svar:0↦X}) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS ({[X]} ∪ SvS) E ψ^{svar:0↦X} p q H wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ^{svar:0↦X} ⊆ EvS → free_svars p ⊆ {[X]} ∪ SvS → free_svars q ⊆ {[X]} ∪ SvS → free_svars ψ^{svar:0↦X} ⊆ {[X]} ∪ SvS → Γ ⊢i ψ^{svar:0↦X}^[[evar:E↦p]] <---> ψ^{svar:0↦X}^[[evar:E↦q]] using gpi
free_evars p ⊆ EvS
Σ: Signature
sz: nat
Γ: Theory
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
E: evar
exdepth, mudepth: nat
gpi: ProofInfo
pf: Γ ⊢i p <---> q using gpi
IHsz: (ψ : Pattern) (wfψ : well_formed ψ), size' ψ ≤ sz → (EvS : EVarSet) (SvS : SVarSet), ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ p q wfψ wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ ⊆ SvS → Γ ⊢i ψ^[[evar:E↦p]] <---> ψ^[[evar:E↦q]] using gpi
ψ: Pattern
wfψ: well_formed (mu , ψ)
Hsz: S (size' ψ) ≤ S sz
EvS: EVarSet
SvS: SVarSet
i':= ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (mu , ψ))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (mu , ψ))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (mu , ψ)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E (mu , ψ) p q wfψ wfp wfq): ProofInfo
pile: ProofInfoLe i' gpi
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
E_in_EvS: E ∈ EvS
ψ_sub_EvS: free_evars (mu , ψ) ⊆ EvS
p_sub_SvS: free_svars p ⊆ SvS
q_sub_SvS: free_svars q ⊆ SvS
ψ_sub_SvS: free_svars (mu , ψ) ⊆ SvS
HEinψ: E ∈ free_evars ψ
X: svar
HeqX: X = svar_fresh (elements SvS)
frX: X ∉ SvS
H: well_formed ψ^{svar:0↦X} = true
H0: size' ψ^{svar:0↦X} ≤ sz
IH: ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ^{svar:0↦X})), SVSubst := list_to_set (svar_fresh_seq ({[X]} ∪ SvS) (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ^{svar:0↦X})), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ^{svar:0↦X}) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS ({[X]} ∪ SvS) E ψ^{svar:0↦X} p q H wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ^{svar:0↦X} ⊆ EvS → free_svars p ⊆ {[X]} ∪ SvS → free_svars q ⊆ {[X]} ∪ SvS → free_svars ψ^{svar:0↦X} ⊆ {[X]} ∪ SvS → Γ ⊢i ψ^{svar:0↦X}^[[evar:E↦p]] <---> ψ^{svar:0↦X}^[[evar:E↦q]] using gpi
free_evars q ⊆ EvS
Σ: Signature
sz: nat
Γ: Theory
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
E: evar
exdepth, mudepth: nat
gpi: ProofInfo
pf: Γ ⊢i p <---> q using gpi
IHsz: (ψ : Pattern) (wfψ : well_formed ψ), size' ψ ≤ sz → (EvS : EVarSet) (SvS : SVarSet), ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ p q wfψ wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ ⊆ SvS → Γ ⊢i ψ^[[evar:E↦p]] <---> ψ^[[evar:E↦q]] using gpi
ψ: Pattern
wfψ: well_formed (mu , ψ)
Hsz: S (size' ψ) ≤ S sz
EvS: EVarSet
SvS: SVarSet
i':= ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (mu , ψ))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (mu , ψ))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (mu , ψ)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E (mu , ψ) p q wfψ wfp wfq): ProofInfo
pile: ProofInfoLe i' gpi
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
E_in_EvS: E ∈ EvS
ψ_sub_EvS: free_evars (mu , ψ) ⊆ EvS
p_sub_SvS: free_svars p ⊆ SvS
q_sub_SvS: free_svars q ⊆ SvS
ψ_sub_SvS: free_svars (mu , ψ) ⊆ SvS
HEinψ: E ∈ free_evars ψ
X: svar
HeqX: X = svar_fresh (elements SvS)
frX: X ∉ SvS
H: well_formed ψ^{svar:0↦X} = true
H0: size' ψ^{svar:0↦X} ≤ sz
IH: ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ^{svar:0↦X})), SVSubst := list_to_set (svar_fresh_seq ({[X]} ∪ SvS) (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ^{svar:0↦X})), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ^{svar:0↦X}) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS ({[X]} ∪ SvS) E ψ^{svar:0↦X} p q H wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ^{svar:0↦X} ⊆ EvS → free_svars p ⊆ {[X]} ∪ SvS → free_svars q ⊆ {[X]} ∪ SvS → free_svars ψ^{svar:0↦X} ⊆ {[X]} ∪ SvS → Γ ⊢i ψ^{svar:0↦X}^[[evar:E↦p]] <---> ψ^{svar:0↦X}^[[evar:E↦q]] using gpi
E ∈ EvS
Σ: Signature
sz: nat
Γ: Theory
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
E: evar
exdepth, mudepth: nat
gpi: ProofInfo
pf: Γ ⊢i p <---> q using gpi
IHsz: (ψ : Pattern) (wfψ : well_formed ψ), size' ψ ≤ sz → (EvS : EVarSet) (SvS : SVarSet), ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ p q wfψ wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ ⊆ SvS → Γ ⊢i ψ^[[evar:E↦p]] <---> ψ^[[evar:E↦q]] using gpi
ψ: Pattern
wfψ: well_formed (mu , ψ)
Hsz: S (size' ψ) ≤ S sz
EvS: EVarSet
SvS: SVarSet
i':= ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (mu , ψ))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (mu , ψ))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (mu , ψ)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E (mu , ψ) p q wfψ wfp wfq): ProofInfo
pile: ProofInfoLe i' gpi
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
E_in_EvS: E ∈ EvS
ψ_sub_EvS: free_evars (mu , ψ) ⊆ EvS
p_sub_SvS: free_svars p ⊆ SvS
q_sub_SvS: free_svars q ⊆ SvS
ψ_sub_SvS: free_svars (mu , ψ) ⊆ SvS
HEinψ: E ∈ free_evars ψ
X: svar
HeqX: X = svar_fresh (elements SvS)
frX: X ∉ SvS
H: well_formed ψ^{svar:0↦X} = true
H0: size' ψ^{svar:0↦X} ≤ sz
IH: ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ^{svar:0↦X})), SVSubst := list_to_set (svar_fresh_seq ({[X]} ∪ SvS) (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ^{svar:0↦X})), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ^{svar:0↦X}) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS ({[X]} ∪ SvS) E ψ^{svar:0↦X} p q H wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ^{svar:0↦X} ⊆ EvS → free_svars p ⊆ {[X]} ∪ SvS → free_svars q ⊆ {[X]} ∪ SvS → free_svars ψ^{svar:0↦X} ⊆ {[X]} ∪ SvS → Γ ⊢i ψ^{svar:0↦X}^[[evar:E↦p]] <---> ψ^{svar:0↦X}^[[evar:E↦q]] using gpi
free_evars ψ^{svar:0↦X} ⊆ EvS
Σ: Signature
sz: nat
Γ: Theory
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
E: evar
exdepth, mudepth: nat
gpi: ProofInfo
pf: Γ ⊢i p <---> q using gpi
IHsz: (ψ : Pattern) (wfψ : well_formed ψ), size' ψ ≤ sz → (EvS : EVarSet) (SvS : SVarSet), ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ p q wfψ wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ ⊆ SvS → Γ ⊢i ψ^[[evar:E↦p]] <---> ψ^[[evar:E↦q]] using gpi
ψ: Pattern
wfψ: well_formed (mu , ψ)
Hsz: S (size' ψ) ≤ S sz
EvS: EVarSet
SvS: SVarSet
i':= ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (mu , ψ))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (mu , ψ))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (mu , ψ)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E (mu , ψ) p q wfψ wfp wfq): ProofInfo
pile: ProofInfoLe i' gpi
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
E_in_EvS: E ∈ EvS
ψ_sub_EvS: free_evars (mu , ψ) ⊆ EvS
p_sub_SvS: free_svars p ⊆ SvS
q_sub_SvS: free_svars q ⊆ SvS
ψ_sub_SvS: free_svars (mu , ψ) ⊆ SvS
HEinψ: E ∈ free_evars ψ
X: svar
HeqX: X = svar_fresh (elements SvS)
frX: X ∉ SvS
H: well_formed ψ^{svar:0↦X} = true
H0: size' ψ^{svar:0↦X} ≤ sz
IH: ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ^{svar:0↦X})), SVSubst := list_to_set (svar_fresh_seq ({[X]} ∪ SvS) (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ^{svar:0↦X})), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ^{svar:0↦X}) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS ({[X]} ∪ SvS) E ψ^{svar:0↦X} p q H wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ^{svar:0↦X} ⊆ EvS → free_svars p ⊆ {[X]} ∪ SvS → free_svars q ⊆ {[X]} ∪ SvS → free_svars ψ^{svar:0↦X} ⊆ {[X]} ∪ SvS → Γ ⊢i ψ^{svar:0↦X}^[[evar:E↦p]] <---> ψ^{svar:0↦X}^[[evar:E↦q]] using gpi
free_svars p ⊆ {[X]} ∪ SvS
Σ: Signature
sz: nat
Γ: Theory
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
E: evar
exdepth, mudepth: nat
gpi: ProofInfo
pf: Γ ⊢i p <---> q using gpi
IHsz: (ψ : Pattern) (wfψ : well_formed ψ), size' ψ ≤ sz → (EvS : EVarSet) (SvS : SVarSet), ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ p q wfψ wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ ⊆ SvS → Γ ⊢i ψ^[[evar:E↦p]] <---> ψ^[[evar:E↦q]] using gpi
ψ: Pattern
wfψ: well_formed (mu , ψ)
Hsz: S (size' ψ) ≤ S sz
EvS: EVarSet
SvS: SVarSet
i':= ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (mu , ψ))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (mu , ψ))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (mu , ψ)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E (mu , ψ) p q wfψ wfp wfq): ProofInfo
pile: ProofInfoLe i' gpi
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
E_in_EvS: E ∈ EvS
ψ_sub_EvS: free_evars (mu , ψ) ⊆ EvS
p_sub_SvS: free_svars p ⊆ SvS
q_sub_SvS: free_svars q ⊆ SvS
ψ_sub_SvS: free_svars (mu , ψ) ⊆ SvS
HEinψ: E ∈ free_evars ψ
X: svar
HeqX: X = svar_fresh (elements SvS)
frX: X ∉ SvS
H: well_formed ψ^{svar:0↦X} = true
H0: size' ψ^{svar:0↦X} ≤ sz
IH: ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ^{svar:0↦X})), SVSubst := list_to_set (svar_fresh_seq ({[X]} ∪ SvS) (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ^{svar:0↦X})), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ^{svar:0↦X}) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS ({[X]} ∪ SvS) E ψ^{svar:0↦X} p q H wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ^{svar:0↦X} ⊆ EvS → free_svars p ⊆ {[X]} ∪ SvS → free_svars q ⊆ {[X]} ∪ SvS → free_svars ψ^{svar:0↦X} ⊆ {[X]} ∪ SvS → Γ ⊢i ψ^{svar:0↦X}^[[evar:E↦p]] <---> ψ^{svar:0↦X}^[[evar:E↦q]] using gpi
free_svars q ⊆ {[X]} ∪ SvS
Σ: Signature
sz: nat
Γ: Theory
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
E: evar
exdepth, mudepth: nat
gpi: ProofInfo
pf: Γ ⊢i p <---> q using gpi
IHsz: (ψ : Pattern) (wfψ : well_formed ψ), size' ψ ≤ sz → (EvS : EVarSet) (SvS : SVarSet), ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ p q wfψ wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ ⊆ SvS → Γ ⊢i ψ^[[evar:E↦p]] <---> ψ^[[evar:E↦q]] using gpi
ψ: Pattern
wfψ: well_formed (mu , ψ)
Hsz: S (size' ψ) ≤ S sz
EvS: EVarSet
SvS: SVarSet
i':= ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (mu , ψ))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (mu , ψ))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (mu , ψ)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E (mu , ψ) p q wfψ wfp wfq): ProofInfo
pile: ProofInfoLe i' gpi
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
E_in_EvS: E ∈ EvS
ψ_sub_EvS: free_evars (mu , ψ) ⊆ EvS
p_sub_SvS: free_svars p ⊆ SvS
q_sub_SvS: free_svars q ⊆ SvS
ψ_sub_SvS: free_svars (mu , ψ) ⊆ SvS
HEinψ: E ∈ free_evars ψ
X: svar
HeqX: X = svar_fresh (elements SvS)
frX: X ∉ SvS
H: well_formed ψ^{svar:0↦X} = true
H0: size' ψ^{svar:0↦X} ≤ sz
IH: ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ^{svar:0↦X})), SVSubst := list_to_set (svar_fresh_seq ({[X]} ∪ SvS) (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ^{svar:0↦X})), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ^{svar:0↦X}) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS ({[X]} ∪ SvS) E ψ^{svar:0↦X} p q H wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ^{svar:0↦X} ⊆ EvS → free_svars p ⊆ {[X]} ∪ SvS → free_svars q ⊆ {[X]} ∪ SvS → free_svars ψ^{svar:0↦X} ⊆ {[X]} ∪ SvS → Γ ⊢i ψ^{svar:0↦X}^[[evar:E↦p]] <---> ψ^{svar:0↦X}^[[evar:E↦q]] using gpi
free_svars ψ^{svar:0↦X} ⊆ {[X]} ∪ SvS
Σ: Signature
sz: nat
Γ: Theory
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
E: evar
exdepth, mudepth: nat
gpi: ProofInfo
pf: Γ ⊢i p <---> q using gpi
IHsz: (ψ : Pattern) (wfψ : well_formed ψ), size' ψ ≤ sz → (EvS : EVarSet) (SvS : SVarSet), ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ p q wfψ wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ ⊆ SvS → Γ ⊢i ψ^[[evar:E↦p]] <---> ψ^[[evar:E↦q]] using gpi
ψ: Pattern
wfψ: well_formed (mu , ψ)
Hsz: S (size' ψ) ≤ S sz
EvS: EVarSet
SvS: SVarSet
i':= ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (mu , ψ))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (mu , ψ))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (mu , ψ)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E (mu , ψ) p q wfψ wfp wfq): ProofInfo
pile: ProofInfoLe i' gpi
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
E_in_EvS: E ∈ EvS
ψ_sub_EvS: free_evars (mu , ψ) ⊆ EvS
p_sub_SvS: free_svars p ⊆ SvS
q_sub_SvS: free_svars q ⊆ SvS
ψ_sub_SvS: free_svars (mu , ψ) ⊆ SvS
HEinψ: E ∈ free_evars ψ
X: svar
HeqX: X = svar_fresh (elements SvS)
frX: X ∉ SvS
H: well_formed ψ^{svar:0↦X} = true
H0: size' ψ^{svar:0↦X} ≤ sz
IH: Γ ⊢i ψ^{svar:0↦X}^[[evar:E↦p]] <---> ψ^{svar:0↦X}^[[evar:E↦q]] using gpi
Γ ⊢i (mu , ψ^[[evar:E↦p]]) <---> (mu , ψ^[[evar:E↦q]]) using gpi
Σ: Signature
sz: nat
Γ: Theory
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
E: evar
exdepth, mudepth: nat
gpi: ProofInfo
pf: Γ ⊢i p <---> q using gpi
IHsz: (ψ : Pattern) (wfψ : well_formed ψ), size' ψ ≤ sz → (EvS : EVarSet) (SvS : SVarSet), ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ p q wfψ wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ ⊆ SvS → Γ ⊢i ψ^[[evar:E↦p]] <---> ψ^[[evar:E↦q]] using gpi
ψ: Pattern
wfψ: well_formed (mu , ψ)
Hsz: S (size' ψ) ≤ S sz
EvS: EVarSet
SvS: SVarSet
i':= ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (mu , ψ))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (mu , ψ))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (mu , ψ)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E (mu , ψ) p q wfψ wfp wfq): ProofInfo
pile: ProofInfoLe i' gpi
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
E_in_EvS: E ∈ EvS
ψ_sub_EvS: free_evars (mu , ψ) ⊆ EvS
p_sub_SvS: free_svars p ⊆ SvS
q_sub_SvS: free_svars q ⊆ SvS
ψ_sub_SvS: free_svars (mu , ψ) ⊆ SvS
HEinψ: E ∈ free_evars ψ
X: svar
HeqX: X = svar_fresh (elements SvS)
frX: X ∉ SvS
H: well_formed ψ^{svar:0↦X} = true
H0: size' ψ^{svar:0↦X} ≤ sz
IH: ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ^{svar:0↦X})), SVSubst := list_to_set (svar_fresh_seq ({[X]} ∪ SvS) (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ^{svar:0↦X})), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ^{svar:0↦X}) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS ({[X]} ∪ SvS) E ψ^{svar:0↦X} p q H wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ^{svar:0↦X} ⊆ EvS → free_svars p ⊆ {[X]} ∪ SvS → free_svars q ⊆ {[X]} ∪ SvS → free_svars ψ^{svar:0↦X} ⊆ {[X]} ∪ SvS → Γ ⊢i ψ^{svar:0↦X}^[[evar:E↦p]] <---> ψ^{svar:0↦X}^[[evar:E↦q]] using gpi

ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ^{svar:0↦X})), SVSubst := list_to_set (svar_fresh_seq ({[X]} ∪ SvS) (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ^{svar:0↦X})), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ^{svar:0↦X}) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS ({[X]} ∪ SvS) E ψ^{svar:0↦X} p q H wfp wfq)) gpi
abstract ( subst i'; eapply pile_trans; [|apply pile]; apply pile_evs_svs_kt; [ ( simpl; rewrite medoeip_svar_open; apply reflexivity ) |( simpl; rewrite mmdoeip_svar_open; rewrite mmdoeip_S_in;[exact HEinψ|]; simpl; unfold svar_fresh_s; rewrite -HeqX; clear; set_solver ) |( clear IH; repeat case_match; simpl in *; try reflexivity; pose proof (Htmp := n); rewrite mmdoeip_svar_open in Htmp; pose proof (Htmp2 := e); rewrite mmdoeip_S_in in Htmp2; [exact HEinψ|]; inversion Htmp2 ) |(simp frames_on_the_way_to_hole'; subst X; clear; pi_set_solver)]).
Σ: Signature
sz: nat
Γ: Theory
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
E: evar
exdepth, mudepth: nat
gpi: ProofInfo
pf: Γ ⊢i p <---> q using gpi
IHsz: (ψ : Pattern) (wfψ : well_formed ψ), size' ψ ≤ sz → (EvS : EVarSet) (SvS : SVarSet), ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ p q wfψ wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ ⊆ SvS → Γ ⊢i ψ^[[evar:E↦p]] <---> ψ^[[evar:E↦q]] using gpi
ψ: Pattern
wfψ: well_formed (mu , ψ)
Hsz: S (size' ψ) ≤ S sz
EvS: EVarSet
SvS: SVarSet
i':= ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (mu , ψ))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (mu , ψ))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (mu , ψ)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E (mu , ψ) p q wfψ wfp wfq): ProofInfo
pile: ProofInfoLe i' gpi
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
E_in_EvS: E ∈ EvS
ψ_sub_EvS: free_evars (mu , ψ) ⊆ EvS
p_sub_SvS: free_svars p ⊆ SvS
q_sub_SvS: free_svars q ⊆ SvS
ψ_sub_SvS: free_svars (mu , ψ) ⊆ SvS
HEinψ: E ∈ free_evars ψ
X: svar
HeqX: X = svar_fresh (elements SvS)
frX: X ∉ SvS
H: well_formed ψ^{svar:0↦X} = true
H0: size' ψ^{svar:0↦X} ≤ sz
IH: ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ^{svar:0↦X})), SVSubst := list_to_set (svar_fresh_seq ({[X]} ∪ SvS) (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ^{svar:0↦X})), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ^{svar:0↦X}) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS ({[X]} ∪ SvS) E ψ^{svar:0↦X} p q H wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ^{svar:0↦X} ⊆ EvS → free_svars p ⊆ {[X]} ∪ SvS → free_svars q ⊆ {[X]} ∪ SvS → free_svars ψ^{svar:0↦X} ⊆ {[X]} ∪ SvS → Γ ⊢i ψ^{svar:0↦X}^[[evar:E↦p]] <---> ψ^{svar:0↦X}^[[evar:E↦q]] using gpi

free_evars p ⊆ EvS
Σ: Signature
sz: nat
Γ: Theory
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
E: evar
exdepth, mudepth: nat
gpi: ProofInfo
pf: Γ ⊢i p <---> q using gpi
IHsz: (ψ : Pattern) (wfψ : well_formed ψ), size' ψ ≤ sz → (EvS : EVarSet) (SvS : SVarSet), ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ p q wfψ wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ ⊆ SvS → Γ ⊢i ψ^[[evar:E↦p]] <---> ψ^[[evar:E↦q]] using gpi
ψ: Pattern
wfψ: well_formed (mu , ψ)
Hsz: S (size' ψ) ≤ S sz
EvS: EVarSet
SvS: SVarSet
i':= ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (mu , ψ))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (mu , ψ))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (mu , ψ)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E (mu , ψ) p q wfψ wfp wfq): ProofInfo
pile: ProofInfoLe i' gpi
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
E_in_EvS: E ∈ EvS
ψ_sub_EvS: free_evars (mu , ψ) ⊆ EvS
p_sub_SvS: free_svars p ⊆ SvS
q_sub_SvS: free_svars q ⊆ SvS
ψ_sub_SvS: free_svars (mu , ψ) ⊆ SvS
HEinψ: E ∈ free_evars ψ
X: svar
HeqX: X = svar_fresh (elements SvS)
frX: X ∉ SvS
H: well_formed ψ^{svar:0↦X} = true
H0: size' ψ^{svar:0↦X} ≤ sz
IH: ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ^{svar:0↦X})), SVSubst := list_to_set (svar_fresh_seq ({[X]} ∪ SvS) (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ^{svar:0↦X})), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ^{svar:0↦X}) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS ({[X]} ∪ SvS) E ψ^{svar:0↦X} p q H wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ^{svar:0↦X} ⊆ EvS → free_svars p ⊆ {[X]} ∪ SvS → free_svars q ⊆ {[X]} ∪ SvS → free_svars ψ^{svar:0↦X} ⊆ {[X]} ∪ SvS → Γ ⊢i ψ^{svar:0↦X}^[[evar:E↦p]] <---> ψ^{svar:0↦X}^[[evar:E↦q]] using gpi
free_evars q ⊆ EvS
Σ: Signature
sz: nat
Γ: Theory
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
E: evar
exdepth, mudepth: nat
gpi: ProofInfo
pf: Γ ⊢i p <---> q using gpi
IHsz: (ψ : Pattern) (wfψ : well_formed ψ), size' ψ ≤ sz → (EvS : EVarSet) (SvS : SVarSet), ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ p q wfψ wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ ⊆ SvS → Γ ⊢i ψ^[[evar:E↦p]] <---> ψ^[[evar:E↦q]] using gpi
ψ: Pattern
wfψ: well_formed (mu , ψ)
Hsz: S (size' ψ) ≤ S sz
EvS: EVarSet
SvS: SVarSet
i':= ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (mu , ψ))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (mu , ψ))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (mu , ψ)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E (mu , ψ) p q wfψ wfp wfq): ProofInfo
pile: ProofInfoLe i' gpi
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
E_in_EvS: E ∈ EvS
ψ_sub_EvS: free_evars (mu , ψ) ⊆ EvS
p_sub_SvS: free_svars p ⊆ SvS
q_sub_SvS: free_svars q ⊆ SvS
ψ_sub_SvS: free_svars (mu , ψ) ⊆ SvS
HEinψ: E ∈ free_evars ψ
X: svar
HeqX: X = svar_fresh (elements SvS)
frX: X ∉ SvS
H: well_formed ψ^{svar:0↦X} = true
H0: size' ψ^{svar:0↦X} ≤ sz
IH: ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ^{svar:0↦X})), SVSubst := list_to_set (svar_fresh_seq ({[X]} ∪ SvS) (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ^{svar:0↦X})), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ^{svar:0↦X}) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS ({[X]} ∪ SvS) E ψ^{svar:0↦X} p q H wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ^{svar:0↦X} ⊆ EvS → free_svars p ⊆ {[X]} ∪ SvS → free_svars q ⊆ {[X]} ∪ SvS → free_svars ψ^{svar:0↦X} ⊆ {[X]} ∪ SvS → Γ ⊢i ψ^{svar:0↦X}^[[evar:E↦p]] <---> ψ^{svar:0↦X}^[[evar:E↦q]] using gpi
E ∈ EvS
Σ: Signature
sz: nat
Γ: Theory
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
E: evar
exdepth, mudepth: nat
gpi: ProofInfo
pf: Γ ⊢i p <---> q using gpi
IHsz: (ψ : Pattern) (wfψ : well_formed ψ), size' ψ ≤ sz → (EvS : EVarSet) (SvS : SVarSet), ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ p q wfψ wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ ⊆ SvS → Γ ⊢i ψ^[[evar:E↦p]] <---> ψ^[[evar:E↦q]] using gpi
ψ: Pattern
wfψ: well_formed (mu , ψ)
Hsz: S (size' ψ) ≤ S sz
EvS: EVarSet
SvS: SVarSet
i':= ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (mu , ψ))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (mu , ψ))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (mu , ψ)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E (mu , ψ) p q wfψ wfp wfq): ProofInfo
pile: ProofInfoLe i' gpi
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
E_in_EvS: E ∈ EvS
ψ_sub_EvS: free_evars (mu , ψ) ⊆ EvS
p_sub_SvS: free_svars p ⊆ SvS
q_sub_SvS: free_svars q ⊆ SvS
ψ_sub_SvS: free_svars (mu , ψ) ⊆ SvS
HEinψ: E ∈ free_evars ψ
X: svar
HeqX: X = svar_fresh (elements SvS)
frX: X ∉ SvS
H: well_formed ψ^{svar:0↦X} = true
H0: size' ψ^{svar:0↦X} ≤ sz
IH: ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ^{svar:0↦X})), SVSubst := list_to_set (svar_fresh_seq ({[X]} ∪ SvS) (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ^{svar:0↦X})), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ^{svar:0↦X}) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS ({[X]} ∪ SvS) E ψ^{svar:0↦X} p q H wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ^{svar:0↦X} ⊆ EvS → free_svars p ⊆ {[X]} ∪ SvS → free_svars q ⊆ {[X]} ∪ SvS → free_svars ψ^{svar:0↦X} ⊆ {[X]} ∪ SvS → Γ ⊢i ψ^{svar:0↦X}^[[evar:E↦p]] <---> ψ^{svar:0↦X}^[[evar:E↦q]] using gpi
free_evars ψ^{svar:0↦X} ⊆ EvS
Σ: Signature
sz: nat
Γ: Theory
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
E: evar
exdepth, mudepth: nat
gpi: ProofInfo
pf: Γ ⊢i p <---> q using gpi
IHsz: (ψ : Pattern) (wfψ : well_formed ψ), size' ψ ≤ sz → (EvS : EVarSet) (SvS : SVarSet), ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ p q wfψ wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ ⊆ SvS → Γ ⊢i ψ^[[evar:E↦p]] <---> ψ^[[evar:E↦q]] using gpi
ψ: Pattern
wfψ: well_formed (mu , ψ)
Hsz: S (size' ψ) ≤ S sz
EvS: EVarSet
SvS: SVarSet
i':= ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (mu , ψ))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (mu , ψ))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (mu , ψ)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E (mu , ψ) p q wfψ wfp wfq): ProofInfo
pile: ProofInfoLe i' gpi
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
E_in_EvS: E ∈ EvS
ψ_sub_EvS: free_evars (mu , ψ) ⊆ EvS
p_sub_SvS: free_svars p ⊆ SvS
q_sub_SvS: free_svars q ⊆ SvS
ψ_sub_SvS: free_svars (mu , ψ) ⊆ SvS
HEinψ: E ∈ free_evars ψ
X: svar
HeqX: X = svar_fresh (elements SvS)
frX: X ∉ SvS
H: well_formed ψ^{svar:0↦X} = true
H0: size' ψ^{svar:0↦X} ≤ sz
IH: ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ^{svar:0↦X})), SVSubst := list_to_set (svar_fresh_seq ({[X]} ∪ SvS) (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ^{svar:0↦X})), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ^{svar:0↦X}) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS ({[X]} ∪ SvS) E ψ^{svar:0↦X} p q H wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ^{svar:0↦X} ⊆ EvS → free_svars p ⊆ {[X]} ∪ SvS → free_svars q ⊆ {[X]} ∪ SvS → free_svars ψ^{svar:0↦X} ⊆ {[X]} ∪ SvS → Γ ⊢i ψ^{svar:0↦X}^[[evar:E↦p]] <---> ψ^{svar:0↦X}^[[evar:E↦q]] using gpi
free_svars p ⊆ {[X]} ∪ SvS
Σ: Signature
sz: nat
Γ: Theory
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
E: evar
exdepth, mudepth: nat
gpi: ProofInfo
pf: Γ ⊢i p <---> q using gpi
IHsz: (ψ : Pattern) (wfψ : well_formed ψ), size' ψ ≤ sz → (EvS : EVarSet) (SvS : SVarSet), ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ p q wfψ wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ ⊆ SvS → Γ ⊢i ψ^[[evar:E↦p]] <---> ψ^[[evar:E↦q]] using gpi
ψ: Pattern
wfψ: well_formed (mu , ψ)
Hsz: S (size' ψ) ≤ S sz
EvS: EVarSet
SvS: SVarSet
i':= ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (mu , ψ))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (mu , ψ))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (mu , ψ)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E (mu , ψ) p q wfψ wfp wfq): ProofInfo
pile: ProofInfoLe i' gpi
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
E_in_EvS: E ∈ EvS
ψ_sub_EvS: free_evars (mu , ψ) ⊆ EvS
p_sub_SvS: free_svars p ⊆ SvS
q_sub_SvS: free_svars q ⊆ SvS
ψ_sub_SvS: free_svars (mu , ψ) ⊆ SvS
HEinψ: E ∈ free_evars ψ
X: svar
HeqX: X = svar_fresh (elements SvS)
frX: X ∉ SvS
H: well_formed ψ^{svar:0↦X} = true
H0: size' ψ^{svar:0↦X} ≤ sz
IH: ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ^{svar:0↦X})), SVSubst := list_to_set (svar_fresh_seq ({[X]} ∪ SvS) (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ^{svar:0↦X})), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ^{svar:0↦X}) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS ({[X]} ∪ SvS) E ψ^{svar:0↦X} p q H wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ^{svar:0↦X} ⊆ EvS → free_svars p ⊆ {[X]} ∪ SvS → free_svars q ⊆ {[X]} ∪ SvS → free_svars ψ^{svar:0↦X} ⊆ {[X]} ∪ SvS → Γ ⊢i ψ^{svar:0↦X}^[[evar:E↦p]] <---> ψ^{svar:0↦X}^[[evar:E↦q]] using gpi
free_svars q ⊆ {[X]} ∪ SvS
Σ: Signature
sz: nat
Γ: Theory
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
E: evar
exdepth, mudepth: nat
gpi: ProofInfo
pf: Γ ⊢i p <---> q using gpi
IHsz: (ψ : Pattern) (wfψ : well_formed ψ), size' ψ ≤ sz → (EvS : EVarSet) (SvS : SVarSet), ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ p q wfψ wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ ⊆ SvS → Γ ⊢i ψ^[[evar:E↦p]] <---> ψ^[[evar:E↦q]] using gpi
ψ: Pattern
wfψ: well_formed (mu , ψ)
Hsz: S (size' ψ) ≤ S sz
EvS: EVarSet
SvS: SVarSet
i':= ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (mu , ψ))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (mu , ψ))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (mu , ψ)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E (mu , ψ) p q wfψ wfp wfq): ProofInfo
pile: ProofInfoLe i' gpi
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
E_in_EvS: E ∈ EvS
ψ_sub_EvS: free_evars (mu , ψ) ⊆ EvS
p_sub_SvS: free_svars p ⊆ SvS
q_sub_SvS: free_svars q ⊆ SvS
ψ_sub_SvS: free_svars (mu , ψ) ⊆ SvS
HEinψ: E ∈ free_evars ψ
X: svar
HeqX: X = svar_fresh (elements SvS)
frX: X ∉ SvS
H: well_formed ψ^{svar:0↦X} = true
H0: size' ψ^{svar:0↦X} ≤ sz
IH: ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ^{svar:0↦X})), SVSubst := list_to_set (svar_fresh_seq ({[X]} ∪ SvS) (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ^{svar:0↦X})), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ^{svar:0↦X}) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS ({[X]} ∪ SvS) E ψ^{svar:0↦X} p q H wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ^{svar:0↦X} ⊆ EvS → free_svars p ⊆ {[X]} ∪ SvS → free_svars q ⊆ {[X]} ∪ SvS → free_svars ψ^{svar:0↦X} ⊆ {[X]} ∪ SvS → Γ ⊢i ψ^{svar:0↦X}^[[evar:E↦p]] <---> ψ^{svar:0↦X}^[[evar:E↦q]] using gpi
free_svars ψ^{svar:0↦X} ⊆ {[X]} ∪ SvS
Σ: Signature
sz: nat
Γ: Theory
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
E: evar
exdepth, mudepth: nat
gpi: ProofInfo
pf: Γ ⊢i p <---> q using gpi
IHsz: (ψ : Pattern) (wfψ : well_formed ψ), size' ψ ≤ sz → (EvS : EVarSet) (SvS : SVarSet), ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ p q wfψ wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ ⊆ SvS → Γ ⊢i ψ^[[evar:E↦p]] <---> ψ^[[evar:E↦q]] using gpi
ψ: Pattern
wfψ: well_formed (mu , ψ)
Hsz: S (size' ψ) ≤ S sz
EvS: EVarSet
SvS: SVarSet
i':= ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (mu , ψ))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (mu , ψ))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (mu , ψ)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E (mu , ψ) p q wfψ wfp wfq): ProofInfo
pile: ProofInfoLe i' gpi
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
E_in_EvS: E ∈ EvS
ψ_sub_EvS: free_evars (mu , ψ) ⊆ EvS
p_sub_SvS: free_svars p ⊆ SvS
q_sub_SvS: free_svars q ⊆ SvS
ψ_sub_SvS: free_svars (mu , ψ) ⊆ SvS
HEinψ: E ∈ free_evars ψ
X: svar
HeqX: X = svar_fresh (elements SvS)
frX: X ∉ SvS
H: well_formed ψ^{svar:0↦X} = true
H0: size' ψ^{svar:0↦X} ≤ sz
IH: Γ ⊢i ψ^{svar:0↦X}^[[evar:E↦p]] <---> ψ^{svar:0↦X}^[[evar:E↦q]] using gpi
Γ ⊢i (mu , ψ^[[evar:E↦p]]) <---> (mu , ψ^[[evar:E↦q]]) using gpi
Σ: Signature
sz: nat
Γ: Theory
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
E: evar
exdepth, mudepth: nat
gpi: ProofInfo
pf: Γ ⊢i p <---> q using gpi
IHsz: (ψ : Pattern) (wfψ : well_formed ψ), size' ψ ≤ sz → (EvS : EVarSet) (SvS : SVarSet), ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ p q wfψ wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ ⊆ SvS → Γ ⊢i ψ^[[evar:E↦p]] <---> ψ^[[evar:E↦q]] using gpi
ψ: Pattern
wfψ: well_formed (mu , ψ)
Hsz: S (size' ψ) ≤ S sz
EvS: EVarSet
SvS: SVarSet
i':= ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (mu , ψ))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (mu , ψ))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (mu , ψ)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E (mu , ψ) p q wfψ wfp wfq): ProofInfo
pile: ProofInfoLe i' gpi
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
E_in_EvS: E ∈ EvS
ψ_sub_EvS: free_evars (mu , ψ) ⊆ EvS
p_sub_SvS: free_svars p ⊆ SvS
q_sub_SvS: free_svars q ⊆ SvS
ψ_sub_SvS: free_svars (mu , ψ) ⊆ SvS
HEinψ: E ∈ free_evars ψ
X: svar
HeqX: X = svar_fresh (elements SvS)
frX: X ∉ SvS
H: well_formed ψ^{svar:0↦X} = true
H0: size' ψ^{svar:0↦X} ≤ sz
IH: ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ^{svar:0↦X})), SVSubst := list_to_set (svar_fresh_seq ({[X]} ∪ SvS) (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ^{svar:0↦X})), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ^{svar:0↦X}) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS ({[X]} ∪ SvS) E ψ^{svar:0↦X} p q H wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ^{svar:0↦X} ⊆ EvS → free_svars p ⊆ {[X]} ∪ SvS → free_svars q ⊆ {[X]} ∪ SvS → free_svars ψ^{svar:0↦X} ⊆ {[X]} ∪ SvS → Γ ⊢i ψ^{svar:0↦X}^[[evar:E↦p]] <---> ψ^{svar:0↦X}^[[evar:E↦q]] using gpi

free_evars p ⊆ EvS
exact p_sub_EvS.
Σ: Signature
sz: nat
Γ: Theory
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
E: evar
exdepth, mudepth: nat
gpi: ProofInfo
pf: Γ ⊢i p <---> q using gpi
IHsz: (ψ : Pattern) (wfψ : well_formed ψ), size' ψ ≤ sz → (EvS : EVarSet) (SvS : SVarSet), ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ p q wfψ wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ ⊆ SvS → Γ ⊢i ψ^[[evar:E↦p]] <---> ψ^[[evar:E↦q]] using gpi
ψ: Pattern
wfψ: well_formed (mu , ψ)
Hsz: S (size' ψ) ≤ S sz
EvS: EVarSet
SvS: SVarSet
i':= ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (mu , ψ))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (mu , ψ))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (mu , ψ)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E (mu , ψ) p q wfψ wfp wfq): ProofInfo
pile: ProofInfoLe i' gpi
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
E_in_EvS: E ∈ EvS
ψ_sub_EvS: free_evars (mu , ψ) ⊆ EvS
p_sub_SvS: free_svars p ⊆ SvS
q_sub_SvS: free_svars q ⊆ SvS
ψ_sub_SvS: free_svars (mu , ψ) ⊆ SvS
HEinψ: E ∈ free_evars ψ
X: svar
HeqX: X = svar_fresh (elements SvS)
frX: X ∉ SvS
H: well_formed ψ^{svar:0↦X} = true
H0: size' ψ^{svar:0↦X} ≤ sz
IH: ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ^{svar:0↦X})), SVSubst := list_to_set (svar_fresh_seq ({[X]} ∪ SvS) (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ^{svar:0↦X})), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ^{svar:0↦X}) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS ({[X]} ∪ SvS) E ψ^{svar:0↦X} p q H wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ^{svar:0↦X} ⊆ EvS → free_svars p ⊆ {[X]} ∪ SvS → free_svars q ⊆ {[X]} ∪ SvS → free_svars ψ^{svar:0↦X} ⊆ {[X]} ∪ SvS → Γ ⊢i ψ^{svar:0↦X}^[[evar:E↦p]] <---> ψ^{svar:0↦X}^[[evar:E↦q]] using gpi

free_evars q ⊆ EvS
Σ: Signature
sz: nat
Γ: Theory
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
E: evar
exdepth, mudepth: nat
gpi: ProofInfo
pf: Γ ⊢i p <---> q using gpi
IHsz: (ψ : Pattern) (wfψ : well_formed ψ), size' ψ ≤ sz → (EvS : EVarSet) (SvS : SVarSet), ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ p q wfψ wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ ⊆ SvS → Γ ⊢i ψ^[[evar:E↦p]] <---> ψ^[[evar:E↦q]] using gpi
ψ: Pattern
wfψ: well_formed (mu , ψ)
Hsz: S (size' ψ) ≤ S sz
EvS: EVarSet
SvS: SVarSet
i':= ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (mu , ψ))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (mu , ψ))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (mu , ψ)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E (mu , ψ) p q wfψ wfp wfq): ProofInfo
pile: ProofInfoLe i' gpi
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
E_in_EvS: E ∈ EvS
ψ_sub_EvS: free_evars (mu , ψ) ⊆ EvS
p_sub_SvS: free_svars p ⊆ SvS
q_sub_SvS: free_svars q ⊆ SvS
ψ_sub_SvS: free_svars (mu , ψ) ⊆ SvS
HEinψ: E ∈ free_evars ψ
X: svar
HeqX: X = svar_fresh (elements SvS)
frX: X ∉ SvS
H: well_formed ψ^{svar:0↦X} = true
H0: size' ψ^{svar:0↦X} ≤ sz
IH: ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ^{svar:0↦X})), SVSubst := list_to_set (svar_fresh_seq ({[X]} ∪ SvS) (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ^{svar:0↦X})), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ^{svar:0↦X}) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS ({[X]} ∪ SvS) E ψ^{svar:0↦X} p q H wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ^{svar:0↦X} ⊆ EvS → free_svars p ⊆ {[X]} ∪ SvS → free_svars q ⊆ {[X]} ∪ SvS → free_svars ψ^{svar:0↦X} ⊆ {[X]} ∪ SvS → Γ ⊢i ψ^{svar:0↦X}^[[evar:E↦p]] <---> ψ^{svar:0↦X}^[[evar:E↦q]] using gpi
E ∈ EvS
Σ: Signature
sz: nat
Γ: Theory
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
E: evar
exdepth, mudepth: nat
gpi: ProofInfo
pf: Γ ⊢i p <---> q using gpi
IHsz: (ψ : Pattern) (wfψ : well_formed ψ), size' ψ ≤ sz → (EvS : EVarSet) (SvS : SVarSet), ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ p q wfψ wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ ⊆ SvS → Γ ⊢i ψ^[[evar:E↦p]] <---> ψ^[[evar:E↦q]] using gpi
ψ: Pattern
wfψ: well_formed (mu , ψ)
Hsz: S (size' ψ) ≤ S sz
EvS: EVarSet
SvS: SVarSet
i':= ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (mu , ψ))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (mu , ψ))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (mu , ψ)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E (mu , ψ) p q wfψ wfp wfq): ProofInfo
pile: ProofInfoLe i' gpi
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
E_in_EvS: E ∈ EvS
ψ_sub_EvS: free_evars (mu , ψ) ⊆ EvS
p_sub_SvS: free_svars p ⊆ SvS
q_sub_SvS: free_svars q ⊆ SvS
ψ_sub_SvS: free_svars (mu , ψ) ⊆ SvS
HEinψ: E ∈ free_evars ψ
X: svar
HeqX: X = svar_fresh (elements SvS)
frX: X ∉ SvS
H: well_formed ψ^{svar:0↦X} = true
H0: size' ψ^{svar:0↦X} ≤ sz
IH: ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ^{svar:0↦X})), SVSubst := list_to_set (svar_fresh_seq ({[X]} ∪ SvS) (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ^{svar:0↦X})), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ^{svar:0↦X}) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS ({[X]} ∪ SvS) E ψ^{svar:0↦X} p q H wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ^{svar:0↦X} ⊆ EvS → free_svars p ⊆ {[X]} ∪ SvS → free_svars q ⊆ {[X]} ∪ SvS → free_svars ψ^{svar:0↦X} ⊆ {[X]} ∪ SvS → Γ ⊢i ψ^{svar:0↦X}^[[evar:E↦p]] <---> ψ^{svar:0↦X}^[[evar:E↦q]] using gpi
free_evars ψ^{svar:0↦X} ⊆ EvS
Σ: Signature
sz: nat
Γ: Theory
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
E: evar
exdepth, mudepth: nat
gpi: ProofInfo
pf: Γ ⊢i p <---> q using gpi
IHsz: (ψ : Pattern) (wfψ : well_formed ψ), size' ψ ≤ sz → (EvS : EVarSet) (SvS : SVarSet), ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ p q wfψ wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ ⊆ SvS → Γ ⊢i ψ^[[evar:E↦p]] <---> ψ^[[evar:E↦q]] using gpi
ψ: Pattern
wfψ: well_formed (mu , ψ)
Hsz: S (size' ψ) ≤ S sz
EvS: EVarSet
SvS: SVarSet
i':= ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (mu , ψ))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (mu , ψ))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (mu , ψ)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E (mu , ψ) p q wfψ wfp wfq): ProofInfo
pile: ProofInfoLe i' gpi
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
E_in_EvS: E ∈ EvS
ψ_sub_EvS: free_evars (mu , ψ) ⊆ EvS
p_sub_SvS: free_svars p ⊆ SvS
q_sub_SvS: free_svars q ⊆ SvS
ψ_sub_SvS: free_svars (mu , ψ) ⊆ SvS
HEinψ: E ∈ free_evars ψ
X: svar
HeqX: X = svar_fresh (elements SvS)
frX: X ∉ SvS
H: well_formed ψ^{svar:0↦X} = true
H0: size' ψ^{svar:0↦X} ≤ sz
IH: ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ^{svar:0↦X})), SVSubst := list_to_set (svar_fresh_seq ({[X]} ∪ SvS) (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ^{svar:0↦X})), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ^{svar:0↦X}) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS ({[X]} ∪ SvS) E ψ^{svar:0↦X} p q H wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ^{svar:0↦X} ⊆ EvS → free_svars p ⊆ {[X]} ∪ SvS → free_svars q ⊆ {[X]} ∪ SvS → free_svars ψ^{svar:0↦X} ⊆ {[X]} ∪ SvS → Γ ⊢i ψ^{svar:0↦X}^[[evar:E↦p]] <---> ψ^{svar:0↦X}^[[evar:E↦q]] using gpi
free_svars p ⊆ {[X]} ∪ SvS
Σ: Signature
sz: nat
Γ: Theory
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
E: evar
exdepth, mudepth: nat
gpi: ProofInfo
pf: Γ ⊢i p <---> q using gpi
IHsz: (ψ : Pattern) (wfψ : well_formed ψ), size' ψ ≤ sz → (EvS : EVarSet) (SvS : SVarSet), ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ p q wfψ wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ ⊆ SvS → Γ ⊢i ψ^[[evar:E↦p]] <---> ψ^[[evar:E↦q]] using gpi
ψ: Pattern
wfψ: well_formed (mu , ψ)
Hsz: S (size' ψ) ≤ S sz
EvS: EVarSet
SvS: SVarSet
i':= ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (mu , ψ))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (mu , ψ))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (mu , ψ)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E (mu , ψ) p q wfψ wfp wfq): ProofInfo
pile: ProofInfoLe i' gpi
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
E_in_EvS: E ∈ EvS
ψ_sub_EvS: free_evars (mu , ψ) ⊆ EvS
p_sub_SvS: free_svars p ⊆ SvS
q_sub_SvS: free_svars q ⊆ SvS
ψ_sub_SvS: free_svars (mu , ψ) ⊆ SvS
HEinψ: E ∈ free_evars ψ
X: svar
HeqX: X = svar_fresh (elements SvS)
frX: X ∉ SvS
H: well_formed ψ^{svar:0↦X} = true
H0: size' ψ^{svar:0↦X} ≤ sz
IH: ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ^{svar:0↦X})), SVSubst := list_to_set (svar_fresh_seq ({[X]} ∪ SvS) (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ^{svar:0↦X})), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ^{svar:0↦X}) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS ({[X]} ∪ SvS) E ψ^{svar:0↦X} p q H wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ^{svar:0↦X} ⊆ EvS → free_svars p ⊆ {[X]} ∪ SvS → free_svars q ⊆ {[X]} ∪ SvS → free_svars ψ^{svar:0↦X} ⊆ {[X]} ∪ SvS → Γ ⊢i ψ^{svar:0↦X}^[[evar:E↦p]] <---> ψ^{svar:0↦X}^[[evar:E↦q]] using gpi
free_svars q ⊆ {[X]} ∪ SvS
Σ: Signature
sz: nat
Γ: Theory
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
E: evar
exdepth, mudepth: nat
gpi: ProofInfo
pf: Γ ⊢i p <---> q using gpi
IHsz: (ψ : Pattern) (wfψ : well_formed ψ), size' ψ ≤ sz → (EvS : EVarSet) (SvS : SVarSet), ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ p q wfψ wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ ⊆ SvS → Γ ⊢i ψ^[[evar:E↦p]] <---> ψ^[[evar:E↦q]] using gpi
ψ: Pattern
wfψ: well_formed (mu , ψ)
Hsz: S (size' ψ) ≤ S sz
EvS: EVarSet
SvS: SVarSet
i':= ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (mu , ψ))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (mu , ψ))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (mu , ψ)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E (mu , ψ) p q wfψ wfp wfq): ProofInfo
pile: ProofInfoLe i' gpi
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
E_in_EvS: E ∈ EvS
ψ_sub_EvS: free_evars (mu , ψ) ⊆ EvS
p_sub_SvS: free_svars p ⊆ SvS
q_sub_SvS: free_svars q ⊆ SvS
ψ_sub_SvS: free_svars (mu , ψ) ⊆ SvS
HEinψ: E ∈ free_evars ψ
X: svar
HeqX: X = svar_fresh (elements SvS)
frX: X ∉ SvS
H: well_formed ψ^{svar:0↦X} = true
H0: size' ψ^{svar:0↦X} ≤ sz
IH: ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ^{svar:0↦X})), SVSubst := list_to_set (svar_fresh_seq ({[X]} ∪ SvS) (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ^{svar:0↦X})), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ^{svar:0↦X}) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS ({[X]} ∪ SvS) E ψ^{svar:0↦X} p q H wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ^{svar:0↦X} ⊆ EvS → free_svars p ⊆ {[X]} ∪ SvS → free_svars q ⊆ {[X]} ∪ SvS → free_svars ψ^{svar:0↦X} ⊆ {[X]} ∪ SvS → Γ ⊢i ψ^{svar:0↦X}^[[evar:E↦p]] <---> ψ^{svar:0↦X}^[[evar:E↦q]] using gpi
free_svars ψ^{svar:0↦X} ⊆ {[X]} ∪ SvS
Σ: Signature
sz: nat
Γ: Theory
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
E: evar
exdepth, mudepth: nat
gpi: ProofInfo
pf: Γ ⊢i p <---> q using gpi
IHsz: (ψ : Pattern) (wfψ : well_formed ψ), size' ψ ≤ sz → (EvS : EVarSet) (SvS : SVarSet), ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ p q wfψ wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ ⊆ SvS → Γ ⊢i ψ^[[evar:E↦p]] <---> ψ^[[evar:E↦q]] using gpi
ψ: Pattern
wfψ: well_formed (mu , ψ)
Hsz: S (size' ψ) ≤ S sz
EvS: EVarSet
SvS: SVarSet
i':= ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (mu , ψ))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (mu , ψ))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (mu , ψ)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E (mu , ψ) p q wfψ wfp wfq): ProofInfo
pile: ProofInfoLe i' gpi
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
E_in_EvS: E ∈ EvS
ψ_sub_EvS: free_evars (mu , ψ) ⊆ EvS
p_sub_SvS: free_svars p ⊆ SvS
q_sub_SvS: free_svars q ⊆ SvS
ψ_sub_SvS: free_svars (mu , ψ) ⊆ SvS
HEinψ: E ∈ free_evars ψ
X: svar
HeqX: X = svar_fresh (elements SvS)
frX: X ∉ SvS
H: well_formed ψ^{svar:0↦X} = true
H0: size' ψ^{svar:0↦X} ≤ sz
IH: Γ ⊢i ψ^{svar:0↦X}^[[evar:E↦p]] <---> ψ^{svar:0↦X}^[[evar:E↦q]] using gpi
Γ ⊢i (mu , ψ^[[evar:E↦p]]) <---> (mu , ψ^[[evar:E↦q]]) using gpi
Σ: Signature
sz: nat
Γ: Theory
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
E: evar
exdepth, mudepth: nat
gpi: ProofInfo
pf: Γ ⊢i p <---> q using gpi
IHsz: (ψ : Pattern) (wfψ : well_formed ψ), size' ψ ≤ sz → (EvS : EVarSet) (SvS : SVarSet), ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ p q wfψ wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ ⊆ SvS → Γ ⊢i ψ^[[evar:E↦p]] <---> ψ^[[evar:E↦q]] using gpi
ψ: Pattern
wfψ: well_formed (mu , ψ)
Hsz: S (size' ψ) ≤ S sz
EvS: EVarSet
SvS: SVarSet
i':= ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (mu , ψ))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (mu , ψ))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (mu , ψ)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E (mu , ψ) p q wfψ wfp wfq): ProofInfo
pile: ProofInfoLe i' gpi
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
E_in_EvS: E ∈ EvS
ψ_sub_EvS: free_evars (mu , ψ) ⊆ EvS
p_sub_SvS: free_svars p ⊆ SvS
q_sub_SvS: free_svars q ⊆ SvS
ψ_sub_SvS: free_svars (mu , ψ) ⊆ SvS
HEinψ: E ∈ free_evars ψ
X: svar
HeqX: X = svar_fresh (elements SvS)
frX: X ∉ SvS
H: well_formed ψ^{svar:0↦X} = true
H0: size' ψ^{svar:0↦X} ≤ sz
IH: ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ^{svar:0↦X})), SVSubst := list_to_set (svar_fresh_seq ({[X]} ∪ SvS) (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ^{svar:0↦X})), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ^{svar:0↦X}) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS ({[X]} ∪ SvS) E ψ^{svar:0↦X} p q H wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ^{svar:0↦X} ⊆ EvS → free_svars p ⊆ {[X]} ∪ SvS → free_svars q ⊆ {[X]} ∪ SvS → free_svars ψ^{svar:0↦X} ⊆ {[X]} ∪ SvS → Γ ⊢i ψ^{svar:0↦X}^[[evar:E↦p]] <---> ψ^{svar:0↦X}^[[evar:E↦q]] using gpi

free_evars q ⊆ EvS
exact q_sub_EvS.
Σ: Signature
sz: nat
Γ: Theory
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
E: evar
exdepth, mudepth: nat
gpi: ProofInfo
pf: Γ ⊢i p <---> q using gpi
IHsz: (ψ : Pattern) (wfψ : well_formed ψ), size' ψ ≤ sz → (EvS : EVarSet) (SvS : SVarSet), ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ p q wfψ wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ ⊆ SvS → Γ ⊢i ψ^[[evar:E↦p]] <---> ψ^[[evar:E↦q]] using gpi
ψ: Pattern
wfψ: well_formed (mu , ψ)
Hsz: S (size' ψ) ≤ S sz
EvS: EVarSet
SvS: SVarSet
i':= ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (mu , ψ))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (mu , ψ))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (mu , ψ)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E (mu , ψ) p q wfψ wfp wfq): ProofInfo
pile: ProofInfoLe i' gpi
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
E_in_EvS: E ∈ EvS
ψ_sub_EvS: free_evars (mu , ψ) ⊆ EvS
p_sub_SvS: free_svars p ⊆ SvS
q_sub_SvS: free_svars q ⊆ SvS
ψ_sub_SvS: free_svars (mu , ψ) ⊆ SvS
HEinψ: E ∈ free_evars ψ
X: svar
HeqX: X = svar_fresh (elements SvS)
frX: X ∉ SvS
H: well_formed ψ^{svar:0↦X} = true
H0: size' ψ^{svar:0↦X} ≤ sz
IH: ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ^{svar:0↦X})), SVSubst := list_to_set (svar_fresh_seq ({[X]} ∪ SvS) (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ^{svar:0↦X})), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ^{svar:0↦X}) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS ({[X]} ∪ SvS) E ψ^{svar:0↦X} p q H wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ^{svar:0↦X} ⊆ EvS → free_svars p ⊆ {[X]} ∪ SvS → free_svars q ⊆ {[X]} ∪ SvS → free_svars ψ^{svar:0↦X} ⊆ {[X]} ∪ SvS → Γ ⊢i ψ^{svar:0↦X}^[[evar:E↦p]] <---> ψ^{svar:0↦X}^[[evar:E↦q]] using gpi

E ∈ EvS
Σ: Signature
sz: nat
Γ: Theory
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
E: evar
exdepth, mudepth: nat
gpi: ProofInfo
pf: Γ ⊢i p <---> q using gpi
IHsz: (ψ : Pattern) (wfψ : well_formed ψ), size' ψ ≤ sz → (EvS : EVarSet) (SvS : SVarSet), ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ p q wfψ wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ ⊆ SvS → Γ ⊢i ψ^[[evar:E↦p]] <---> ψ^[[evar:E↦q]] using gpi
ψ: Pattern
wfψ: well_formed (mu , ψ)
Hsz: S (size' ψ) ≤ S sz
EvS: EVarSet
SvS: SVarSet
i':= ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (mu , ψ))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (mu , ψ))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (mu , ψ)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E (mu , ψ) p q wfψ wfp wfq): ProofInfo
pile: ProofInfoLe i' gpi
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
E_in_EvS: E ∈ EvS
ψ_sub_EvS: free_evars (mu , ψ) ⊆ EvS
p_sub_SvS: free_svars p ⊆ SvS
q_sub_SvS: free_svars q ⊆ SvS
ψ_sub_SvS: free_svars (mu , ψ) ⊆ SvS
HEinψ: E ∈ free_evars ψ
X: svar
HeqX: X = svar_fresh (elements SvS)
frX: X ∉ SvS
H: well_formed ψ^{svar:0↦X} = true
H0: size' ψ^{svar:0↦X} ≤ sz
IH: ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ^{svar:0↦X})), SVSubst := list_to_set (svar_fresh_seq ({[X]} ∪ SvS) (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ^{svar:0↦X})), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ^{svar:0↦X}) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS ({[X]} ∪ SvS) E ψ^{svar:0↦X} p q H wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ^{svar:0↦X} ⊆ EvS → free_svars p ⊆ {[X]} ∪ SvS → free_svars q ⊆ {[X]} ∪ SvS → free_svars ψ^{svar:0↦X} ⊆ {[X]} ∪ SvS → Γ ⊢i ψ^{svar:0↦X}^[[evar:E↦p]] <---> ψ^{svar:0↦X}^[[evar:E↦q]] using gpi
free_evars ψ^{svar:0↦X} ⊆ EvS
Σ: Signature
sz: nat
Γ: Theory
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
E: evar
exdepth, mudepth: nat
gpi: ProofInfo
pf: Γ ⊢i p <---> q using gpi
IHsz: (ψ : Pattern) (wfψ : well_formed ψ), size' ψ ≤ sz → (EvS : EVarSet) (SvS : SVarSet), ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ p q wfψ wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ ⊆ SvS → Γ ⊢i ψ^[[evar:E↦p]] <---> ψ^[[evar:E↦q]] using gpi
ψ: Pattern
wfψ: well_formed (mu , ψ)
Hsz: S (size' ψ) ≤ S sz
EvS: EVarSet
SvS: SVarSet
i':= ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (mu , ψ))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (mu , ψ))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (mu , ψ)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E (mu , ψ) p q wfψ wfp wfq): ProofInfo
pile: ProofInfoLe i' gpi
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
E_in_EvS: E ∈ EvS
ψ_sub_EvS: free_evars (mu , ψ) ⊆ EvS
p_sub_SvS: free_svars p ⊆ SvS
q_sub_SvS: free_svars q ⊆ SvS
ψ_sub_SvS: free_svars (mu , ψ) ⊆ SvS
HEinψ: E ∈ free_evars ψ
X: svar
HeqX: X = svar_fresh (elements SvS)
frX: X ∉ SvS
H: well_formed ψ^{svar:0↦X} = true
H0: size' ψ^{svar:0↦X} ≤ sz
IH: ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ^{svar:0↦X})), SVSubst := list_to_set (svar_fresh_seq ({[X]} ∪ SvS) (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ^{svar:0↦X})), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ^{svar:0↦X}) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS ({[X]} ∪ SvS) E ψ^{svar:0↦X} p q H wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ^{svar:0↦X} ⊆ EvS → free_svars p ⊆ {[X]} ∪ SvS → free_svars q ⊆ {[X]} ∪ SvS → free_svars ψ^{svar:0↦X} ⊆ {[X]} ∪ SvS → Γ ⊢i ψ^{svar:0↦X}^[[evar:E↦p]] <---> ψ^{svar:0↦X}^[[evar:E↦q]] using gpi
free_svars p ⊆ {[X]} ∪ SvS
Σ: Signature
sz: nat
Γ: Theory
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
E: evar
exdepth, mudepth: nat
gpi: ProofInfo
pf: Γ ⊢i p <---> q using gpi
IHsz: (ψ : Pattern) (wfψ : well_formed ψ), size' ψ ≤ sz → (EvS : EVarSet) (SvS : SVarSet), ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ p q wfψ wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ ⊆ SvS → Γ ⊢i ψ^[[evar:E↦p]] <---> ψ^[[evar:E↦q]] using gpi
ψ: Pattern
wfψ: well_formed (mu , ψ)
Hsz: S (size' ψ) ≤ S sz
EvS: EVarSet
SvS: SVarSet
i':= ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (mu , ψ))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (mu , ψ))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (mu , ψ)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E (mu , ψ) p q wfψ wfp wfq): ProofInfo
pile: ProofInfoLe i' gpi
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
E_in_EvS: E ∈ EvS
ψ_sub_EvS: free_evars (mu , ψ) ⊆ EvS
p_sub_SvS: free_svars p ⊆ SvS
q_sub_SvS: free_svars q ⊆ SvS
ψ_sub_SvS: free_svars (mu , ψ) ⊆ SvS
HEinψ: E ∈ free_evars ψ
X: svar
HeqX: X = svar_fresh (elements SvS)
frX: X ∉ SvS
H: well_formed ψ^{svar:0↦X} = true
H0: size' ψ^{svar:0↦X} ≤ sz
IH: ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ^{svar:0↦X})), SVSubst := list_to_set (svar_fresh_seq ({[X]} ∪ SvS) (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ^{svar:0↦X})), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ^{svar:0↦X}) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS ({[X]} ∪ SvS) E ψ^{svar:0↦X} p q H wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ^{svar:0↦X} ⊆ EvS → free_svars p ⊆ {[X]} ∪ SvS → free_svars q ⊆ {[X]} ∪ SvS → free_svars ψ^{svar:0↦X} ⊆ {[X]} ∪ SvS → Γ ⊢i ψ^{svar:0↦X}^[[evar:E↦p]] <---> ψ^{svar:0↦X}^[[evar:E↦q]] using gpi
free_svars q ⊆ {[X]} ∪ SvS
Σ: Signature
sz: nat
Γ: Theory
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
E: evar
exdepth, mudepth: nat
gpi: ProofInfo
pf: Γ ⊢i p <---> q using gpi
IHsz: (ψ : Pattern) (wfψ : well_formed ψ), size' ψ ≤ sz → (EvS : EVarSet) (SvS : SVarSet), ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ p q wfψ wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ ⊆ SvS → Γ ⊢i ψ^[[evar:E↦p]] <---> ψ^[[evar:E↦q]] using gpi
ψ: Pattern
wfψ: well_formed (mu , ψ)
Hsz: S (size' ψ) ≤ S sz
EvS: EVarSet
SvS: SVarSet
i':= ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (mu , ψ))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (mu , ψ))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (mu , ψ)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E (mu , ψ) p q wfψ wfp wfq): ProofInfo
pile: ProofInfoLe i' gpi
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
E_in_EvS: E ∈ EvS
ψ_sub_EvS: free_evars (mu , ψ) ⊆ EvS
p_sub_SvS: free_svars p ⊆ SvS
q_sub_SvS: free_svars q ⊆ SvS
ψ_sub_SvS: free_svars (mu , ψ) ⊆ SvS
HEinψ: E ∈ free_evars ψ
X: svar
HeqX: X = svar_fresh (elements SvS)
frX: X ∉ SvS
H: well_formed ψ^{svar:0↦X} = true
H0: size' ψ^{svar:0↦X} ≤ sz
IH: ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ^{svar:0↦X})), SVSubst := list_to_set (svar_fresh_seq ({[X]} ∪ SvS) (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ^{svar:0↦X})), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ^{svar:0↦X}) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS ({[X]} ∪ SvS) E ψ^{svar:0↦X} p q H wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ^{svar:0↦X} ⊆ EvS → free_svars p ⊆ {[X]} ∪ SvS → free_svars q ⊆ {[X]} ∪ SvS → free_svars ψ^{svar:0↦X} ⊆ {[X]} ∪ SvS → Γ ⊢i ψ^{svar:0↦X}^[[evar:E↦p]] <---> ψ^{svar:0↦X}^[[evar:E↦q]] using gpi
free_svars ψ^{svar:0↦X} ⊆ {[X]} ∪ SvS
Σ: Signature
sz: nat
Γ: Theory
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
E: evar
exdepth, mudepth: nat
gpi: ProofInfo
pf: Γ ⊢i p <---> q using gpi
IHsz: (ψ : Pattern) (wfψ : well_formed ψ), size' ψ ≤ sz → (EvS : EVarSet) (SvS : SVarSet), ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ p q wfψ wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ ⊆ SvS → Γ ⊢i ψ^[[evar:E↦p]] <---> ψ^[[evar:E↦q]] using gpi
ψ: Pattern
wfψ: well_formed (mu , ψ)
Hsz: S (size' ψ) ≤ S sz
EvS: EVarSet
SvS: SVarSet
i':= ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (mu , ψ))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (mu , ψ))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (mu , ψ)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E (mu , ψ) p q wfψ wfp wfq): ProofInfo
pile: ProofInfoLe i' gpi
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
E_in_EvS: E ∈ EvS
ψ_sub_EvS: free_evars (mu , ψ) ⊆ EvS
p_sub_SvS: free_svars p ⊆ SvS
q_sub_SvS: free_svars q ⊆ SvS
ψ_sub_SvS: free_svars (mu , ψ) ⊆ SvS
HEinψ: E ∈ free_evars ψ
X: svar
HeqX: X = svar_fresh (elements SvS)
frX: X ∉ SvS
H: well_formed ψ^{svar:0↦X} = true
H0: size' ψ^{svar:0↦X} ≤ sz
IH: Γ ⊢i ψ^{svar:0↦X}^[[evar:E↦p]] <---> ψ^{svar:0↦X}^[[evar:E↦q]] using gpi
Γ ⊢i (mu , ψ^[[evar:E↦p]]) <---> (mu , ψ^[[evar:E↦q]]) using gpi
Σ: Signature
sz: nat
Γ: Theory
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
E: evar
exdepth, mudepth: nat
gpi: ProofInfo
pf: Γ ⊢i p <---> q using gpi
IHsz: (ψ : Pattern) (wfψ : well_formed ψ), size' ψ ≤ sz → (EvS : EVarSet) (SvS : SVarSet), ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ p q wfψ wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ ⊆ SvS → Γ ⊢i ψ^[[evar:E↦p]] <---> ψ^[[evar:E↦q]] using gpi
ψ: Pattern
wfψ: well_formed (mu , ψ)
Hsz: S (size' ψ) ≤ S sz
EvS: EVarSet
SvS: SVarSet
i':= ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (mu , ψ))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (mu , ψ))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (mu , ψ)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E (mu , ψ) p q wfψ wfp wfq): ProofInfo
pile: ProofInfoLe i' gpi
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
E_in_EvS: E ∈ EvS
ψ_sub_EvS: free_evars (mu , ψ) ⊆ EvS
p_sub_SvS: free_svars p ⊆ SvS
q_sub_SvS: free_svars q ⊆ SvS
ψ_sub_SvS: free_svars (mu , ψ) ⊆ SvS
HEinψ: E ∈ free_evars ψ
X: svar
HeqX: X = svar_fresh (elements SvS)
frX: X ∉ SvS
H: well_formed ψ^{svar:0↦X} = true
H0: size' ψ^{svar:0↦X} ≤ sz
IH: ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ^{svar:0↦X})), SVSubst := list_to_set (svar_fresh_seq ({[X]} ∪ SvS) (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ^{svar:0↦X})), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ^{svar:0↦X}) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS ({[X]} ∪ SvS) E ψ^{svar:0↦X} p q H wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ^{svar:0↦X} ⊆ EvS → free_svars p ⊆ {[X]} ∪ SvS → free_svars q ⊆ {[X]} ∪ SvS → free_svars ψ^{svar:0↦X} ⊆ {[X]} ∪ SvS → Γ ⊢i ψ^{svar:0↦X}^[[evar:E↦p]] <---> ψ^{svar:0↦X}^[[evar:E↦q]] using gpi

E ∈ EvS
exact E_in_EvS.
Σ: Signature
sz: nat
Γ: Theory
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
E: evar
exdepth, mudepth: nat
gpi: ProofInfo
pf: Γ ⊢i p <---> q using gpi
IHsz: (ψ : Pattern) (wfψ : well_formed ψ), size' ψ ≤ sz → (EvS : EVarSet) (SvS : SVarSet), ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ p q wfψ wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ ⊆ SvS → Γ ⊢i ψ^[[evar:E↦p]] <---> ψ^[[evar:E↦q]] using gpi
ψ: Pattern
wfψ: well_formed (mu , ψ)
Hsz: S (size' ψ) ≤ S sz
EvS: EVarSet
SvS: SVarSet
i':= ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (mu , ψ))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (mu , ψ))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (mu , ψ)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E (mu , ψ) p q wfψ wfp wfq): ProofInfo
pile: ProofInfoLe i' gpi
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
E_in_EvS: E ∈ EvS
ψ_sub_EvS: free_evars (mu , ψ) ⊆ EvS
p_sub_SvS: free_svars p ⊆ SvS
q_sub_SvS: free_svars q ⊆ SvS
ψ_sub_SvS: free_svars (mu , ψ) ⊆ SvS
HEinψ: E ∈ free_evars ψ
X: svar
HeqX: X = svar_fresh (elements SvS)
frX: X ∉ SvS
H: well_formed ψ^{svar:0↦X} = true
H0: size' ψ^{svar:0↦X} ≤ sz
IH: ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ^{svar:0↦X})), SVSubst := list_to_set (svar_fresh_seq ({[X]} ∪ SvS) (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ^{svar:0↦X})), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ^{svar:0↦X}) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS ({[X]} ∪ SvS) E ψ^{svar:0↦X} p q H wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ^{svar:0↦X} ⊆ EvS → free_svars p ⊆ {[X]} ∪ SvS → free_svars q ⊆ {[X]} ∪ SvS → free_svars ψ^{svar:0↦X} ⊆ {[X]} ∪ SvS → Γ ⊢i ψ^{svar:0↦X}^[[evar:E↦p]] <---> ψ^{svar:0↦X}^[[evar:E↦q]] using gpi

free_evars ψ^{svar:0↦X} ⊆ EvS
Σ: Signature
sz: nat
Γ: Theory
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
E: evar
exdepth, mudepth: nat
gpi: ProofInfo
pf: Γ ⊢i p <---> q using gpi
IHsz: (ψ : Pattern) (wfψ : well_formed ψ), size' ψ ≤ sz → (EvS : EVarSet) (SvS : SVarSet), ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ p q wfψ wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ ⊆ SvS → Γ ⊢i ψ^[[evar:E↦p]] <---> ψ^[[evar:E↦q]] using gpi
ψ: Pattern
wfψ: well_formed (mu , ψ)
Hsz: S (size' ψ) ≤ S sz
EvS: EVarSet
SvS: SVarSet
i':= ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (mu , ψ))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (mu , ψ))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (mu , ψ)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E (mu , ψ) p q wfψ wfp wfq): ProofInfo
pile: ProofInfoLe i' gpi
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
E_in_EvS: E ∈ EvS
ψ_sub_EvS: free_evars (mu , ψ) ⊆ EvS
p_sub_SvS: free_svars p ⊆ SvS
q_sub_SvS: free_svars q ⊆ SvS
ψ_sub_SvS: free_svars (mu , ψ) ⊆ SvS
HEinψ: E ∈ free_evars ψ
X: svar
HeqX: X = svar_fresh (elements SvS)
frX: X ∉ SvS
H: well_formed ψ^{svar:0↦X} = true
H0: size' ψ^{svar:0↦X} ≤ sz
IH: ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ^{svar:0↦X})), SVSubst := list_to_set (svar_fresh_seq ({[X]} ∪ SvS) (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ^{svar:0↦X})), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ^{svar:0↦X}) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS ({[X]} ∪ SvS) E ψ^{svar:0↦X} p q H wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ^{svar:0↦X} ⊆ EvS → free_svars p ⊆ {[X]} ∪ SvS → free_svars q ⊆ {[X]} ∪ SvS → free_svars ψ^{svar:0↦X} ⊆ {[X]} ∪ SvS → Γ ⊢i ψ^{svar:0↦X}^[[evar:E↦p]] <---> ψ^{svar:0↦X}^[[evar:E↦q]] using gpi
free_svars p ⊆ {[X]} ∪ SvS
Σ: Signature
sz: nat
Γ: Theory
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
E: evar
exdepth, mudepth: nat
gpi: ProofInfo
pf: Γ ⊢i p <---> q using gpi
IHsz: (ψ : Pattern) (wfψ : well_formed ψ), size' ψ ≤ sz → (EvS : EVarSet) (SvS : SVarSet), ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ p q wfψ wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ ⊆ SvS → Γ ⊢i ψ^[[evar:E↦p]] <---> ψ^[[evar:E↦q]] using gpi
ψ: Pattern
wfψ: well_formed (mu , ψ)
Hsz: S (size' ψ) ≤ S sz
EvS: EVarSet
SvS: SVarSet
i':= ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (mu , ψ))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (mu , ψ))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (mu , ψ)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E (mu , ψ) p q wfψ wfp wfq): ProofInfo
pile: ProofInfoLe i' gpi
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
E_in_EvS: E ∈ EvS
ψ_sub_EvS: free_evars (mu , ψ) ⊆ EvS
p_sub_SvS: free_svars p ⊆ SvS
q_sub_SvS: free_svars q ⊆ SvS
ψ_sub_SvS: free_svars (mu , ψ) ⊆ SvS
HEinψ: E ∈ free_evars ψ
X: svar
HeqX: X = svar_fresh (elements SvS)
frX: X ∉ SvS
H: well_formed ψ^{svar:0↦X} = true
H0: size' ψ^{svar:0↦X} ≤ sz
IH: ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ^{svar:0↦X})), SVSubst := list_to_set (svar_fresh_seq ({[X]} ∪ SvS) (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ^{svar:0↦X})), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ^{svar:0↦X}) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS ({[X]} ∪ SvS) E ψ^{svar:0↦X} p q H wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ^{svar:0↦X} ⊆ EvS → free_svars p ⊆ {[X]} ∪ SvS → free_svars q ⊆ {[X]} ∪ SvS → free_svars ψ^{svar:0↦X} ⊆ {[X]} ∪ SvS → Γ ⊢i ψ^{svar:0↦X}^[[evar:E↦p]] <---> ψ^{svar:0↦X}^[[evar:E↦q]] using gpi
free_svars q ⊆ {[X]} ∪ SvS
Σ: Signature
sz: nat
Γ: Theory
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
E: evar
exdepth, mudepth: nat
gpi: ProofInfo
pf: Γ ⊢i p <---> q using gpi
IHsz: (ψ : Pattern) (wfψ : well_formed ψ), size' ψ ≤ sz → (EvS : EVarSet) (SvS : SVarSet), ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ p q wfψ wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ ⊆ SvS → Γ ⊢i ψ^[[evar:E↦p]] <---> ψ^[[evar:E↦q]] using gpi
ψ: Pattern
wfψ: well_formed (mu , ψ)
Hsz: S (size' ψ) ≤ S sz
EvS: EVarSet
SvS: SVarSet
i':= ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (mu , ψ))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (mu , ψ))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (mu , ψ)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E (mu , ψ) p q wfψ wfp wfq): ProofInfo
pile: ProofInfoLe i' gpi
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
E_in_EvS: E ∈ EvS
ψ_sub_EvS: free_evars (mu , ψ) ⊆ EvS
p_sub_SvS: free_svars p ⊆ SvS
q_sub_SvS: free_svars q ⊆ SvS
ψ_sub_SvS: free_svars (mu , ψ) ⊆ SvS
HEinψ: E ∈ free_evars ψ
X: svar
HeqX: X = svar_fresh (elements SvS)
frX: X ∉ SvS
H: well_formed ψ^{svar:0↦X} = true
H0: size' ψ^{svar:0↦X} ≤ sz
IH: ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ^{svar:0↦X})), SVSubst := list_to_set (svar_fresh_seq ({[X]} ∪ SvS) (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ^{svar:0↦X})), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ^{svar:0↦X}) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS ({[X]} ∪ SvS) E ψ^{svar:0↦X} p q H wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ^{svar:0↦X} ⊆ EvS → free_svars p ⊆ {[X]} ∪ SvS → free_svars q ⊆ {[X]} ∪ SvS → free_svars ψ^{svar:0↦X} ⊆ {[X]} ∪ SvS → Γ ⊢i ψ^{svar:0↦X}^[[evar:E↦p]] <---> ψ^{svar:0↦X}^[[evar:E↦q]] using gpi
free_svars ψ^{svar:0↦X} ⊆ {[X]} ∪ SvS
Σ: Signature
sz: nat
Γ: Theory
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
E: evar
exdepth, mudepth: nat
gpi: ProofInfo
pf: Γ ⊢i p <---> q using gpi
IHsz: (ψ : Pattern) (wfψ : well_formed ψ), size' ψ ≤ sz → (EvS : EVarSet) (SvS : SVarSet), ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ p q wfψ wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ ⊆ SvS → Γ ⊢i ψ^[[evar:E↦p]] <---> ψ^[[evar:E↦q]] using gpi
ψ: Pattern
wfψ: well_formed (mu , ψ)
Hsz: S (size' ψ) ≤ S sz
EvS: EVarSet
SvS: SVarSet
i':= ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (mu , ψ))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (mu , ψ))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (mu , ψ)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E (mu , ψ) p q wfψ wfp wfq): ProofInfo
pile: ProofInfoLe i' gpi
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
E_in_EvS: E ∈ EvS
ψ_sub_EvS: free_evars (mu , ψ) ⊆ EvS
p_sub_SvS: free_svars p ⊆ SvS
q_sub_SvS: free_svars q ⊆ SvS
ψ_sub_SvS: free_svars (mu , ψ) ⊆ SvS
HEinψ: E ∈ free_evars ψ
X: svar
HeqX: X = svar_fresh (elements SvS)
frX: X ∉ SvS
H: well_formed ψ^{svar:0↦X} = true
H0: size' ψ^{svar:0↦X} ≤ sz
IH: Γ ⊢i ψ^{svar:0↦X}^[[evar:E↦p]] <---> ψ^{svar:0↦X}^[[evar:E↦q]] using gpi
Γ ⊢i (mu , ψ^[[evar:E↦p]]) <---> (mu , ψ^[[evar:E↦q]]) using gpi
Σ: Signature
sz: nat
Γ: Theory
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
E: evar
exdepth, mudepth: nat
gpi: ProofInfo
pf: Γ ⊢i p <---> q using gpi
IHsz: (ψ : Pattern) (wfψ : well_formed ψ), size' ψ ≤ sz → (EvS : EVarSet) (SvS : SVarSet), ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ p q wfψ wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ ⊆ SvS → Γ ⊢i ψ^[[evar:E↦p]] <---> ψ^[[evar:E↦q]] using gpi
ψ: Pattern
wfψ: well_formed (mu , ψ)
Hsz: S (size' ψ) ≤ S sz
EvS: EVarSet
SvS: SVarSet
i':= ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (mu , ψ))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (mu , ψ))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (mu , ψ)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E (mu , ψ) p q wfψ wfp wfq): ProofInfo
pile: ProofInfoLe i' gpi
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
E_in_EvS: E ∈ EvS
ψ_sub_EvS: free_evars (mu , ψ) ⊆ EvS
p_sub_SvS: free_svars p ⊆ SvS
q_sub_SvS: free_svars q ⊆ SvS
ψ_sub_SvS: free_svars (mu , ψ) ⊆ SvS
HEinψ: E ∈ free_evars ψ
X: svar
HeqX: X = svar_fresh (elements SvS)
frX: X ∉ SvS
H: well_formed ψ^{svar:0↦X} = true
H0: size' ψ^{svar:0↦X} ≤ sz
IH: ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ^{svar:0↦X})), SVSubst := list_to_set (svar_fresh_seq ({[X]} ∪ SvS) (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ^{svar:0↦X})), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ^{svar:0↦X}) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS ({[X]} ∪ SvS) E ψ^{svar:0↦X} p q H wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ^{svar:0↦X} ⊆ EvS → free_svars p ⊆ {[X]} ∪ SvS → free_svars q ⊆ {[X]} ∪ SvS → free_svars ψ^{svar:0↦X} ⊆ {[X]} ∪ SvS → Γ ⊢i ψ^{svar:0↦X}^[[evar:E↦p]] <---> ψ^{svar:0↦X}^[[evar:E↦q]] using gpi

free_evars ψ^{svar:0↦X} ⊆ EvS
abstract ( rewrite free_evars_svar_open; simpl in ψ_sub_EvS; apply ψ_sub_EvS ).
Σ: Signature
sz: nat
Γ: Theory
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
E: evar
exdepth, mudepth: nat
gpi: ProofInfo
pf: Γ ⊢i p <---> q using gpi
IHsz: (ψ : Pattern) (wfψ : well_formed ψ), size' ψ ≤ sz → (EvS : EVarSet) (SvS : SVarSet), ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ p q wfψ wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ ⊆ SvS → Γ ⊢i ψ^[[evar:E↦p]] <---> ψ^[[evar:E↦q]] using gpi
ψ: Pattern
wfψ: well_formed (mu , ψ)
Hsz: S (size' ψ) ≤ S sz
EvS: EVarSet
SvS: SVarSet
i':= ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (mu , ψ))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (mu , ψ))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (mu , ψ)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E (mu , ψ) p q wfψ wfp wfq): ProofInfo
pile: ProofInfoLe i' gpi
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
E_in_EvS: E ∈ EvS
ψ_sub_EvS: free_evars (mu , ψ) ⊆ EvS
p_sub_SvS: free_svars p ⊆ SvS
q_sub_SvS: free_svars q ⊆ SvS
ψ_sub_SvS: free_svars (mu , ψ) ⊆ SvS
HEinψ: E ∈ free_evars ψ
X: svar
HeqX: X = svar_fresh (elements SvS)
frX: X ∉ SvS
H: well_formed ψ^{svar:0↦X} = true
H0: size' ψ^{svar:0↦X} ≤ sz
IH: ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ^{svar:0↦X})), SVSubst := list_to_set (svar_fresh_seq ({[X]} ∪ SvS) (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ^{svar:0↦X})), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ^{svar:0↦X}) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS ({[X]} ∪ SvS) E ψ^{svar:0↦X} p q H wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ^{svar:0↦X} ⊆ EvS → free_svars p ⊆ {[X]} ∪ SvS → free_svars q ⊆ {[X]} ∪ SvS → free_svars ψ^{svar:0↦X} ⊆ {[X]} ∪ SvS → Γ ⊢i ψ^{svar:0↦X}^[[evar:E↦p]] <---> ψ^{svar:0↦X}^[[evar:E↦q]] using gpi

free_svars p ⊆ {[X]} ∪ SvS
Σ: Signature
sz: nat
Γ: Theory
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
E: evar
exdepth, mudepth: nat
gpi: ProofInfo
pf: Γ ⊢i p <---> q using gpi
IHsz: (ψ : Pattern) (wfψ : well_formed ψ), size' ψ ≤ sz → (EvS : EVarSet) (SvS : SVarSet), ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ p q wfψ wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ ⊆ SvS → Γ ⊢i ψ^[[evar:E↦p]] <---> ψ^[[evar:E↦q]] using gpi
ψ: Pattern
wfψ: well_formed (mu , ψ)
Hsz: S (size' ψ) ≤ S sz
EvS: EVarSet
SvS: SVarSet
i':= ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (mu , ψ))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (mu , ψ))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (mu , ψ)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E (mu , ψ) p q wfψ wfp wfq): ProofInfo
pile: ProofInfoLe i' gpi
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
E_in_EvS: E ∈ EvS
ψ_sub_EvS: free_evars (mu , ψ) ⊆ EvS
p_sub_SvS: free_svars p ⊆ SvS
q_sub_SvS: free_svars q ⊆ SvS
ψ_sub_SvS: free_svars (mu , ψ) ⊆ SvS
HEinψ: E ∈ free_evars ψ
X: svar
HeqX: X = svar_fresh (elements SvS)
frX: X ∉ SvS
H: well_formed ψ^{svar:0↦X} = true
H0: size' ψ^{svar:0↦X} ≤ sz
IH: ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ^{svar:0↦X})), SVSubst := list_to_set (svar_fresh_seq ({[X]} ∪ SvS) (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ^{svar:0↦X})), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ^{svar:0↦X}) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS ({[X]} ∪ SvS) E ψ^{svar:0↦X} p q H wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ^{svar:0↦X} ⊆ EvS → free_svars p ⊆ {[X]} ∪ SvS → free_svars q ⊆ {[X]} ∪ SvS → free_svars ψ^{svar:0↦X} ⊆ {[X]} ∪ SvS → Γ ⊢i ψ^{svar:0↦X}^[[evar:E↦p]] <---> ψ^{svar:0↦X}^[[evar:E↦q]] using gpi
free_svars q ⊆ {[X]} ∪ SvS
Σ: Signature
sz: nat
Γ: Theory
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
E: evar
exdepth, mudepth: nat
gpi: ProofInfo
pf: Γ ⊢i p <---> q using gpi
IHsz: (ψ : Pattern) (wfψ : well_formed ψ), size' ψ ≤ sz → (EvS : EVarSet) (SvS : SVarSet), ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ p q wfψ wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ ⊆ SvS → Γ ⊢i ψ^[[evar:E↦p]] <---> ψ^[[evar:E↦q]] using gpi
ψ: Pattern
wfψ: well_formed (mu , ψ)
Hsz: S (size' ψ) ≤ S sz
EvS: EVarSet
SvS: SVarSet
i':= ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (mu , ψ))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (mu , ψ))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (mu , ψ)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E (mu , ψ) p q wfψ wfp wfq): ProofInfo
pile: ProofInfoLe i' gpi
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
E_in_EvS: E ∈ EvS
ψ_sub_EvS: free_evars (mu , ψ) ⊆ EvS
p_sub_SvS: free_svars p ⊆ SvS
q_sub_SvS: free_svars q ⊆ SvS
ψ_sub_SvS: free_svars (mu , ψ) ⊆ SvS
HEinψ: E ∈ free_evars ψ
X: svar
HeqX: X = svar_fresh (elements SvS)
frX: X ∉ SvS
H: well_formed ψ^{svar:0↦X} = true
H0: size' ψ^{svar:0↦X} ≤ sz
IH: ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ^{svar:0↦X})), SVSubst := list_to_set (svar_fresh_seq ({[X]} ∪ SvS) (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ^{svar:0↦X})), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ^{svar:0↦X}) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS ({[X]} ∪ SvS) E ψ^{svar:0↦X} p q H wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ^{svar:0↦X} ⊆ EvS → free_svars p ⊆ {[X]} ∪ SvS → free_svars q ⊆ {[X]} ∪ SvS → free_svars ψ^{svar:0↦X} ⊆ {[X]} ∪ SvS → Γ ⊢i ψ^{svar:0↦X}^[[evar:E↦p]] <---> ψ^{svar:0↦X}^[[evar:E↦q]] using gpi
free_svars ψ^{svar:0↦X} ⊆ {[X]} ∪ SvS
Σ: Signature
sz: nat
Γ: Theory
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
E: evar
exdepth, mudepth: nat
gpi: ProofInfo
pf: Γ ⊢i p <---> q using gpi
IHsz: (ψ : Pattern) (wfψ : well_formed ψ), size' ψ ≤ sz → (EvS : EVarSet) (SvS : SVarSet), ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ p q wfψ wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ ⊆ SvS → Γ ⊢i ψ^[[evar:E↦p]] <---> ψ^[[evar:E↦q]] using gpi
ψ: Pattern
wfψ: well_formed (mu , ψ)
Hsz: S (size' ψ) ≤ S sz
EvS: EVarSet
SvS: SVarSet
i':= ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (mu , ψ))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (mu , ψ))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (mu , ψ)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E (mu , ψ) p q wfψ wfp wfq): ProofInfo
pile: ProofInfoLe i' gpi
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
E_in_EvS: E ∈ EvS
ψ_sub_EvS: free_evars (mu , ψ) ⊆ EvS
p_sub_SvS: free_svars p ⊆ SvS
q_sub_SvS: free_svars q ⊆ SvS
ψ_sub_SvS: free_svars (mu , ψ) ⊆ SvS
HEinψ: E ∈ free_evars ψ
X: svar
HeqX: X = svar_fresh (elements SvS)
frX: X ∉ SvS
H: well_formed ψ^{svar:0↦X} = true
H0: size' ψ^{svar:0↦X} ≤ sz
IH: Γ ⊢i ψ^{svar:0↦X}^[[evar:E↦p]] <---> ψ^{svar:0↦X}^[[evar:E↦q]] using gpi
Γ ⊢i (mu , ψ^[[evar:E↦p]]) <---> (mu , ψ^[[evar:E↦q]]) using gpi
Σ: Signature
sz: nat
Γ: Theory
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
E: evar
exdepth, mudepth: nat
gpi: ProofInfo
pf: Γ ⊢i p <---> q using gpi
IHsz: (ψ : Pattern) (wfψ : well_formed ψ), size' ψ ≤ sz → (EvS : EVarSet) (SvS : SVarSet), ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ p q wfψ wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ ⊆ SvS → Γ ⊢i ψ^[[evar:E↦p]] <---> ψ^[[evar:E↦q]] using gpi
ψ: Pattern
wfψ: well_formed (mu , ψ)
Hsz: S (size' ψ) ≤ S sz
EvS: EVarSet
SvS: SVarSet
i':= ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (mu , ψ))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (mu , ψ))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (mu , ψ)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E (mu , ψ) p q wfψ wfp wfq): ProofInfo
pile: ProofInfoLe i' gpi
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
E_in_EvS: E ∈ EvS
ψ_sub_EvS: free_evars (mu , ψ) ⊆ EvS
p_sub_SvS: free_svars p ⊆ SvS
q_sub_SvS: free_svars q ⊆ SvS
ψ_sub_SvS: free_svars (mu , ψ) ⊆ SvS
HEinψ: E ∈ free_evars ψ
X: svar
HeqX: X = svar_fresh (elements SvS)
frX: X ∉ SvS
H: well_formed ψ^{svar:0↦X} = true
H0: size' ψ^{svar:0↦X} ≤ sz
IH: ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ^{svar:0↦X})), SVSubst := list_to_set (svar_fresh_seq ({[X]} ∪ SvS) (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ^{svar:0↦X})), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ^{svar:0↦X}) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS ({[X]} ∪ SvS) E ψ^{svar:0↦X} p q H wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ^{svar:0↦X} ⊆ EvS → free_svars p ⊆ {[X]} ∪ SvS → free_svars q ⊆ {[X]} ∪ SvS → free_svars ψ^{svar:0↦X} ⊆ {[X]} ∪ SvS → Γ ⊢i ψ^{svar:0↦X}^[[evar:E↦p]] <---> ψ^{svar:0↦X}^[[evar:E↦q]] using gpi

free_svars p ⊆ {[X]} ∪ SvS
Σ: Signature
p: Pattern
SvS: SVarSet
p_sub_SvS: free_svars p ⊆ SvS
X: svar

free_svars p ⊆ {[X]} ∪ SvS
abstract (set_solver).
Σ: Signature
sz: nat
Γ: Theory
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
E: evar
exdepth, mudepth: nat
gpi: ProofInfo
pf: Γ ⊢i p <---> q using gpi
IHsz: (ψ : Pattern) (wfψ : well_formed ψ), size' ψ ≤ sz → (EvS : EVarSet) (SvS : SVarSet), ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ p q wfψ wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ ⊆ SvS → Γ ⊢i ψ^[[evar:E↦p]] <---> ψ^[[evar:E↦q]] using gpi
ψ: Pattern
wfψ: well_formed (mu , ψ)
Hsz: S (size' ψ) ≤ S sz
EvS: EVarSet
SvS: SVarSet
i':= ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (mu , ψ))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (mu , ψ))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (mu , ψ)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E (mu , ψ) p q wfψ wfp wfq): ProofInfo
pile: ProofInfoLe i' gpi
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
E_in_EvS: E ∈ EvS
ψ_sub_EvS: free_evars (mu , ψ) ⊆ EvS
p_sub_SvS: free_svars p ⊆ SvS
q_sub_SvS: free_svars q ⊆ SvS
ψ_sub_SvS: free_svars (mu , ψ) ⊆ SvS
HEinψ: E ∈ free_evars ψ
X: svar
HeqX: X = svar_fresh (elements SvS)
frX: X ∉ SvS
H: well_formed ψ^{svar:0↦X} = true
H0: size' ψ^{svar:0↦X} ≤ sz
IH: ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ^{svar:0↦X})), SVSubst := list_to_set (svar_fresh_seq ({[X]} ∪ SvS) (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ^{svar:0↦X})), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ^{svar:0↦X}) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS ({[X]} ∪ SvS) E ψ^{svar:0↦X} p q H wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ^{svar:0↦X} ⊆ EvS → free_svars p ⊆ {[X]} ∪ SvS → free_svars q ⊆ {[X]} ∪ SvS → free_svars ψ^{svar:0↦X} ⊆ {[X]} ∪ SvS → Γ ⊢i ψ^{svar:0↦X}^[[evar:E↦p]] <---> ψ^{svar:0↦X}^[[evar:E↦q]] using gpi

free_svars q ⊆ {[X]} ∪ SvS
Σ: Signature
sz: nat
Γ: Theory
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
E: evar
exdepth, mudepth: nat
gpi: ProofInfo
pf: Γ ⊢i p <---> q using gpi
IHsz: (ψ : Pattern) (wfψ : well_formed ψ), size' ψ ≤ sz → (EvS : EVarSet) (SvS : SVarSet), ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ p q wfψ wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ ⊆ SvS → Γ ⊢i ψ^[[evar:E↦p]] <---> ψ^[[evar:E↦q]] using gpi
ψ: Pattern
wfψ: well_formed (mu , ψ)
Hsz: S (size' ψ) ≤ S sz
EvS: EVarSet
SvS: SVarSet
i':= ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (mu , ψ))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (mu , ψ))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (mu , ψ)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E (mu , ψ) p q wfψ wfp wfq): ProofInfo
pile: ProofInfoLe i' gpi
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
E_in_EvS: E ∈ EvS
ψ_sub_EvS: free_evars (mu , ψ) ⊆ EvS
p_sub_SvS: free_svars p ⊆ SvS
q_sub_SvS: free_svars q ⊆ SvS
ψ_sub_SvS: free_svars (mu , ψ) ⊆ SvS
HEinψ: E ∈ free_evars ψ
X: svar
HeqX: X = svar_fresh (elements SvS)
frX: X ∉ SvS
H: well_formed ψ^{svar:0↦X} = true
H0: size' ψ^{svar:0↦X} ≤ sz
IH: ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ^{svar:0↦X})), SVSubst := list_to_set (svar_fresh_seq ({[X]} ∪ SvS) (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ^{svar:0↦X})), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ^{svar:0↦X}) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS ({[X]} ∪ SvS) E ψ^{svar:0↦X} p q H wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ^{svar:0↦X} ⊆ EvS → free_svars p ⊆ {[X]} ∪ SvS → free_svars q ⊆ {[X]} ∪ SvS → free_svars ψ^{svar:0↦X} ⊆ {[X]} ∪ SvS → Γ ⊢i ψ^{svar:0↦X}^[[evar:E↦p]] <---> ψ^{svar:0↦X}^[[evar:E↦q]] using gpi
free_svars ψ^{svar:0↦X} ⊆ {[X]} ∪ SvS
Σ: Signature
sz: nat
Γ: Theory
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
E: evar
exdepth, mudepth: nat
gpi: ProofInfo
pf: Γ ⊢i p <---> q using gpi
IHsz: (ψ : Pattern) (wfψ : well_formed ψ), size' ψ ≤ sz → (EvS : EVarSet) (SvS : SVarSet), ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ p q wfψ wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ ⊆ SvS → Γ ⊢i ψ^[[evar:E↦p]] <---> ψ^[[evar:E↦q]] using gpi
ψ: Pattern
wfψ: well_formed (mu , ψ)
Hsz: S (size' ψ) ≤ S sz
EvS: EVarSet
SvS: SVarSet
i':= ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (mu , ψ))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (mu , ψ))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (mu , ψ)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E (mu , ψ) p q wfψ wfp wfq): ProofInfo
pile: ProofInfoLe i' gpi
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
E_in_EvS: E ∈ EvS
ψ_sub_EvS: free_evars (mu , ψ) ⊆ EvS
p_sub_SvS: free_svars p ⊆ SvS
q_sub_SvS: free_svars q ⊆ SvS
ψ_sub_SvS: free_svars (mu , ψ) ⊆ SvS
HEinψ: E ∈ free_evars ψ
X: svar
HeqX: X = svar_fresh (elements SvS)
frX: X ∉ SvS
H: well_formed ψ^{svar:0↦X} = true
H0: size' ψ^{svar:0↦X} ≤ sz
IH: Γ ⊢i ψ^{svar:0↦X}^[[evar:E↦p]] <---> ψ^{svar:0↦X}^[[evar:E↦q]] using gpi
Γ ⊢i (mu , ψ^[[evar:E↦p]]) <---> (mu , ψ^[[evar:E↦q]]) using gpi
Σ: Signature
sz: nat
Γ: Theory
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
E: evar
exdepth, mudepth: nat
gpi: ProofInfo
pf: Γ ⊢i p <---> q using gpi
IHsz: (ψ : Pattern) (wfψ : well_formed ψ), size' ψ ≤ sz → (EvS : EVarSet) (SvS : SVarSet), ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ p q wfψ wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ ⊆ SvS → Γ ⊢i ψ^[[evar:E↦p]] <---> ψ^[[evar:E↦q]] using gpi
ψ: Pattern
wfψ: well_formed (mu , ψ)
Hsz: S (size' ψ) ≤ S sz
EvS: EVarSet
SvS: SVarSet
i':= ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (mu , ψ))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (mu , ψ))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (mu , ψ)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E (mu , ψ) p q wfψ wfp wfq): ProofInfo
pile: ProofInfoLe i' gpi
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
E_in_EvS: E ∈ EvS
ψ_sub_EvS: free_evars (mu , ψ) ⊆ EvS
p_sub_SvS: free_svars p ⊆ SvS
q_sub_SvS: free_svars q ⊆ SvS
ψ_sub_SvS: free_svars (mu , ψ) ⊆ SvS
HEinψ: E ∈ free_evars ψ
X: svar
HeqX: X = svar_fresh (elements SvS)
frX: X ∉ SvS
H: well_formed ψ^{svar:0↦X} = true
H0: size' ψ^{svar:0↦X} ≤ sz
IH: ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ^{svar:0↦X})), SVSubst := list_to_set (svar_fresh_seq ({[X]} ∪ SvS) (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ^{svar:0↦X})), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ^{svar:0↦X}) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS ({[X]} ∪ SvS) E ψ^{svar:0↦X} p q H wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ^{svar:0↦X} ⊆ EvS → free_svars p ⊆ {[X]} ∪ SvS → free_svars q ⊆ {[X]} ∪ SvS → free_svars ψ^{svar:0↦X} ⊆ {[X]} ∪ SvS → Γ ⊢i ψ^{svar:0↦X}^[[evar:E↦p]] <---> ψ^{svar:0↦X}^[[evar:E↦q]] using gpi

free_svars q ⊆ {[X]} ∪ SvS
Σ: Signature
q: Pattern
SvS: SVarSet
q_sub_SvS: free_svars q ⊆ SvS
X: svar

free_svars q ⊆ {[X]} ∪ SvS
abstract (set_solver).
Σ: Signature
sz: nat
Γ: Theory
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
E: evar
exdepth, mudepth: nat
gpi: ProofInfo
pf: Γ ⊢i p <---> q using gpi
IHsz: (ψ : Pattern) (wfψ : well_formed ψ), size' ψ ≤ sz → (EvS : EVarSet) (SvS : SVarSet), ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ p q wfψ wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ ⊆ SvS → Γ ⊢i ψ^[[evar:E↦p]] <---> ψ^[[evar:E↦q]] using gpi
ψ: Pattern
wfψ: well_formed (mu , ψ)
Hsz: S (size' ψ) ≤ S sz
EvS: EVarSet
SvS: SVarSet
i':= ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (mu , ψ))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (mu , ψ))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (mu , ψ)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E (mu , ψ) p q wfψ wfp wfq): ProofInfo
pile: ProofInfoLe i' gpi
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
E_in_EvS: E ∈ EvS
ψ_sub_EvS: free_evars (mu , ψ) ⊆ EvS
p_sub_SvS: free_svars p ⊆ SvS
q_sub_SvS: free_svars q ⊆ SvS
ψ_sub_SvS: free_svars (mu , ψ) ⊆ SvS
HEinψ: E ∈ free_evars ψ
X: svar
HeqX: X = svar_fresh (elements SvS)
frX: X ∉ SvS
H: well_formed ψ^{svar:0↦X} = true
H0: size' ψ^{svar:0↦X} ≤ sz
IH: ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ^{svar:0↦X})), SVSubst := list_to_set (svar_fresh_seq ({[X]} ∪ SvS) (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ^{svar:0↦X})), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ^{svar:0↦X}) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS ({[X]} ∪ SvS) E ψ^{svar:0↦X} p q H wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ^{svar:0↦X} ⊆ EvS → free_svars p ⊆ {[X]} ∪ SvS → free_svars q ⊆ {[X]} ∪ SvS → free_svars ψ^{svar:0↦X} ⊆ {[X]} ∪ SvS → Γ ⊢i ψ^{svar:0↦X}^[[evar:E↦p]] <---> ψ^{svar:0↦X}^[[evar:E↦q]] using gpi

free_svars ψ^{svar:0↦X} ⊆ {[X]} ∪ SvS
Σ: Signature
sz: nat
Γ: Theory
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
E: evar
exdepth, mudepth: nat
gpi: ProofInfo
pf: Γ ⊢i p <---> q using gpi
IHsz: (ψ : Pattern) (wfψ : well_formed ψ), size' ψ ≤ sz → (EvS : EVarSet) (SvS : SVarSet), ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ p q wfψ wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ ⊆ SvS → Γ ⊢i ψ^[[evar:E↦p]] <---> ψ^[[evar:E↦q]] using gpi
ψ: Pattern
wfψ: well_formed (mu , ψ)
Hsz: S (size' ψ) ≤ S sz
EvS: EVarSet
SvS: SVarSet
i':= ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (mu , ψ))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (mu , ψ))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (mu , ψ)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E (mu , ψ) p q wfψ wfp wfq): ProofInfo
pile: ProofInfoLe i' gpi
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
E_in_EvS: E ∈ EvS
ψ_sub_EvS: free_evars (mu , ψ) ⊆ EvS
p_sub_SvS: free_svars p ⊆ SvS
q_sub_SvS: free_svars q ⊆ SvS
ψ_sub_SvS: free_svars (mu , ψ) ⊆ SvS
HEinψ: E ∈ free_evars ψ
X: svar
HeqX: X = svar_fresh (elements SvS)
frX: X ∉ SvS
H: well_formed ψ^{svar:0↦X} = true
H0: size' ψ^{svar:0↦X} ≤ sz
IH: Γ ⊢i ψ^{svar:0↦X}^[[evar:E↦p]] <---> ψ^{svar:0↦X}^[[evar:E↦q]] using gpi
Γ ⊢i (mu , ψ^[[evar:E↦p]]) <---> (mu , ψ^[[evar:E↦q]]) using gpi
Σ: Signature
sz: nat
Γ: Theory
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
E: evar
exdepth, mudepth: nat
gpi: ProofInfo
pf: Γ ⊢i p <---> q using gpi
IHsz: (ψ : Pattern) (wfψ : well_formed ψ), size' ψ ≤ sz → (EvS : EVarSet) (SvS : SVarSet), ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ p q wfψ wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ ⊆ SvS → Γ ⊢i ψ^[[evar:E↦p]] <---> ψ^[[evar:E↦q]] using gpi
ψ: Pattern
wfψ: well_formed (mu , ψ)
Hsz: S (size' ψ) ≤ S sz
EvS: EVarSet
SvS: SVarSet
i':= ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (mu , ψ))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (mu , ψ))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (mu , ψ)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E (mu , ψ) p q wfψ wfp wfq): ProofInfo
pile: ProofInfoLe i' gpi
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
E_in_EvS: E ∈ EvS
ψ_sub_EvS: free_evars (mu , ψ) ⊆ EvS
p_sub_SvS: free_svars p ⊆ SvS
q_sub_SvS: free_svars q ⊆ SvS
ψ_sub_SvS: free_svars (mu , ψ) ⊆ SvS
HEinψ: E ∈ free_evars ψ
X: svar
HeqX: X = svar_fresh (elements SvS)
frX: X ∉ SvS
H: well_formed ψ^{svar:0↦X} = true
H0: size' ψ^{svar:0↦X} ≤ sz
IH: ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ^{svar:0↦X})), SVSubst := list_to_set (svar_fresh_seq ({[X]} ∪ SvS) (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ^{svar:0↦X})), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ^{svar:0↦X}) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS ({[X]} ∪ SvS) E ψ^{svar:0↦X} p q H wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ^{svar:0↦X} ⊆ EvS → free_svars p ⊆ {[X]} ∪ SvS → free_svars q ⊆ {[X]} ∪ SvS → free_svars ψ^{svar:0↦X} ⊆ {[X]} ∪ SvS → Γ ⊢i ψ^{svar:0↦X}^[[evar:E↦p]] <---> ψ^{svar:0↦X}^[[evar:E↦q]] using gpi

free_svars ψ^{svar:0↦X} ⊆ {[X]} ∪ SvS
Σ: Signature
sz: nat
Γ: Theory
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
E: evar
exdepth, mudepth: nat
gpi: ProofInfo
pf: Γ ⊢i p <---> q using gpi
IHsz: (ψ : Pattern) (wfψ : well_formed ψ), size' ψ ≤ sz → (EvS : EVarSet) (SvS : SVarSet), ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ p q wfψ wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ ⊆ SvS → Γ ⊢i ψ^[[evar:E↦p]] <---> ψ^[[evar:E↦q]] using gpi
ψ: Pattern
wfψ: well_formed (mu , ψ)
Hsz: S (size' ψ) ≤ S sz
EvS: EVarSet
SvS: SVarSet
i':= ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (mu , ψ))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (mu , ψ))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (mu , ψ)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E (mu , ψ) p q wfψ wfp wfq): ProofInfo
pile: ProofInfoLe i' gpi
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
E_in_EvS: E ∈ EvS
ψ_sub_EvS: free_evars (mu , ψ) ⊆ EvS
p_sub_SvS: free_svars p ⊆ SvS
q_sub_SvS: free_svars q ⊆ SvS
ψ_sub_SvS: free_svars (mu , ψ) ⊆ SvS
HEinψ: E ∈ free_evars ψ
X: svar
HeqX: X = svar_fresh (elements SvS)
frX: X ∉ SvS
H: well_formed ψ^{svar:0↦X} = true
H0: size' ψ^{svar:0↦X} ≤ sz
IH: ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ^{svar:0↦X})), SVSubst := list_to_set (svar_fresh_seq ({[X]} ∪ SvS) (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ^{svar:0↦X})), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ^{svar:0↦X}) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS ({[X]} ∪ SvS) E ψ^{svar:0↦X} p q H wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ^{svar:0↦X} ⊆ EvS → free_svars p ⊆ {[X]} ∪ SvS → free_svars q ⊆ {[X]} ∪ SvS → free_svars ψ^{svar:0↦X} ⊆ {[X]} ∪ SvS → Γ ⊢i ψ^{svar:0↦X}^[[evar:E↦p]] <---> ψ^{svar:0↦X}^[[evar:E↦q]] using gpi

x : svar, x ∈ free_svars ψ^{svar:0↦X} → x ∈ {[X]} ∪ SvS
Σ: Signature
sz: nat
Γ: Theory
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
E: evar
exdepth, mudepth: nat
gpi: ProofInfo
pf: Γ ⊢i p <---> q using gpi
IHsz: (ψ : Pattern) (wfψ : well_formed ψ), size' ψ ≤ sz → (EvS : EVarSet) (SvS : SVarSet), ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ p q wfψ wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ ⊆ SvS → Γ ⊢i ψ^[[evar:E↦p]] <---> ψ^[[evar:E↦q]] using gpi
ψ: Pattern
wfψ: well_formed (mu , ψ)
Hsz: S (size' ψ) ≤ S sz
EvS: EVarSet
SvS: SVarSet
i':= ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (mu , ψ))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (mu , ψ))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (mu , ψ)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E (mu , ψ) p q wfψ wfp wfq): ProofInfo
pile: ProofInfoLe i' gpi
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
E_in_EvS: E ∈ EvS
ψ_sub_EvS: free_evars (mu , ψ) ⊆ EvS
p_sub_SvS: free_svars p ⊆ SvS
q_sub_SvS: free_svars q ⊆ SvS
ψ_sub_SvS: free_svars (mu , ψ) ⊆ SvS
HEinψ: E ∈ free_evars ψ
X: svar
HeqX: X = svar_fresh (elements SvS)
frX: X ∉ SvS
H: well_formed ψ^{svar:0↦X} = true
H0: size' ψ^{svar:0↦X} ≤ sz
IH: ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ^{svar:0↦X})), SVSubst := list_to_set (svar_fresh_seq ({[X]} ∪ SvS) (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ^{svar:0↦X})), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ^{svar:0↦X}) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS ({[X]} ∪ SvS) E ψ^{svar:0↦X} p q H wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ^{svar:0↦X} ⊆ EvS → free_svars p ⊆ {[X]} ∪ SvS → free_svars q ⊆ {[X]} ∪ SvS → free_svars ψ^{svar:0↦X} ⊆ {[X]} ∪ SvS → Γ ⊢i ψ^{svar:0↦X}^[[evar:E↦p]] <---> ψ^{svar:0↦X}^[[evar:E↦q]] using gpi
X': svar

X' ∈ free_svars ψ^{svar:0↦X} → X' ∈ {[X]} ∪ SvS
Σ: Signature
sz: nat
Γ: Theory
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
E: evar
exdepth, mudepth: nat
gpi: ProofInfo
pf: Γ ⊢i p <---> q using gpi
IHsz: (ψ : Pattern) (wfψ : well_formed ψ), size' ψ ≤ sz → (EvS : EVarSet) (SvS : SVarSet), ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ p q wfψ wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ ⊆ SvS → Γ ⊢i ψ^[[evar:E↦p]] <---> ψ^[[evar:E↦q]] using gpi
ψ: Pattern
wfψ: well_formed (mu , ψ)
Hsz: S (size' ψ) ≤ S sz
EvS: EVarSet
SvS: SVarSet
i':= ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (mu , ψ))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (mu , ψ))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (mu , ψ)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E (mu , ψ) p q wfψ wfp wfq): ProofInfo
pile: ProofInfoLe i' gpi
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
E_in_EvS: E ∈ EvS
ψ_sub_EvS: free_evars (mu , ψ) ⊆ EvS
p_sub_SvS: free_svars p ⊆ SvS
q_sub_SvS: free_svars q ⊆ SvS
ψ_sub_SvS: free_svars (mu , ψ) ⊆ SvS
HEinψ: E ∈ free_evars ψ
X: svar
HeqX: X = svar_fresh (elements SvS)
frX: X ∉ SvS
H: well_formed ψ^{svar:0↦X} = true
H0: size' ψ^{svar:0↦X} ≤ sz
IH: ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ^{svar:0↦X})), SVSubst := list_to_set (svar_fresh_seq ({[X]} ∪ SvS) (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ^{svar:0↦X})), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ^{svar:0↦X}) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS ({[X]} ∪ SvS) E ψ^{svar:0↦X} p q H wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ^{svar:0↦X} ⊆ EvS → free_svars p ⊆ {[X]} ∪ SvS → free_svars q ⊆ {[X]} ∪ SvS → free_svars ψ^{svar:0↦X} ⊆ {[X]} ∪ SvS → Γ ⊢i ψ^{svar:0↦X}^[[evar:E↦p]] <---> ψ^{svar:0↦X}^[[evar:E↦q]] using gpi
X': svar

X' = X ∧ bsvar_occur ψ 0 ∨ X' ∈ free_svars ψ → X' ∈ {[X]} ∪ SvS
Σ: Signature
sz: nat
Γ: Theory
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
E: evar
exdepth, mudepth: nat
gpi: ProofInfo
pf: Γ ⊢i p <---> q using gpi
IHsz: (ψ : Pattern) (wfψ : well_formed ψ), size' ψ ≤ sz → (EvS : EVarSet) (SvS : SVarSet), ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ p q wfψ wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ ⊆ SvS → Γ ⊢i ψ^[[evar:E↦p]] <---> ψ^[[evar:E↦q]] using gpi
ψ: Pattern
wfψ: well_formed (mu , ψ)
Hsz: S (size' ψ) ≤ S sz
EvS: EVarSet
SvS: SVarSet
i':= ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (mu , ψ))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (mu , ψ))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (mu , ψ)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E (mu , ψ) p q wfψ wfp wfq): ProofInfo
pile: ProofInfoLe i' gpi
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
E_in_EvS: E ∈ EvS
ψ_sub_EvS: free_evars (mu , ψ) ⊆ EvS
p_sub_SvS: free_svars p ⊆ SvS
q_sub_SvS: free_svars q ⊆ SvS
ψ_sub_SvS: free_svars (mu , ψ) ⊆ SvS
HEinψ: E ∈ free_evars ψ
X: svar
HeqX: X = svar_fresh (elements SvS)
frX: X ∉ SvS
H: well_formed ψ^{svar:0↦X} = true
H0: size' ψ^{svar:0↦X} ≤ sz
IH: ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ^{svar:0↦X})), SVSubst := list_to_set (svar_fresh_seq ({[X]} ∪ SvS) (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ^{svar:0↦X})), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ^{svar:0↦X}) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS ({[X]} ∪ SvS) E ψ^{svar:0↦X} p q H wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ^{svar:0↦X} ⊆ EvS → free_svars p ⊆ {[X]} ∪ SvS → free_svars q ⊆ {[X]} ∪ SvS → free_svars ψ^{svar:0↦X} ⊆ {[X]} ∪ SvS → Γ ⊢i ψ^{svar:0↦X}^[[evar:E↦p]] <---> ψ^{svar:0↦X}^[[evar:E↦q]] using gpi
X': svar
H1: X' = X
H2: bsvar_occur ψ 0

X' ∈ {[X]} ∪ SvS
Σ: Signature
sz: nat
Γ: Theory
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
E: evar
exdepth, mudepth: nat
gpi: ProofInfo
pf: Γ ⊢i p <---> q using gpi
IHsz: (ψ : Pattern) (wfψ : well_formed ψ), size' ψ ≤ sz → (EvS : EVarSet) (SvS : SVarSet), ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ p q wfψ wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ ⊆ SvS → Γ ⊢i ψ^[[evar:E↦p]] <---> ψ^[[evar:E↦q]] using gpi
ψ: Pattern
wfψ: well_formed (mu , ψ)
Hsz: S (size' ψ) ≤ S sz
EvS: EVarSet
SvS: SVarSet
i':= ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (mu , ψ))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (mu , ψ))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (mu , ψ)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E (mu , ψ) p q wfψ wfp wfq): ProofInfo
pile: ProofInfoLe i' gpi
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
E_in_EvS: E ∈ EvS
ψ_sub_EvS: free_evars (mu , ψ) ⊆ EvS
p_sub_SvS: free_svars p ⊆ SvS
q_sub_SvS: free_svars q ⊆ SvS
ψ_sub_SvS: free_svars (mu , ψ) ⊆ SvS
HEinψ: E ∈ free_evars ψ
X: svar
HeqX: X = svar_fresh (elements SvS)
frX: X ∉ SvS
H: well_formed ψ^{svar:0↦X} = true
H0: size' ψ^{svar:0↦X} ≤ sz
IH: ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ^{svar:0↦X})), SVSubst := list_to_set (svar_fresh_seq ({[X]} ∪ SvS) (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ^{svar:0↦X})), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ^{svar:0↦X}) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS ({[X]} ∪ SvS) E ψ^{svar:0↦X} p q H wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ^{svar:0↦X} ⊆ EvS → free_svars p ⊆ {[X]} ∪ SvS → free_svars q ⊆ {[X]} ∪ SvS → free_svars ψ^{svar:0↦X} ⊆ {[X]} ∪ SvS → Γ ⊢i ψ^{svar:0↦X}^[[evar:E↦p]] <---> ψ^{svar:0↦X}^[[evar:E↦q]] using gpi
X': svar
H1: X' ∈ free_svars ψ
X' ∈ {[X]} ∪ SvS
Σ: Signature
sz: nat
Γ: Theory
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
E: evar
exdepth, mudepth: nat
gpi: ProofInfo
pf: Γ ⊢i p <---> q using gpi
IHsz: (ψ : Pattern) (wfψ : well_formed ψ), size' ψ ≤ sz → (EvS : EVarSet) (SvS : SVarSet), ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ p q wfψ wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ ⊆ SvS → Γ ⊢i ψ^[[evar:E↦p]] <---> ψ^[[evar:E↦q]] using gpi
ψ: Pattern
wfψ: well_formed (mu , ψ)
Hsz: S (size' ψ) ≤ S sz
EvS: EVarSet
SvS: SVarSet
i':= ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (mu , ψ))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (mu , ψ))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (mu , ψ)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E (mu , ψ) p q wfψ wfp wfq): ProofInfo
pile: ProofInfoLe i' gpi
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
E_in_EvS: E ∈ EvS
ψ_sub_EvS: free_evars (mu , ψ) ⊆ EvS
p_sub_SvS: free_svars p ⊆ SvS
q_sub_SvS: free_svars q ⊆ SvS
ψ_sub_SvS: free_svars (mu , ψ) ⊆ SvS
HEinψ: E ∈ free_evars ψ
X: svar
HeqX: X = svar_fresh (elements SvS)
frX: X ∉ SvS
H: well_formed ψ^{svar:0↦X} = true
H0: size' ψ^{svar:0↦X} ≤ sz
IH: ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ^{svar:0↦X})), SVSubst := list_to_set (svar_fresh_seq ({[X]} ∪ SvS) (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ^{svar:0↦X})), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ^{svar:0↦X}) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS ({[X]} ∪ SvS) E ψ^{svar:0↦X} p q H wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ^{svar:0↦X} ⊆ EvS → free_svars p ⊆ {[X]} ∪ SvS → free_svars q ⊆ {[X]} ∪ SvS → free_svars ψ^{svar:0↦X} ⊆ {[X]} ∪ SvS → Γ ⊢i ψ^{svar:0↦X}^[[evar:E↦p]] <---> ψ^{svar:0↦X}^[[evar:E↦q]] using gpi
X': svar
H1: X' = X
H2: bsvar_occur ψ 0

X' ∈ {[X]} ∪ SvS
abstract (subst X'; clear; set_solver).
Σ: Signature
sz: nat
Γ: Theory
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
E: evar
exdepth, mudepth: nat
gpi: ProofInfo
pf: Γ ⊢i p <---> q using gpi
IHsz: (ψ : Pattern) (wfψ : well_formed ψ), size' ψ ≤ sz → (EvS : EVarSet) (SvS : SVarSet), ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ p q wfψ wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ ⊆ SvS → Γ ⊢i ψ^[[evar:E↦p]] <---> ψ^[[evar:E↦q]] using gpi
ψ: Pattern
wfψ: well_formed (mu , ψ)
Hsz: S (size' ψ) ≤ S sz
EvS: EVarSet
SvS: SVarSet
i':= ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (mu , ψ))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (mu , ψ))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (mu , ψ)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E (mu , ψ) p q wfψ wfp wfq): ProofInfo
pile: ProofInfoLe i' gpi
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
E_in_EvS: E ∈ EvS
ψ_sub_EvS: free_evars (mu , ψ) ⊆ EvS
p_sub_SvS: free_svars p ⊆ SvS
q_sub_SvS: free_svars q ⊆ SvS
ψ_sub_SvS: free_svars (mu , ψ) ⊆ SvS
HEinψ: E ∈ free_evars ψ
X: svar
HeqX: X = svar_fresh (elements SvS)
frX: X ∉ SvS
H: well_formed ψ^{svar:0↦X} = true
H0: size' ψ^{svar:0↦X} ≤ sz
IH: ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ^{svar:0↦X})), SVSubst := list_to_set (svar_fresh_seq ({[X]} ∪ SvS) (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ^{svar:0↦X})), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ^{svar:0↦X}) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS ({[X]} ∪ SvS) E ψ^{svar:0↦X} p q H wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ^{svar:0↦X} ⊆ EvS → free_svars p ⊆ {[X]} ∪ SvS → free_svars q ⊆ {[X]} ∪ SvS → free_svars ψ^{svar:0↦X} ⊆ {[X]} ∪ SvS → Γ ⊢i ψ^{svar:0↦X}^[[evar:E↦p]] <---> ψ^{svar:0↦X}^[[evar:E↦q]] using gpi
X': svar
H1: X' ∈ free_svars ψ

X' ∈ {[X]} ∪ SvS
Σ: Signature
sz: nat
Γ: Theory
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
E: evar
exdepth, mudepth: nat
gpi: ProofInfo
pf: Γ ⊢i p <---> q using gpi
IHsz: (ψ : Pattern) (wfψ : well_formed ψ), size' ψ ≤ sz → (EvS : EVarSet) (SvS : SVarSet), ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ p q wfψ wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ ⊆ SvS → Γ ⊢i ψ^[[evar:E↦p]] <---> ψ^[[evar:E↦q]] using gpi
ψ: Pattern
wfψ: well_formed (mu , ψ)
Hsz: S (size' ψ) ≤ S sz
EvS: EVarSet
SvS: SVarSet
i':= ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (mu , ψ))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (mu , ψ))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (mu , ψ)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E (mu , ψ) p q wfψ wfp wfq): ProofInfo
pile: ProofInfoLe i' gpi
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
E_in_EvS: E ∈ EvS
ψ_sub_EvS: free_evars (mu , ψ) ⊆ EvS
p_sub_SvS: free_svars p ⊆ SvS
q_sub_SvS: free_svars q ⊆ SvS
ψ_sub_SvS: free_svars (mu , ψ) ⊆ SvS
HEinψ: E ∈ free_evars ψ
X: svar
HeqX: X = svar_fresh (elements SvS)
frX: X ∉ SvS
H: well_formed ψ^{svar:0↦X} = true
H0: size' ψ^{svar:0↦X} ≤ sz
IH: ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ^{svar:0↦X})), SVSubst := list_to_set (svar_fresh_seq ({[X]} ∪ SvS) (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ^{svar:0↦X})), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ^{svar:0↦X}) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS ({[X]} ∪ SvS) E ψ^{svar:0↦X} p q H wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ^{svar:0↦X} ⊆ EvS → free_svars p ⊆ {[X]} ∪ SvS → free_svars q ⊆ {[X]} ∪ SvS → free_svars ψ^{svar:0↦X} ⊆ {[X]} ∪ SvS → Γ ⊢i ψ^{svar:0↦X}^[[evar:E↦p]] <---> ψ^{svar:0↦X}^[[evar:E↦q]] using gpi
X': svar
H1: X' ∈ free_svars ψ

X' ∈ {[X]} ∪ SvS
abstract ( simpl in ψ_sub_SvS; clear -H1 ψ_sub_SvS; set_solver ). }
Σ: Signature
sz: nat
Γ: Theory
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
E: evar
exdepth, mudepth: nat
gpi: ProofInfo
pf: Γ ⊢i p <---> q using gpi
IHsz: (ψ : Pattern) (wfψ : well_formed ψ), size' ψ ≤ sz → (EvS : EVarSet) (SvS : SVarSet), ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ p q wfψ wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ ⊆ SvS → Γ ⊢i ψ^[[evar:E↦p]] <---> ψ^[[evar:E↦q]] using gpi
ψ: Pattern
wfψ: well_formed (mu , ψ)
Hsz: S (size' ψ) ≤ S sz
EvS: EVarSet
SvS: SVarSet
i':= ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (mu , ψ))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (mu , ψ))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (mu , ψ)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E (mu , ψ) p q wfψ wfp wfq): ProofInfo
pile: ProofInfoLe i' gpi
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
E_in_EvS: E ∈ EvS
ψ_sub_EvS: free_evars (mu , ψ) ⊆ EvS
p_sub_SvS: free_svars p ⊆ SvS
q_sub_SvS: free_svars q ⊆ SvS
ψ_sub_SvS: free_svars (mu , ψ) ⊆ SvS
HEinψ: E ∈ free_evars ψ
X: svar
HeqX: X = svar_fresh (elements SvS)
frX: X ∉ SvS
H: well_formed ψ^{svar:0↦X} = true
H0: size' ψ^{svar:0↦X} ≤ sz
IH: Γ ⊢i ψ^{svar:0↦X}^[[evar:E↦p]] <---> ψ^{svar:0↦X}^[[evar:E↦q]] using gpi

Γ ⊢i (mu , ψ^[[evar:E↦p]]) <---> (mu , ψ^[[evar:E↦q]]) using gpi
Σ: Signature
sz: nat
Γ: Theory
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
E: evar
exdepth, mudepth: nat
gpi: ProofInfo
pf: Γ ⊢i p <---> q using gpi
IHsz: (ψ : Pattern) (wfψ : well_formed ψ), size' ψ ≤ sz → (EvS : EVarSet) (SvS : SVarSet), ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ p q wfψ wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ ⊆ SvS → Γ ⊢i ψ^[[evar:E↦p]] <---> ψ^[[evar:E↦q]] using gpi
ψ: Pattern
wfψ: well_formed (mu , ψ)
Hsz: S (size' ψ) ≤ S sz
EvS: EVarSet
SvS: SVarSet
i':= ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (mu , ψ))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (mu , ψ))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (mu , ψ)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E (mu , ψ) p q wfψ wfp wfq): ProofInfo
pile: ProofInfoLe i' gpi
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
E_in_EvS: E ∈ EvS
ψ_sub_EvS: free_evars (mu , ψ) ⊆ EvS
p_sub_SvS: free_svars p ⊆ SvS
q_sub_SvS: free_svars q ⊆ SvS
ψ_sub_SvS: free_svars (mu , ψ) ⊆ SvS
HEinψ: E ∈ free_evars ψ
X: svar
HeqX: X = svar_fresh (elements SvS)
frX: X ∉ SvS
H: well_formed ψ^{svar:0↦X} = true
H0: size' ψ^{svar:0↦X} ≤ sz
IH: Γ ⊢i ψ^[[evar:E↦p]]^[svar:0↦ patt_free_svar X] <---> ψ^[[evar:E↦q]]^[svar:0↦ patt_free_svar X] using gpi

Γ ⊢i (mu , ψ^[[evar:E↦p]]) <---> (mu , ψ^[[evar:E↦q]]) using gpi
Σ: Signature
sz: nat
Γ: Theory
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
E: evar
exdepth, mudepth: nat
gpi: ProofInfo
pf: Γ ⊢i p <---> q using gpi
IHsz: (ψ : Pattern) (wfψ : well_formed ψ), size' ψ ≤ sz → (EvS : EVarSet) (SvS : SVarSet), ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ p q wfψ wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ ⊆ SvS → Γ ⊢i ψ^[[evar:E↦p]] <---> ψ^[[evar:E↦q]] using gpi
ψ: Pattern
wfψ: well_formed (mu , ψ)
Hsz: S (size' ψ) ≤ S sz
EvS: EVarSet
SvS: SVarSet
i':= ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (mu , ψ))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (mu , ψ))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (mu , ψ)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E (mu , ψ) p q wfψ wfp wfq): ProofInfo
pile: ProofInfoLe i' gpi
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
E_in_EvS: E ∈ EvS
ψ_sub_EvS: free_evars (mu , ψ) ⊆ EvS
p_sub_SvS: free_svars p ⊆ SvS
q_sub_SvS: free_svars q ⊆ SvS
ψ_sub_SvS: free_svars (mu , ψ) ⊆ SvS
HEinψ: E ∈ free_evars ψ
X: svar
HeqX: X = svar_fresh (elements SvS)
frX: X ∉ SvS
H: well_formed ψ^{svar:0↦X} = true
H0: size' ψ^{svar:0↦X} ≤ sz
IH: Γ ⊢i ψ^{svar:0↦X}^[[evar:E↦p]] <---> ψ^{svar:0↦X}^[[evar:E↦q]] using gpi
well_formed_closed_mu_aux p 0 = true
Σ: Signature
sz: nat
Γ: Theory
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
E: evar
exdepth, mudepth: nat
gpi: ProofInfo
pf: Γ ⊢i p <---> q using gpi
IHsz: (ψ : Pattern) (wfψ : well_formed ψ), size' ψ ≤ sz → (EvS : EVarSet) (SvS : SVarSet), ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ p q wfψ wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ ⊆ SvS → Γ ⊢i ψ^[[evar:E↦p]] <---> ψ^[[evar:E↦q]] using gpi
ψ: Pattern
wfψ: well_formed (mu , ψ)
Hsz: S (size' ψ) ≤ S sz
EvS: EVarSet
SvS: SVarSet
i':= ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (mu , ψ))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (mu , ψ))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (mu , ψ)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E (mu , ψ) p q wfψ wfp wfq): ProofInfo
pile: ProofInfoLe i' gpi
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
E_in_EvS: E ∈ EvS
ψ_sub_EvS: free_evars (mu , ψ) ⊆ EvS
p_sub_SvS: free_svars p ⊆ SvS
q_sub_SvS: free_svars q ⊆ SvS
ψ_sub_SvS: free_svars (mu , ψ) ⊆ SvS
HEinψ: E ∈ free_evars ψ
X: svar
HeqX: X = svar_fresh (elements SvS)
frX: X ∉ SvS
H: well_formed ψ^{svar:0↦X} = true
H0: size' ψ^{svar:0↦X} ≤ sz
IH: Γ ⊢i ψ^{svar:0↦X}^[[evar:E↦p]] <---> ψ^{svar:0↦X}^[[evar:E↦q]] using gpi
well_formed_closed_mu_aux q 0 = true
Σ: Signature
sz: nat
Γ: Theory
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
E: evar
exdepth, mudepth: nat
gpi: ProofInfo
pf: Γ ⊢i p <---> q using gpi
IHsz: (ψ : Pattern) (wfψ : well_formed ψ), size' ψ ≤ sz → (EvS : EVarSet) (SvS : SVarSet), ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ p q wfψ wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ ⊆ SvS → Γ ⊢i ψ^[[evar:E↦p]] <---> ψ^[[evar:E↦q]] using gpi
ψ: Pattern
wfψ: well_formed (mu , ψ)
Hsz: S (size' ψ) ≤ S sz
EvS: EVarSet
SvS: SVarSet
i':= ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (mu , ψ))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (mu , ψ))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (mu , ψ)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E (mu , ψ) p q wfψ wfp wfq): ProofInfo
pile: ProofInfoLe i' gpi
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
E_in_EvS: E ∈ EvS
ψ_sub_EvS: free_evars (mu , ψ) ⊆ EvS
p_sub_SvS: free_svars p ⊆ SvS
q_sub_SvS: free_svars q ⊆ SvS
ψ_sub_SvS: free_svars (mu , ψ) ⊆ SvS
HEinψ: E ∈ free_evars ψ
X: svar
HeqX: X = svar_fresh (elements SvS)
frX: X ∉ SvS
H: well_formed ψ^{svar:0↦X} = true
H0: size' ψ^{svar:0↦X} ≤ sz
IH: Γ ⊢i ψ^{svar:0↦X}^[[evar:E↦p]] <---> ψ^{svar:0↦X}^[[evar:E↦q]] using gpi

well_formed_closed_mu_aux q 0 = true
Σ: Signature
q: Pattern
wfq: well_formed q

well_formed_closed_mu_aux q 0 = true
Falling back on (well_formed_closed_mu_aux q 0 = true)
Σ: Signature
sz: nat
Γ: Theory
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
E: evar
exdepth, mudepth: nat
gpi: ProofInfo
pf: Γ ⊢i p <---> q using gpi
IHsz: (ψ : Pattern) (wfψ : well_formed ψ), size' ψ ≤ sz → (EvS : EVarSet) (SvS : SVarSet), ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ p q wfψ wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ ⊆ SvS → Γ ⊢i ψ^[[evar:E↦p]] <---> ψ^[[evar:E↦q]] using gpi
ψ: Pattern
wfψ: well_formed (mu , ψ)
Hsz: S (size' ψ) ≤ S sz
EvS: EVarSet
SvS: SVarSet
i':= ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (mu , ψ))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (mu , ψ))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (mu , ψ)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E (mu , ψ) p q wfψ wfp wfq): ProofInfo
pile: ProofInfoLe i' gpi
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
E_in_EvS: E ∈ EvS
ψ_sub_EvS: free_evars (mu , ψ) ⊆ EvS
p_sub_SvS: free_svars p ⊆ SvS
q_sub_SvS: free_svars q ⊆ SvS
ψ_sub_SvS: free_svars (mu , ψ) ⊆ SvS
HEinψ: E ∈ free_evars ψ
X: svar
HeqX: X = svar_fresh (elements SvS)
frX: X ∉ SvS
H: well_formed ψ^{svar:0↦X} = true
H0: size' ψ^{svar:0↦X} ≤ sz
IH: Γ ⊢i ψ^[[evar:E↦p]]^[svar:0↦ patt_free_svar X] <---> ψ^[[evar:E↦q]]^[svar:0↦ patt_free_svar X] using gpi

Γ ⊢i (mu , ψ^[[evar:E↦p]]) <---> (mu , ψ^[[evar:E↦q]]) using gpi
Σ: Signature
sz: nat
Γ: Theory
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
E: evar
exdepth, mudepth: nat
gpi: ProofInfo
pf: Γ ⊢i p <---> q using gpi
IHsz: (ψ : Pattern) (wfψ : well_formed ψ), size' ψ ≤ sz → (EvS : EVarSet) (SvS : SVarSet), ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ p q wfψ wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ ⊆ SvS → Γ ⊢i ψ^[[evar:E↦p]] <---> ψ^[[evar:E↦q]] using gpi
ψ: Pattern
wfψ: well_formed (mu , ψ)
Hsz: S (size' ψ) ≤ S sz
EvS: EVarSet
SvS: SVarSet
i':= ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (mu , ψ))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (mu , ψ))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (mu , ψ)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E (mu , ψ) p q wfψ wfp wfq): ProofInfo
pile: ProofInfoLe i' gpi
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
E_in_EvS: E ∈ EvS
ψ_sub_EvS: free_evars (mu , ψ) ⊆ EvS
p_sub_SvS: free_svars p ⊆ SvS
q_sub_SvS: free_svars q ⊆ SvS
ψ_sub_SvS: free_svars (mu , ψ) ⊆ SvS
HEinψ: E ∈ free_evars ψ
X: svar
HeqX: X = svar_fresh (elements SvS)
frX: X ∉ SvS
H: well_formed ψ^{svar:0↦X} = true
H0: size' ψ^{svar:0↦X} ≤ sz
IH: Γ ⊢i ψ^{svar:0↦X}^[[evar:E↦p]] <---> ψ^{svar:0↦X}^[[evar:E↦q]] using gpi
well_formed_closed_mu_aux p 0 = true
Σ: Signature
sz: nat
Γ: Theory
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
E: evar
exdepth, mudepth: nat
gpi: ProofInfo
pf: Γ ⊢i p <---> q using gpi
IHsz: (ψ : Pattern) (wfψ : well_formed ψ), size' ψ ≤ sz → (EvS : EVarSet) (SvS : SVarSet), ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ p q wfψ wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ ⊆ SvS → Γ ⊢i ψ^[[evar:E↦p]] <---> ψ^[[evar:E↦q]] using gpi
ψ: Pattern
wfψ: well_formed (mu , ψ)
Hsz: S (size' ψ) ≤ S sz
EvS: EVarSet
SvS: SVarSet
i':= ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (mu , ψ))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (mu , ψ))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (mu , ψ)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E (mu , ψ) p q wfψ wfp wfq): ProofInfo
pile: ProofInfoLe i' gpi
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
E_in_EvS: E ∈ EvS
ψ_sub_EvS: free_evars (mu , ψ) ⊆ EvS
p_sub_SvS: free_svars p ⊆ SvS
q_sub_SvS: free_svars q ⊆ SvS
ψ_sub_SvS: free_svars (mu , ψ) ⊆ SvS
HEinψ: E ∈ free_evars ψ
X: svar
HeqX: X = svar_fresh (elements SvS)
frX: X ∉ SvS
H: well_formed ψ^{svar:0↦X} = true
H0: size' ψ^{svar:0↦X} ≤ sz
IH: Γ ⊢i ψ^{svar:0↦X}^[[evar:E↦p]] <---> ψ^{svar:0↦X}^[[evar:E↦q]] using gpi

well_formed_closed_mu_aux p 0 = true
Σ: Signature
p: Pattern
wfp: well_formed p

well_formed_closed_mu_aux p 0 = true
Falling back on (well_formed_closed_mu_aux p 0 = true)
Σ: Signature
sz: nat
Γ: Theory
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
E: evar
exdepth, mudepth: nat
gpi: ProofInfo
pf: Γ ⊢i p <---> q using gpi
IHsz: (ψ : Pattern) (wfψ : well_formed ψ), size' ψ ≤ sz → (EvS : EVarSet) (SvS : SVarSet), ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ p q wfψ wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ ⊆ SvS → Γ ⊢i ψ^[[evar:E↦p]] <---> ψ^[[evar:E↦q]] using gpi
ψ: Pattern
wfψ: well_formed (mu , ψ)
Hsz: S (size' ψ) ≤ S sz
EvS: EVarSet
SvS: SVarSet
i':= ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (mu , ψ))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (mu , ψ))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (mu , ψ)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E (mu , ψ) p q wfψ wfp wfq): ProofInfo
pile: ProofInfoLe i' gpi
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
E_in_EvS: E ∈ EvS
ψ_sub_EvS: free_evars (mu , ψ) ⊆ EvS
p_sub_SvS: free_svars p ⊆ SvS
q_sub_SvS: free_svars q ⊆ SvS
ψ_sub_SvS: free_svars (mu , ψ) ⊆ SvS
HEinψ: E ∈ free_evars ψ
X: svar
HeqX: X = svar_fresh (elements SvS)
frX: X ∉ SvS
H: well_formed ψ^{svar:0↦X} = true
H0: size' ψ^{svar:0↦X} ≤ sz
IH: Γ ⊢i ψ^[[evar:E↦p]]^[svar:0↦ patt_free_svar X] <---> ψ^[[evar:E↦q]]^[svar:0↦ patt_free_svar X] using gpi

Γ ⊢i (mu , ψ^[[evar:E↦p]]) <---> (mu , ψ^[[evar:E↦q]]) using gpi
Σ: Signature
sz: nat
Γ: Theory
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
E: evar
exdepth, mudepth: nat
gpi: ProofInfo
pf: Γ ⊢i p <---> q using gpi
IHsz: (ψ : Pattern) (wfψ : well_formed ψ), size' ψ ≤ sz → (EvS : EVarSet) (SvS : SVarSet), ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ p q wfψ wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ ⊆ SvS → Γ ⊢i ψ^[[evar:E↦p]] <---> ψ^[[evar:E↦q]] using gpi
ψ: Pattern
wfψ: well_formed (mu , ψ)
Hsz: S (size' ψ) ≤ S sz
EvS: EVarSet
SvS: SVarSet
i':= ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (mu , ψ))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (mu , ψ))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (mu , ψ)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E (mu , ψ) p q wfψ wfp wfq): ProofInfo
pile: ProofInfoLe i' gpi
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
E_in_EvS: E ∈ EvS
ψ_sub_EvS: free_evars (mu , ψ) ⊆ EvS
p_sub_SvS: free_svars p ⊆ SvS
q_sub_SvS: free_svars q ⊆ SvS
ψ_sub_SvS: free_svars (mu , ψ) ⊆ SvS
HEinψ: E ∈ free_evars ψ
X: svar
HeqX: X = svar_fresh (elements SvS)
frX: X ∉ SvS
H: well_formed ψ^{svar:0↦X} = true
H0: size' ψ^{svar:0↦X} ≤ sz
IH: Γ ⊢i ψ^[[evar:E↦p]]^[svar:0↦ patt_free_svar X] <---> ψ^[[evar:E↦q]]^[svar:0↦ patt_free_svar X] using gpi

well_formed ψ^[[evar:E↦p]]^[svar:0↦patt_free_svar X]
Σ: Signature
sz: nat
Γ: Theory
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
E: evar
exdepth, mudepth: nat
gpi: ProofInfo
pf: Γ ⊢i p <---> q using gpi
IHsz: (ψ : Pattern) (wfψ : well_formed ψ), size' ψ ≤ sz → (EvS : EVarSet) (SvS : SVarSet), ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ p q wfψ wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ ⊆ SvS → Γ ⊢i ψ^[[evar:E↦p]] <---> ψ^[[evar:E↦q]] using gpi
ψ: Pattern
wfψ: well_formed (mu , ψ)
Hsz: S (size' ψ) ≤ S sz
EvS: EVarSet
SvS: SVarSet
i':= ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (mu , ψ))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (mu , ψ))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (mu , ψ)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E (mu , ψ) p q wfψ wfp wfq): ProofInfo
pile: ProofInfoLe i' gpi
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
E_in_EvS: E ∈ EvS
ψ_sub_EvS: free_evars (mu , ψ) ⊆ EvS
p_sub_SvS: free_svars p ⊆ SvS
q_sub_SvS: free_svars q ⊆ SvS
ψ_sub_SvS: free_svars (mu , ψ) ⊆ SvS
HEinψ: E ∈ free_evars ψ
X: svar
HeqX: X = svar_fresh (elements SvS)
frX: X ∉ SvS
H: well_formed ψ^{svar:0↦X} = true
H0: size' ψ^{svar:0↦X} ≤ sz
IH: Γ ⊢i ψ^[[evar:E↦p]]^[svar:0↦ patt_free_svar X] <---> ψ^[[evar:E↦q]]^[svar:0↦ patt_free_svar X] using gpi
well_formed ψ^[[evar:E↦q]]^[svar:0↦patt_free_svar X]
Σ: Signature
sz: nat
Γ: Theory
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
E: evar
exdepth, mudepth: nat
gpi: ProofInfo
pf: Γ ⊢i p <---> q using gpi
IHsz: (ψ : Pattern) (wfψ : well_formed ψ), size' ψ ≤ sz → (EvS : EVarSet) (SvS : SVarSet), ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ p q wfψ wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ ⊆ SvS → Γ ⊢i ψ^[[evar:E↦p]] <---> ψ^[[evar:E↦q]] using gpi
ψ: Pattern
wfψ: well_formed (mu , ψ)
Hsz: S (size' ψ) ≤ S sz
EvS: EVarSet
SvS: SVarSet
i':= ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (mu , ψ))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (mu , ψ))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (mu , ψ)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E (mu , ψ) p q wfψ wfp wfq): ProofInfo
pile: ProofInfoLe i' gpi
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
E_in_EvS: E ∈ EvS
ψ_sub_EvS: free_evars (mu , ψ) ⊆ EvS
p_sub_SvS: free_svars p ⊆ SvS
q_sub_SvS: free_svars q ⊆ SvS
ψ_sub_SvS: free_svars (mu , ψ) ⊆ SvS
HEinψ: E ∈ free_evars ψ
X: svar
HeqX: X = svar_fresh (elements SvS)
frX: X ∉ SvS
H: well_formed ψ^{svar:0↦X} = true
H0: size' ψ^{svar:0↦X} ≤ sz
IH: Γ ⊢i ψ^[[evar:E↦p]]^[svar:0↦ patt_free_svar X] <---> ψ^[[evar:E↦q]]^[svar:0↦ patt_free_svar X] using gpi
IH1: Γ ⊢i ψ^[[evar:E↦p]]^[svar:0↦ patt_free_svar X] ---> ψ^[[evar:E↦q]]^[svar:0↦ patt_free_svar X] using gpi
Γ ⊢i (mu , ψ^[[evar:E↦p]]) <---> (mu , ψ^[[evar:E↦q]]) using gpi
Σ: Signature
sz: nat
Γ: Theory
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
E: evar
exdepth, mudepth: nat
gpi: ProofInfo
pf: Γ ⊢i p <---> q using gpi
IHsz: (ψ : Pattern) (wfψ : well_formed ψ), size' ψ ≤ sz → (EvS : EVarSet) (SvS : SVarSet), ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ p q wfψ wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ ⊆ SvS → Γ ⊢i ψ^[[evar:E↦p]] <---> ψ^[[evar:E↦q]] using gpi
ψ: Pattern
wfψ: well_formed (mu , ψ)
Hsz: S (size' ψ) ≤ S sz
EvS: EVarSet
SvS: SVarSet
i':= ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (mu , ψ))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (mu , ψ))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (mu , ψ)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E (mu , ψ) p q wfψ wfp wfq): ProofInfo
pile: ProofInfoLe i' gpi
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
E_in_EvS: E ∈ EvS
ψ_sub_EvS: free_evars (mu , ψ) ⊆ EvS
p_sub_SvS: free_svars p ⊆ SvS
q_sub_SvS: free_svars q ⊆ SvS
ψ_sub_SvS: free_svars (mu , ψ) ⊆ SvS
HEinψ: E ∈ free_evars ψ
X: svar
HeqX: X = svar_fresh (elements SvS)
frX: X ∉ SvS
H: well_formed ψ^{svar:0↦X} = true
H0: size' ψ^{svar:0↦X} ≤ sz
IH: Γ ⊢i ψ^[[evar:E↦p]]^[svar:0↦ patt_free_svar X] <---> ψ^[[evar:E↦q]]^[svar:0↦ patt_free_svar X] using gpi

well_formed ψ^[[evar:E↦p]]^[svar:0↦patt_free_svar X]
Σ: Signature
p: Pattern
wfp: well_formed p
E: evar
ψ: Pattern
wfψ: well_formed (mu , ψ)
X: svar

well_formed ψ^[[evar:E↦p]]^[svar:0↦patt_free_svar X]
Falling back on (well_formed_xy 0 0 ψ^[[evar:E↦p]]^[svar:0↦patt_free_svar X] = true)
Σ: Signature
sz: nat
Γ: Theory
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
E: evar
exdepth, mudepth: nat
gpi: ProofInfo
pf: Γ ⊢i p <---> q using gpi
IHsz: (ψ : Pattern) (wfψ : well_formed ψ), size' ψ ≤ sz → (EvS : EVarSet) (SvS : SVarSet), ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ p q wfψ wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ ⊆ SvS → Γ ⊢i ψ^[[evar:E↦p]] <---> ψ^[[evar:E↦q]] using gpi
ψ: Pattern
wfψ: well_formed (mu , ψ)
Hsz: S (size' ψ) ≤ S sz
EvS: EVarSet
SvS: SVarSet
i':= ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (mu , ψ))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (mu , ψ))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (mu , ψ)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E (mu , ψ) p q wfψ wfp wfq): ProofInfo
pile: ProofInfoLe i' gpi
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
E_in_EvS: E ∈ EvS
ψ_sub_EvS: free_evars (mu , ψ) ⊆ EvS
p_sub_SvS: free_svars p ⊆ SvS
q_sub_SvS: free_svars q ⊆ SvS
ψ_sub_SvS: free_svars (mu , ψ) ⊆ SvS
HEinψ: E ∈ free_evars ψ
X: svar
HeqX: X = svar_fresh (elements SvS)
frX: X ∉ SvS
H: well_formed ψ^{svar:0↦X} = true
H0: size' ψ^{svar:0↦X} ≤ sz
IH: Γ ⊢i ψ^[[evar:E↦p]]^[svar:0↦ patt_free_svar X] <---> ψ^[[evar:E↦q]]^[svar:0↦ patt_free_svar X] using gpi

well_formed ψ^[[evar:E↦q]]^[svar:0↦patt_free_svar X]
Σ: Signature
sz: nat
Γ: Theory
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
E: evar
exdepth, mudepth: nat
gpi: ProofInfo
pf: Γ ⊢i p <---> q using gpi
IHsz: (ψ : Pattern) (wfψ : well_formed ψ), size' ψ ≤ sz → (EvS : EVarSet) (SvS : SVarSet), ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ p q wfψ wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ ⊆ SvS → Γ ⊢i ψ^[[evar:E↦p]] <---> ψ^[[evar:E↦q]] using gpi
ψ: Pattern
wfψ: well_formed (mu , ψ)
Hsz: S (size' ψ) ≤ S sz
EvS: EVarSet
SvS: SVarSet
i':= ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (mu , ψ))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (mu , ψ))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (mu , ψ)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E (mu , ψ) p q wfψ wfp wfq): ProofInfo
pile: ProofInfoLe i' gpi
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
E_in_EvS: E ∈ EvS
ψ_sub_EvS: free_evars (mu , ψ) ⊆ EvS
p_sub_SvS: free_svars p ⊆ SvS
q_sub_SvS: free_svars q ⊆ SvS
ψ_sub_SvS: free_svars (mu , ψ) ⊆ SvS
HEinψ: E ∈ free_evars ψ
X: svar
HeqX: X = svar_fresh (elements SvS)
frX: X ∉ SvS
H: well_formed ψ^{svar:0↦X} = true
H0: size' ψ^{svar:0↦X} ≤ sz
IH: Γ ⊢i ψ^[[evar:E↦p]]^[svar:0↦ patt_free_svar X] <---> ψ^[[evar:E↦q]]^[svar:0↦ patt_free_svar X] using gpi
IH1: Γ ⊢i ψ^[[evar:E↦p]]^[svar:0↦ patt_free_svar X] ---> ψ^[[evar:E↦q]]^[svar:0↦ patt_free_svar X] using gpi
Γ ⊢i (mu , ψ^[[evar:E↦p]]) <---> (mu , ψ^[[evar:E↦q]]) using gpi
Σ: Signature
sz: nat
Γ: Theory
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
E: evar
exdepth, mudepth: nat
gpi: ProofInfo
pf: Γ ⊢i p <---> q using gpi
IHsz: (ψ : Pattern) (wfψ : well_formed ψ), size' ψ ≤ sz → (EvS : EVarSet) (SvS : SVarSet), ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ p q wfψ wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ ⊆ SvS → Γ ⊢i ψ^[[evar:E↦p]] <---> ψ^[[evar:E↦q]] using gpi
ψ: Pattern
wfψ: well_formed (mu , ψ)
Hsz: S (size' ψ) ≤ S sz
EvS: EVarSet
SvS: SVarSet
i':= ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (mu , ψ))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (mu , ψ))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (mu , ψ)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E (mu , ψ) p q wfψ wfp wfq): ProofInfo
pile: ProofInfoLe i' gpi
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
E_in_EvS: E ∈ EvS
ψ_sub_EvS: free_evars (mu , ψ) ⊆ EvS
p_sub_SvS: free_svars p ⊆ SvS
q_sub_SvS: free_svars q ⊆ SvS
ψ_sub_SvS: free_svars (mu , ψ) ⊆ SvS
HEinψ: E ∈ free_evars ψ
X: svar
HeqX: X = svar_fresh (elements SvS)
frX: X ∉ SvS
H: well_formed ψ^{svar:0↦X} = true
H0: size' ψ^{svar:0↦X} ≤ sz
IH: Γ ⊢i ψ^[[evar:E↦p]]^[svar:0↦ patt_free_svar X] <---> ψ^[[evar:E↦q]]^[svar:0↦ patt_free_svar X] using gpi

well_formed ψ^[[evar:E↦q]]^[svar:0↦patt_free_svar X]
Σ: Signature
q: Pattern
wfq: well_formed q
E: evar
ψ: Pattern
wfψ: well_formed (mu , ψ)
X: svar

well_formed ψ^[[evar:E↦q]]^[svar:0↦patt_free_svar X]
Falling back on (well_formed_xy 0 0 ψ^[[evar:E↦q]]^[svar:0↦patt_free_svar X] = true)
Σ: Signature
sz: nat
Γ: Theory
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
E: evar
exdepth, mudepth: nat
gpi: ProofInfo
pf: Γ ⊢i p <---> q using gpi
IHsz: (ψ : Pattern) (wfψ : well_formed ψ), size' ψ ≤ sz → (EvS : EVarSet) (SvS : SVarSet), ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ p q wfψ wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ ⊆ SvS → Γ ⊢i ψ^[[evar:E↦p]] <---> ψ^[[evar:E↦q]] using gpi
ψ: Pattern
wfψ: well_formed (mu , ψ)
Hsz: S (size' ψ) ≤ S sz
EvS: EVarSet
SvS: SVarSet
i':= ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (mu , ψ))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (mu , ψ))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (mu , ψ)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E (mu , ψ) p q wfψ wfp wfq): ProofInfo
pile: ProofInfoLe i' gpi
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
E_in_EvS: E ∈ EvS
ψ_sub_EvS: free_evars (mu , ψ) ⊆ EvS
p_sub_SvS: free_svars p ⊆ SvS
q_sub_SvS: free_svars q ⊆ SvS
ψ_sub_SvS: free_svars (mu , ψ) ⊆ SvS
HEinψ: E ∈ free_evars ψ
X: svar
HeqX: X = svar_fresh (elements SvS)
frX: X ∉ SvS
H: well_formed ψ^{svar:0↦X} = true
H0: size' ψ^{svar:0↦X} ≤ sz
IH: Γ ⊢i ψ^[[evar:E↦p]]^[svar:0↦ patt_free_svar X] <---> ψ^[[evar:E↦q]]^[svar:0↦ patt_free_svar X] using gpi
IH1: Γ ⊢i ψ^[[evar:E↦p]]^[svar:0↦ patt_free_svar X] ---> ψ^[[evar:E↦q]]^[svar:0↦ patt_free_svar X] using gpi

Γ ⊢i (mu , ψ^[[evar:E↦p]]) <---> (mu , ψ^[[evar:E↦q]]) using gpi
Σ: Signature
sz: nat
Γ: Theory
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
E: evar
exdepth, mudepth: nat
gpi: ProofInfo
pf: Γ ⊢i p <---> q using gpi
IHsz: (ψ : Pattern) (wfψ : well_formed ψ), size' ψ ≤ sz → (EvS : EVarSet) (SvS : SVarSet), ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ p q wfψ wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ ⊆ SvS → Γ ⊢i ψ^[[evar:E↦p]] <---> ψ^[[evar:E↦q]] using gpi
ψ: Pattern
wfψ: well_formed (mu , ψ)
Hsz: S (size' ψ) ≤ S sz
EvS: EVarSet
SvS: SVarSet
i':= ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (mu , ψ))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (mu , ψ))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (mu , ψ)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E (mu , ψ) p q wfψ wfp wfq): ProofInfo
pile: ProofInfoLe i' gpi
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
E_in_EvS: E ∈ EvS
ψ_sub_EvS: free_evars (mu , ψ) ⊆ EvS
p_sub_SvS: free_svars p ⊆ SvS
q_sub_SvS: free_svars q ⊆ SvS
ψ_sub_SvS: free_svars (mu , ψ) ⊆ SvS
HEinψ: E ∈ free_evars ψ
X: svar
HeqX: X = svar_fresh (elements SvS)
frX: X ∉ SvS
H: well_formed ψ^{svar:0↦X} = true
H0: size' ψ^{svar:0↦X} ≤ sz
IH: Γ ⊢i ψ^[[evar:E↦p]]^[svar:0↦ patt_free_svar X] <---> ψ^[[evar:E↦q]]^[svar:0↦ patt_free_svar X] using gpi
IH1: Γ ⊢i ψ^[[evar:E↦p]]^[svar:0↦ patt_free_svar X] ---> ψ^[[evar:E↦q]]^[svar:0↦ patt_free_svar X] using gpi

well_formed ψ^[[evar:E↦p]]^[svar:0↦patt_free_svar X]
Σ: Signature
sz: nat
Γ: Theory
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
E: evar
exdepth, mudepth: nat
gpi: ProofInfo
pf: Γ ⊢i p <---> q using gpi
IHsz: (ψ : Pattern) (wfψ : well_formed ψ), size' ψ ≤ sz → (EvS : EVarSet) (SvS : SVarSet), ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ p q wfψ wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ ⊆ SvS → Γ ⊢i ψ^[[evar:E↦p]] <---> ψ^[[evar:E↦q]] using gpi
ψ: Pattern
wfψ: well_formed (mu , ψ)
Hsz: S (size' ψ) ≤ S sz
EvS: EVarSet
SvS: SVarSet
i':= ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (mu , ψ))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (mu , ψ))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (mu , ψ)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E (mu , ψ) p q wfψ wfp wfq): ProofInfo
pile: ProofInfoLe i' gpi
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
E_in_EvS: E ∈ EvS
ψ_sub_EvS: free_evars (mu , ψ) ⊆ EvS
p_sub_SvS: free_svars p ⊆ SvS
q_sub_SvS: free_svars q ⊆ SvS
ψ_sub_SvS: free_svars (mu , ψ) ⊆ SvS
HEinψ: E ∈ free_evars ψ
X: svar
HeqX: X = svar_fresh (elements SvS)
frX: X ∉ SvS
H: well_formed ψ^{svar:0↦X} = true
H0: size' ψ^{svar:0↦X} ≤ sz
IH: Γ ⊢i ψ^[[evar:E↦p]]^[svar:0↦ patt_free_svar X] <---> ψ^[[evar:E↦q]]^[svar:0↦ patt_free_svar X] using gpi
IH1: Γ ⊢i ψ^[[evar:E↦p]]^[svar:0↦ patt_free_svar X] ---> ψ^[[evar:E↦q]]^[svar:0↦ patt_free_svar X] using gpi
well_formed ψ^[[evar:E↦q]]^[svar:0↦patt_free_svar X]
Σ: Signature
sz: nat
Γ: Theory
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
E: evar
exdepth, mudepth: nat
gpi: ProofInfo
pf: Γ ⊢i p <---> q using gpi
IHsz: (ψ : Pattern) (wfψ : well_formed ψ), size' ψ ≤ sz → (EvS : EVarSet) (SvS : SVarSet), ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ p q wfψ wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ ⊆ SvS → Γ ⊢i ψ^[[evar:E↦p]] <---> ψ^[[evar:E↦q]] using gpi
ψ: Pattern
wfψ: well_formed (mu , ψ)
Hsz: S (size' ψ) ≤ S sz
EvS: EVarSet
SvS: SVarSet
i':= ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (mu , ψ))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (mu , ψ))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (mu , ψ)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E (mu , ψ) p q wfψ wfp wfq): ProofInfo
pile: ProofInfoLe i' gpi
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
E_in_EvS: E ∈ EvS
ψ_sub_EvS: free_evars (mu , ψ) ⊆ EvS
p_sub_SvS: free_svars p ⊆ SvS
q_sub_SvS: free_svars q ⊆ SvS
ψ_sub_SvS: free_svars (mu , ψ) ⊆ SvS
HEinψ: E ∈ free_evars ψ
X: svar
HeqX: X = svar_fresh (elements SvS)
frX: X ∉ SvS
H: well_formed ψ^{svar:0↦X} = true
H0: size' ψ^{svar:0↦X} ≤ sz
IH: Γ ⊢i ψ^[[evar:E↦p]]^[svar:0↦ patt_free_svar X] <---> ψ^[[evar:E↦q]]^[svar:0↦ patt_free_svar X] using gpi
IH1: Γ ⊢i ψ^[[evar:E↦p]]^[svar:0↦ patt_free_svar X] ---> ψ^[[evar:E↦q]]^[svar:0↦ patt_free_svar X] using gpi
IH2: Γ ⊢i ψ^[[evar:E↦q]]^[svar:0↦ patt_free_svar X] ---> ψ^[[evar:E↦p]]^[svar:0↦ patt_free_svar X] using gpi
Γ ⊢i (mu , ψ^[[evar:E↦p]]) <---> (mu , ψ^[[evar:E↦q]]) using gpi
Σ: Signature
sz: nat
Γ: Theory
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
E: evar
exdepth, mudepth: nat
gpi: ProofInfo
pf: Γ ⊢i p <---> q using gpi
IHsz: (ψ : Pattern) (wfψ : well_formed ψ), size' ψ ≤ sz → (EvS : EVarSet) (SvS : SVarSet), ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ p q wfψ wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ ⊆ SvS → Γ ⊢i ψ^[[evar:E↦p]] <---> ψ^[[evar:E↦q]] using gpi
ψ: Pattern
wfψ: well_formed (mu , ψ)
Hsz: S (size' ψ) ≤ S sz
EvS: EVarSet
SvS: SVarSet
i':= ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (mu , ψ))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (mu , ψ))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (mu , ψ)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E (mu , ψ) p q wfψ wfp wfq): ProofInfo
pile: ProofInfoLe i' gpi
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
E_in_EvS: E ∈ EvS
ψ_sub_EvS: free_evars (mu , ψ) ⊆ EvS
p_sub_SvS: free_svars p ⊆ SvS
q_sub_SvS: free_svars q ⊆ SvS
ψ_sub_SvS: free_svars (mu , ψ) ⊆ SvS
HEinψ: E ∈ free_evars ψ
X: svar
HeqX: X = svar_fresh (elements SvS)
frX: X ∉ SvS
H: well_formed ψ^{svar:0↦X} = true
H0: size' ψ^{svar:0↦X} ≤ sz
IH: Γ ⊢i ψ^[[evar:E↦p]]^[svar:0↦ patt_free_svar X] <---> ψ^[[evar:E↦q]]^[svar:0↦ patt_free_svar X] using gpi
IH1: Γ ⊢i ψ^[[evar:E↦p]]^[svar:0↦ patt_free_svar X] ---> ψ^[[evar:E↦q]]^[svar:0↦ patt_free_svar X] using gpi

well_formed ψ^[[evar:E↦p]]^[svar:0↦patt_free_svar X]
Σ: Signature
p: Pattern
wfp: well_formed p
E: evar
ψ: Pattern
wfψ: well_formed (mu , ψ)
X: svar

well_formed ψ^[[evar:E↦p]]^[svar:0↦patt_free_svar X]
Falling back on (well_formed_xy 0 0 ψ^[[evar:E↦p]]^[svar:0↦patt_free_svar X] = true)
Σ: Signature
sz: nat
Γ: Theory
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
E: evar
exdepth, mudepth: nat
gpi: ProofInfo
pf: Γ ⊢i p <---> q using gpi
IHsz: (ψ : Pattern) (wfψ : well_formed ψ), size' ψ ≤ sz → (EvS : EVarSet) (SvS : SVarSet), ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ p q wfψ wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ ⊆ SvS → Γ ⊢i ψ^[[evar:E↦p]] <---> ψ^[[evar:E↦q]] using gpi
ψ: Pattern
wfψ: well_formed (mu , ψ)
Hsz: S (size' ψ) ≤ S sz
EvS: EVarSet
SvS: SVarSet
i':= ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (mu , ψ))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (mu , ψ))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (mu , ψ)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E (mu , ψ) p q wfψ wfp wfq): ProofInfo
pile: ProofInfoLe i' gpi
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
E_in_EvS: E ∈ EvS
ψ_sub_EvS: free_evars (mu , ψ) ⊆ EvS
p_sub_SvS: free_svars p ⊆ SvS
q_sub_SvS: free_svars q ⊆ SvS
ψ_sub_SvS: free_svars (mu , ψ) ⊆ SvS
HEinψ: E ∈ free_evars ψ
X: svar
HeqX: X = svar_fresh (elements SvS)
frX: X ∉ SvS
H: well_formed ψ^{svar:0↦X} = true
H0: size' ψ^{svar:0↦X} ≤ sz
IH: Γ ⊢i ψ^[[evar:E↦p]]^[svar:0↦ patt_free_svar X] <---> ψ^[[evar:E↦q]]^[svar:0↦ patt_free_svar X] using gpi
IH1: Γ ⊢i ψ^[[evar:E↦p]]^[svar:0↦ patt_free_svar X] ---> ψ^[[evar:E↦q]]^[svar:0↦ patt_free_svar X] using gpi

well_formed ψ^[[evar:E↦q]]^[svar:0↦patt_free_svar X]
Σ: Signature
sz: nat
Γ: Theory
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
E: evar
exdepth, mudepth: nat
gpi: ProofInfo
pf: Γ ⊢i p <---> q using gpi
IHsz: (ψ : Pattern) (wfψ : well_formed ψ), size' ψ ≤ sz → (EvS : EVarSet) (SvS : SVarSet), ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ p q wfψ wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ ⊆ SvS → Γ ⊢i ψ^[[evar:E↦p]] <---> ψ^[[evar:E↦q]] using gpi
ψ: Pattern
wfψ: well_formed (mu , ψ)
Hsz: S (size' ψ) ≤ S sz
EvS: EVarSet
SvS: SVarSet
i':= ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (mu , ψ))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (mu , ψ))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (mu , ψ)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E (mu , ψ) p q wfψ wfp wfq): ProofInfo
pile: ProofInfoLe i' gpi
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
E_in_EvS: E ∈ EvS
ψ_sub_EvS: free_evars (mu , ψ) ⊆ EvS
p_sub_SvS: free_svars p ⊆ SvS
q_sub_SvS: free_svars q ⊆ SvS
ψ_sub_SvS: free_svars (mu , ψ) ⊆ SvS
HEinψ: E ∈ free_evars ψ
X: svar
HeqX: X = svar_fresh (elements SvS)
frX: X ∉ SvS
H: well_formed ψ^{svar:0↦X} = true
H0: size' ψ^{svar:0↦X} ≤ sz
IH: Γ ⊢i ψ^[[evar:E↦p]]^[svar:0↦ patt_free_svar X] <---> ψ^[[evar:E↦q]]^[svar:0↦ patt_free_svar X] using gpi
IH1: Γ ⊢i ψ^[[evar:E↦p]]^[svar:0↦ patt_free_svar X] ---> ψ^[[evar:E↦q]]^[svar:0↦ patt_free_svar X] using gpi
IH2: Γ ⊢i ψ^[[evar:E↦q]]^[svar:0↦ patt_free_svar X] ---> ψ^[[evar:E↦p]]^[svar:0↦ patt_free_svar X] using gpi
Γ ⊢i (mu , ψ^[[evar:E↦p]]) <---> (mu , ψ^[[evar:E↦q]]) using gpi
Σ: Signature
sz: nat
Γ: Theory
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
E: evar
exdepth, mudepth: nat
gpi: ProofInfo
pf: Γ ⊢i p <---> q using gpi
IHsz: (ψ : Pattern) (wfψ : well_formed ψ), size' ψ ≤ sz → (EvS : EVarSet) (SvS : SVarSet), ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ p q wfψ wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ ⊆ SvS → Γ ⊢i ψ^[[evar:E↦p]] <---> ψ^[[evar:E↦q]] using gpi
ψ: Pattern
wfψ: well_formed (mu , ψ)
Hsz: S (size' ψ) ≤ S sz
EvS: EVarSet
SvS: SVarSet
i':= ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (mu , ψ))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (mu , ψ))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (mu , ψ)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E (mu , ψ) p q wfψ wfp wfq): ProofInfo
pile: ProofInfoLe i' gpi
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
E_in_EvS: E ∈ EvS
ψ_sub_EvS: free_evars (mu , ψ) ⊆ EvS
p_sub_SvS: free_svars p ⊆ SvS
q_sub_SvS: free_svars q ⊆ SvS
ψ_sub_SvS: free_svars (mu , ψ) ⊆ SvS
HEinψ: E ∈ free_evars ψ
X: svar
HeqX: X = svar_fresh (elements SvS)
frX: X ∉ SvS
H: well_formed ψ^{svar:0↦X} = true
H0: size' ψ^{svar:0↦X} ≤ sz
IH: Γ ⊢i ψ^[[evar:E↦p]]^[svar:0↦ patt_free_svar X] <---> ψ^[[evar:E↦q]]^[svar:0↦ patt_free_svar X] using gpi
IH1: Γ ⊢i ψ^[[evar:E↦p]]^[svar:0↦ patt_free_svar X] ---> ψ^[[evar:E↦q]]^[svar:0↦ patt_free_svar X] using gpi

well_formed ψ^[[evar:E↦q]]^[svar:0↦patt_free_svar X]
Σ: Signature
q: Pattern
wfq: well_formed q
E: evar
ψ: Pattern
wfψ: well_formed (mu , ψ)
X: svar

well_formed ψ^[[evar:E↦q]]^[svar:0↦patt_free_svar X]
Falling back on (well_formed_xy 0 0 ψ^[[evar:E↦q]]^[svar:0↦patt_free_svar X] = true)
Σ: Signature
sz: nat
Γ: Theory
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
E: evar
exdepth, mudepth: nat
gpi: ProofInfo
pf: Γ ⊢i p <---> q using gpi
IHsz: (ψ : Pattern) (wfψ : well_formed ψ), size' ψ ≤ sz → (EvS : EVarSet) (SvS : SVarSet), ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ p q wfψ wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ ⊆ SvS → Γ ⊢i ψ^[[evar:E↦p]] <---> ψ^[[evar:E↦q]] using gpi
ψ: Pattern
wfψ: well_formed (mu , ψ)
Hsz: S (size' ψ) ≤ S sz
EvS: EVarSet
SvS: SVarSet
i':= ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (mu , ψ))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (mu , ψ))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (mu , ψ)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E (mu , ψ) p q wfψ wfp wfq): ProofInfo
pile: ProofInfoLe i' gpi
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
E_in_EvS: E ∈ EvS
ψ_sub_EvS: free_evars (mu , ψ) ⊆ EvS
p_sub_SvS: free_svars p ⊆ SvS
q_sub_SvS: free_svars q ⊆ SvS
ψ_sub_SvS: free_svars (mu , ψ) ⊆ SvS
HEinψ: E ∈ free_evars ψ
X: svar
HeqX: X = svar_fresh (elements SvS)
frX: X ∉ SvS
H: well_formed ψ^{svar:0↦X} = true
H0: size' ψ^{svar:0↦X} ≤ sz
IH: Γ ⊢i ψ^[[evar:E↦p]]^[svar:0↦ patt_free_svar X] <---> ψ^[[evar:E↦q]]^[svar:0↦ patt_free_svar X] using gpi
IH1: Γ ⊢i ψ^[[evar:E↦p]]^[svar:0↦ patt_free_svar X] ---> ψ^[[evar:E↦q]]^[svar:0↦ patt_free_svar X] using gpi
IH2: Γ ⊢i ψ^[[evar:E↦q]]^[svar:0↦ patt_free_svar X] ---> ψ^[[evar:E↦p]]^[svar:0↦ patt_free_svar X] using gpi

Γ ⊢i (mu , ψ^[[evar:E↦p]]) <---> (mu , ψ^[[evar:E↦q]]) using gpi
Σ: Signature
sz: nat
Γ: Theory
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
E: evar
exdepth, mudepth: nat
gpi: ProofInfo
pf: Γ ⊢i p <---> q using gpi
IHsz: (ψ : Pattern) (wfψ : well_formed ψ), size' ψ ≤ sz → (EvS : EVarSet) (SvS : SVarSet), ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ p q wfψ wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ ⊆ SvS → Γ ⊢i ψ^[[evar:E↦p]] <---> ψ^[[evar:E↦q]] using gpi
ψ: Pattern
wfψ: well_formed (mu , ψ)
Hsz: S (size' ψ) ≤ S sz
EvS: EVarSet
SvS: SVarSet
i':= ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (mu , ψ))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (mu , ψ))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (mu , ψ)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E (mu , ψ) p q wfψ wfp wfq): ProofInfo
pile: ProofInfoLe i' gpi
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
E_in_EvS: E ∈ EvS
ψ_sub_EvS: free_evars (mu , ψ) ⊆ EvS
p_sub_SvS: free_svars p ⊆ SvS
q_sub_SvS: free_svars q ⊆ SvS
ψ_sub_SvS: free_svars (mu , ψ) ⊆ SvS
HEinψ: E ∈ free_evars ψ
X: svar
HeqX: X = svar_fresh (elements SvS)
frX: X ∉ SvS
H: well_formed ψ^{svar:0↦X} = true
H0: size' ψ^{svar:0↦X} ≤ sz
IH: Γ ⊢i ψ^[[evar:E↦p]]^[svar:0↦ patt_free_svar X] <---> ψ^[[evar:E↦q]]^[svar:0↦ patt_free_svar X] using gpi
IH1: Γ ⊢i ψ^[[evar:E↦p]]^[svar:0↦ patt_free_svar X] ---> ψ^[[evar:E↦q]]^[svar:0↦ patt_free_svar X] using gpi
IH2: Γ ⊢i ψ^[[evar:E↦q]]^[svar:0↦ patt_free_svar X] ---> ψ^[[evar:E↦p]]^[svar:0↦ patt_free_svar X] using gpi

well_formed_closed_mu_aux ψ^[[evar:E↦p]] 1
Σ: Signature
sz: nat
Γ: Theory
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
E: evar
exdepth, mudepth: nat
gpi: ProofInfo
pf: Γ ⊢i p <---> q using gpi
IHsz: (ψ : Pattern) (wfψ : well_formed ψ), size' ψ ≤ sz → (EvS : EVarSet) (SvS : SVarSet), ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ p q wfψ wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ ⊆ SvS → Γ ⊢i ψ^[[evar:E↦p]] <---> ψ^[[evar:E↦q]] using gpi
ψ: Pattern
wfψ: well_formed (mu , ψ)
Hsz: S (size' ψ) ≤ S sz
EvS: EVarSet
SvS: SVarSet
i':= ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (mu , ψ))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (mu , ψ))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (mu , ψ)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E (mu , ψ) p q wfψ wfp wfq): ProofInfo
pile: ProofInfoLe i' gpi
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
E_in_EvS: E ∈ EvS
ψ_sub_EvS: free_evars (mu , ψ) ⊆ EvS
p_sub_SvS: free_svars p ⊆ SvS
q_sub_SvS: free_svars q ⊆ SvS
ψ_sub_SvS: free_svars (mu , ψ) ⊆ SvS
HEinψ: E ∈ free_evars ψ
X: svar
HeqX: X = svar_fresh (elements SvS)
frX: X ∉ SvS
H: well_formed ψ^{svar:0↦X} = true
H0: size' ψ^{svar:0↦X} ≤ sz
IH: Γ ⊢i ψ^[[evar:E↦p]]^[svar:0↦ patt_free_svar X] <---> ψ^[[evar:E↦q]]^[svar:0↦ patt_free_svar X] using gpi
IH1: Γ ⊢i ψ^[[evar:E↦p]]^[svar:0↦ patt_free_svar X] ---> ψ^[[evar:E↦q]]^[svar:0↦ patt_free_svar X] using gpi
IH2: Γ ⊢i ψ^[[evar:E↦q]]^[svar:0↦ patt_free_svar X] ---> ψ^[[evar:E↦p]]^[svar:0↦ patt_free_svar X] using gpi
well_formed_closed_mu_aux ψ^[[evar:E↦q]] 1
Σ: Signature
sz: nat
Γ: Theory
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
E: evar
exdepth, mudepth: nat
gpi: ProofInfo
pf: Γ ⊢i p <---> q using gpi
IHsz: (ψ : Pattern) (wfψ : well_formed ψ), size' ψ ≤ sz → (EvS : EVarSet) (SvS : SVarSet), ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ p q wfψ wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ ⊆ SvS → Γ ⊢i ψ^[[evar:E↦p]] <---> ψ^[[evar:E↦q]] using gpi
ψ: Pattern
wfψ: well_formed (mu , ψ)
Hsz: S (size' ψ) ≤ S sz
EvS: EVarSet
SvS: SVarSet
i':= ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (mu , ψ))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (mu , ψ))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (mu , ψ)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E (mu , ψ) p q wfψ wfp wfq): ProofInfo
pile: ProofInfoLe i' gpi
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
E_in_EvS: E ∈ EvS
ψ_sub_EvS: free_evars (mu , ψ) ⊆ EvS
p_sub_SvS: free_svars p ⊆ SvS
q_sub_SvS: free_svars q ⊆ SvS
ψ_sub_SvS: free_svars (mu , ψ) ⊆ SvS
HEinψ: E ∈ free_evars ψ
X: svar
HeqX: X = svar_fresh (elements SvS)
frX: X ∉ SvS
H: well_formed ψ^{svar:0↦X} = true
H0: size' ψ^{svar:0↦X} ≤ sz
IH: Γ ⊢i ψ^[[evar:E↦p]]^[svar:0↦ patt_free_svar X] <---> ψ^[[evar:E↦q]]^[svar:0↦ patt_free_svar X] using gpi
IH1: Γ ⊢i ψ^[[evar:E↦p]]^[svar:0↦ patt_free_svar X] ---> ψ^[[evar:E↦q]]^[svar:0↦ patt_free_svar X] using gpi
IH2: Γ ⊢i ψ^[[evar:E↦q]]^[svar:0↦ patt_free_svar X] ---> ψ^[[evar:E↦p]]^[svar:0↦ patt_free_svar X] using gpi
?X ∉ free_svars ψ^[[evar:E↦p]]
Σ: Signature
sz: nat
Γ: Theory
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
E: evar
exdepth, mudepth: nat
gpi: ProofInfo
pf: Γ ⊢i p <---> q using gpi
IHsz: (ψ : Pattern) (wfψ : well_formed ψ), size' ψ ≤ sz → (EvS : EVarSet) (SvS : SVarSet), ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ p q wfψ wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ ⊆ SvS → Γ ⊢i ψ^[[evar:E↦p]] <---> ψ^[[evar:E↦q]] using gpi
ψ: Pattern
wfψ: well_formed (mu , ψ)
Hsz: S (size' ψ) ≤ S sz
EvS: EVarSet
SvS: SVarSet
i':= ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (mu , ψ))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (mu , ψ))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (mu , ψ)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E (mu , ψ) p q wfψ wfp wfq): ProofInfo
pile: ProofInfoLe i' gpi
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
E_in_EvS: E ∈ EvS
ψ_sub_EvS: free_evars (mu , ψ) ⊆ EvS
p_sub_SvS: free_svars p ⊆ SvS
q_sub_SvS: free_svars q ⊆ SvS
ψ_sub_SvS: free_svars (mu , ψ) ⊆ SvS
HEinψ: E ∈ free_evars ψ
X: svar
HeqX: X = svar_fresh (elements SvS)
frX: X ∉ SvS
H: well_formed ψ^{svar:0↦X} = true
H0: size' ψ^{svar:0↦X} ≤ sz
IH: Γ ⊢i ψ^[[evar:E↦p]]^[svar:0↦ patt_free_svar X] <---> ψ^[[evar:E↦q]]^[svar:0↦ patt_free_svar X] using gpi
IH1: Γ ⊢i ψ^[[evar:E↦p]]^[svar:0↦ patt_free_svar X] ---> ψ^[[evar:E↦q]]^[svar:0↦ patt_free_svar X] using gpi
IH2: Γ ⊢i ψ^[[evar:E↦q]]^[svar:0↦ patt_free_svar X] ---> ψ^[[evar:E↦p]]^[svar:0↦ patt_free_svar X] using gpi
?X ∉ free_svars ψ^[[evar:E↦q]]
Σ: Signature
sz: nat
Γ: Theory
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
E: evar
exdepth, mudepth: nat
gpi: ProofInfo
pf: Γ ⊢i p <---> q using gpi
IHsz: (ψ : Pattern) (wfψ : well_formed ψ), size' ψ ≤ sz → (EvS : EVarSet) (SvS : SVarSet), ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ p q wfψ wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ ⊆ SvS → Γ ⊢i ψ^[[evar:E↦p]] <---> ψ^[[evar:E↦q]] using gpi
ψ: Pattern
wfψ: well_formed (mu , ψ)
Hsz: S (size' ψ) ≤ S sz
EvS: EVarSet
SvS: SVarSet
i':= ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (mu , ψ))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (mu , ψ))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (mu , ψ)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E (mu , ψ) p q wfψ wfp wfq): ProofInfo
pile: ProofInfoLe i' gpi
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
E_in_EvS: E ∈ EvS
ψ_sub_EvS: free_evars (mu , ψ) ⊆ EvS
p_sub_SvS: free_svars p ⊆ SvS
q_sub_SvS: free_svars q ⊆ SvS
ψ_sub_SvS: free_svars (mu , ψ) ⊆ SvS
HEinψ: E ∈ free_evars ψ
X: svar
HeqX: X = svar_fresh (elements SvS)
frX: X ∉ SvS
H: well_formed ψ^{svar:0↦X} = true
H0: size' ψ^{svar:0↦X} ≤ sz
IH: Γ ⊢i ψ^[[evar:E↦p]]^[svar:0↦ patt_free_svar X] <---> ψ^[[evar:E↦q]]^[svar:0↦ patt_free_svar X] using gpi
IH1: Γ ⊢i ψ^[[evar:E↦p]]^[svar:0↦ patt_free_svar X] ---> ψ^[[evar:E↦q]]^[svar:0↦ patt_free_svar X] using gpi
IH2: Γ ⊢i ψ^[[evar:E↦q]]^[svar:0↦ patt_free_svar X] ---> ψ^[[evar:E↦p]]^[svar:0↦ patt_free_svar X] using gpi
Γ ⊢i (mu , ψ^[[evar:E↦p]]^{svar:0?X}^{{svar:?X0}}) <---> (mu , ψ^[[evar:E↦q]]^{svar:0?X}^{{svar:?X0}}) using gpi
Σ: Signature
sz: nat
Γ: Theory
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
E: evar
exdepth, mudepth: nat
gpi: ProofInfo
pf: Γ ⊢i p <---> q using gpi
IHsz: (ψ : Pattern) (wfψ : well_formed ψ), size' ψ ≤ sz → (EvS : EVarSet) (SvS : SVarSet), ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ p q wfψ wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ ⊆ SvS → Γ ⊢i ψ^[[evar:E↦p]] <---> ψ^[[evar:E↦q]] using gpi
ψ: Pattern
wfψ: well_formed (mu , ψ)
Hsz: S (size' ψ) ≤ S sz
EvS: EVarSet
SvS: SVarSet
i':= ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (mu , ψ))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (mu , ψ))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (mu , ψ)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E (mu , ψ) p q wfψ wfp wfq): ProofInfo
pile: ProofInfoLe i' gpi
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
E_in_EvS: E ∈ EvS
ψ_sub_EvS: free_evars (mu , ψ) ⊆ EvS
p_sub_SvS: free_svars p ⊆ SvS
q_sub_SvS: free_svars q ⊆ SvS
ψ_sub_SvS: free_svars (mu , ψ) ⊆ SvS
HEinψ: E ∈ free_evars ψ
X: svar
HeqX: X = svar_fresh (elements SvS)
frX: X ∉ SvS
H: well_formed ψ^{svar:0↦X} = true
H0: size' ψ^{svar:0↦X} ≤ sz
IH: Γ ⊢i ψ^[[evar:E↦p]]^[svar:0↦ patt_free_svar X] <---> ψ^[[evar:E↦q]]^[svar:0↦ patt_free_svar X] using gpi
IH1: Γ ⊢i ψ^[[evar:E↦p]]^[svar:0↦ patt_free_svar X] ---> ψ^[[evar:E↦q]]^[svar:0↦ patt_free_svar X] using gpi
IH2: Γ ⊢i ψ^[[evar:E↦q]]^[svar:0↦ patt_free_svar X] ---> ψ^[[evar:E↦p]]^[svar:0↦ patt_free_svar X] using gpi

Γ ⊢i (mu , ψ^[[evar:E↦p]]^{svar:0?X}^{{svar:?X0}}) <---> (mu , ψ^[[evar:E↦q]]^{svar:0?X}^{{svar:?X0}}) using gpi
Σ: Signature
sz: nat
Γ: Theory
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
E: evar
exdepth, mudepth: nat
gpi: ProofInfo
pf: Γ ⊢i p <---> q using gpi
IHsz: (ψ : Pattern) (wfψ : well_formed ψ), size' ψ ≤ sz → (EvS : EVarSet) (SvS : SVarSet), ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ p q wfψ wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ ⊆ SvS → Γ ⊢i ψ^[[evar:E↦p]] <---> ψ^[[evar:E↦q]] using gpi
ψ: Pattern
wfψ: well_formed (mu , ψ)
Hsz: S (size' ψ) ≤ S sz
EvS: EVarSet
SvS: SVarSet
i':= ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (mu , ψ))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (mu , ψ))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (mu , ψ)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E (mu , ψ) p q wfψ wfp wfq): ProofInfo
pile: ProofInfoLe i' gpi
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
E_in_EvS: E ∈ EvS
ψ_sub_EvS: free_evars (mu , ψ) ⊆ EvS
p_sub_SvS: free_svars p ⊆ SvS
q_sub_SvS: free_svars q ⊆ SvS
ψ_sub_SvS: free_svars (mu , ψ) ⊆ SvS
HEinψ: E ∈ free_evars ψ
X: svar
HeqX: X = svar_fresh (elements SvS)
frX: X ∉ SvS
H: well_formed ψ^{svar:0↦X} = true
H0: size' ψ^{svar:0↦X} ≤ sz
IH: Γ ⊢i ψ^[[evar:E↦p]]^[svar:0↦ patt_free_svar X] <---> ψ^[[evar:E↦q]]^[svar:0↦ patt_free_svar X] using gpi
IH1: Γ ⊢i ψ^[[evar:E↦p]]^[svar:0↦ patt_free_svar X] ---> ψ^[[evar:E↦q]]^[svar:0↦ patt_free_svar X] using gpi
IH2: Γ ⊢i ψ^[[evar:E↦q]]^[svar:0↦ patt_free_svar X] ---> ψ^[[evar:E↦p]]^[svar:0↦ patt_free_svar X] using gpi

well_formed (mu , ψ^[[evar:E↦p]]^{svar:0?X}^{{svar:?X0}})
Σ: Signature
sz: nat
Γ: Theory
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
E: evar
exdepth, mudepth: nat
gpi: ProofInfo
pf: Γ ⊢i p <---> q using gpi
IHsz: (ψ : Pattern) (wfψ : well_formed ψ), size' ψ ≤ sz → (EvS : EVarSet) (SvS : SVarSet), ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ p q wfψ wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ ⊆ SvS → Γ ⊢i ψ^[[evar:E↦p]] <---> ψ^[[evar:E↦q]] using gpi
ψ: Pattern
wfψ: well_formed (mu , ψ)
Hsz: S (size' ψ) ≤ S sz
EvS: EVarSet
SvS: SVarSet
i':= ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (mu , ψ))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (mu , ψ))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (mu , ψ)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E (mu , ψ) p q wfψ wfp wfq): ProofInfo
pile: ProofInfoLe i' gpi
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
E_in_EvS: E ∈ EvS
ψ_sub_EvS: free_evars (mu , ψ) ⊆ EvS
p_sub_SvS: free_svars p ⊆ SvS
q_sub_SvS: free_svars q ⊆ SvS
ψ_sub_SvS: free_svars (mu , ψ) ⊆ SvS
HEinψ: E ∈ free_evars ψ
X: svar
HeqX: X = svar_fresh (elements SvS)
frX: X ∉ SvS
H: well_formed ψ^{svar:0↦X} = true
H0: size' ψ^{svar:0↦X} ≤ sz
IH: Γ ⊢i ψ^[[evar:E↦p]]^[svar:0↦ patt_free_svar X] <---> ψ^[[evar:E↦q]]^[svar:0↦ patt_free_svar X] using gpi
IH1: Γ ⊢i ψ^[[evar:E↦p]]^[svar:0↦ patt_free_svar X] ---> ψ^[[evar:E↦q]]^[svar:0↦ patt_free_svar X] using gpi
IH2: Γ ⊢i ψ^[[evar:E↦q]]^[svar:0↦ patt_free_svar X] ---> ψ^[[evar:E↦p]]^[svar:0↦ patt_free_svar X] using gpi
well_formed (mu , ψ^[[evar:E↦q]]^{svar:0?X}^{{svar:?X0}})
Σ: Signature
sz: nat
Γ: Theory
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
E: evar
exdepth, mudepth: nat
gpi: ProofInfo
pf: Γ ⊢i p <---> q using gpi
IHsz: (ψ : Pattern) (wfψ : well_formed ψ), size' ψ ≤ sz → (EvS : EVarSet) (SvS : SVarSet), ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ p q wfψ wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ ⊆ SvS → Γ ⊢i ψ^[[evar:E↦p]] <---> ψ^[[evar:E↦q]] using gpi
ψ: Pattern
wfψ: well_formed (mu , ψ)
Hsz: S (size' ψ) ≤ S sz
EvS: EVarSet
SvS: SVarSet
i':= ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (mu , ψ))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (mu , ψ))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (mu , ψ)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E (mu , ψ) p q wfψ wfp wfq): ProofInfo
pile: ProofInfoLe i' gpi
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
E_in_EvS: E ∈ EvS
ψ_sub_EvS: free_evars (mu , ψ) ⊆ EvS
p_sub_SvS: free_svars p ⊆ SvS
q_sub_SvS: free_svars q ⊆ SvS
ψ_sub_SvS: free_svars (mu , ψ) ⊆ SvS
HEinψ: E ∈ free_evars ψ
X: svar
HeqX: X = svar_fresh (elements SvS)
frX: X ∉ SvS
H: well_formed ψ^{svar:0↦X} = true
H0: size' ψ^{svar:0↦X} ≤ sz
IH: Γ ⊢i ψ^[[evar:E↦p]]^[svar:0↦ patt_free_svar X] <---> ψ^[[evar:E↦q]]^[svar:0↦ patt_free_svar X] using gpi
IH1: Γ ⊢i ψ^[[evar:E↦p]]^[svar:0↦ patt_free_svar X] ---> ψ^[[evar:E↦q]]^[svar:0↦ patt_free_svar X] using gpi
IH2: Γ ⊢i ψ^[[evar:E↦q]]^[svar:0↦ patt_free_svar X] ---> ψ^[[evar:E↦p]]^[svar:0↦ patt_free_svar X] using gpi
Γ ⊢i (mu , ψ^[[evar:E↦p]]^{svar:0?X}^{{svar:?X0}}) ---> (mu , ψ^[[evar:E↦q]]^{svar:0?X}^{{svar:?X0}}) using gpi
Σ: Signature
sz: nat
Γ: Theory
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
E: evar
exdepth, mudepth: nat
gpi: ProofInfo
pf: Γ ⊢i p <---> q using gpi
IHsz: (ψ : Pattern) (wfψ : well_formed ψ), size' ψ ≤ sz → (EvS : EVarSet) (SvS : SVarSet), ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ p q wfψ wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ ⊆ SvS → Γ ⊢i ψ^[[evar:E↦p]] <---> ψ^[[evar:E↦q]] using gpi
ψ: Pattern
wfψ: well_formed (mu , ψ)
Hsz: S (size' ψ) ≤ S sz
EvS: EVarSet
SvS: SVarSet
i':= ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (mu , ψ))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (mu , ψ))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (mu , ψ)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E (mu , ψ) p q wfψ wfp wfq): ProofInfo
pile: ProofInfoLe i' gpi
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
E_in_EvS: E ∈ EvS
ψ_sub_EvS: free_evars (mu , ψ) ⊆ EvS
p_sub_SvS: free_svars p ⊆ SvS
q_sub_SvS: free_svars q ⊆ SvS
ψ_sub_SvS: free_svars (mu , ψ) ⊆ SvS
HEinψ: E ∈ free_evars ψ
X: svar
HeqX: X = svar_fresh (elements SvS)
frX: X ∉ SvS
H: well_formed ψ^{svar:0↦X} = true
H0: size' ψ^{svar:0↦X} ≤ sz
IH: Γ ⊢i ψ^[[evar:E↦p]]^[svar:0↦ patt_free_svar X] <---> ψ^[[evar:E↦q]]^[svar:0↦ patt_free_svar X] using gpi
IH1: Γ ⊢i ψ^[[evar:E↦p]]^[svar:0↦ patt_free_svar X] ---> ψ^[[evar:E↦q]]^[svar:0↦ patt_free_svar X] using gpi
IH2: Γ ⊢i ψ^[[evar:E↦q]]^[svar:0↦ patt_free_svar X] ---> ψ^[[evar:E↦p]]^[svar:0↦ patt_free_svar X] using gpi
Γ ⊢i (mu , ψ^[[evar:E↦q]]^{svar:0?X}^{{svar:?X0}}) ---> (mu , ψ^[[evar:E↦p]]^{svar:0?X}^{{svar:?X0}}) using gpi
Σ: Signature
sz: nat
Γ: Theory
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
E: evar
exdepth, mudepth: nat
gpi: ProofInfo
pf: Γ ⊢i p <---> q using gpi
IHsz: (ψ : Pattern) (wfψ : well_formed ψ), size' ψ ≤ sz → (EvS : EVarSet) (SvS : SVarSet), ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ p q wfψ wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ ⊆ SvS → Γ ⊢i ψ^[[evar:E↦p]] <---> ψ^[[evar:E↦q]] using gpi
ψ: Pattern
wfψ: well_formed (mu , ψ)
Hsz: S (size' ψ) ≤ S sz
EvS: EVarSet
SvS: SVarSet
i':= ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (mu , ψ))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (mu , ψ))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (mu , ψ)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E (mu , ψ) p q wfψ wfp wfq): ProofInfo
pile: ProofInfoLe i' gpi
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
E_in_EvS: E ∈ EvS
ψ_sub_EvS: free_evars (mu , ψ) ⊆ EvS
p_sub_SvS: free_svars p ⊆ SvS
q_sub_SvS: free_svars q ⊆ SvS
ψ_sub_SvS: free_svars (mu , ψ) ⊆ SvS
HEinψ: E ∈ free_evars ψ
X: svar
HeqX: X = svar_fresh (elements SvS)
frX: X ∉ SvS
H: well_formed ψ^{svar:0↦X} = true
H0: size' ψ^{svar:0↦X} ≤ sz
IH: Γ ⊢i ψ^[[evar:E↦p]]^[svar:0↦ patt_free_svar X] <---> ψ^[[evar:E↦q]]^[svar:0↦ patt_free_svar X] using gpi
IH1: Γ ⊢i ψ^[[evar:E↦p]]^[svar:0↦ patt_free_svar X] ---> ψ^[[evar:E↦q]]^[svar:0↦ patt_free_svar X] using gpi
IH2: Γ ⊢i ψ^[[evar:E↦q]]^[svar:0↦ patt_free_svar X] ---> ψ^[[evar:E↦p]]^[svar:0↦ patt_free_svar X] using gpi

Γ ⊢i (mu , ψ^[[evar:E↦q]]^{svar:0?X}^{{svar:?X0}}) ---> (mu , ψ^[[evar:E↦p]]^{svar:0?X}^{{svar:?X0}}) using gpi
Σ: Signature
sz: nat
Γ: Theory
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
E: evar
exdepth, mudepth: nat
gpi: ProofInfo
pf: Γ ⊢i p <---> q using gpi
IHsz: (ψ : Pattern) (wfψ : well_formed ψ), size' ψ ≤ sz → (EvS : EVarSet) (SvS : SVarSet), ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ p q wfψ wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ ⊆ SvS → Γ ⊢i ψ^[[evar:E↦p]] <---> ψ^[[evar:E↦q]] using gpi
ψ: Pattern
wfψ: well_formed (mu , ψ)
Hsz: S (size' ψ) ≤ S sz
EvS: EVarSet
SvS: SVarSet
i':= ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (mu , ψ))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (mu , ψ))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (mu , ψ)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E (mu , ψ) p q wfψ wfp wfq): ProofInfo
pile: ProofInfoLe i' gpi
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
E_in_EvS: E ∈ EvS
ψ_sub_EvS: free_evars (mu , ψ) ⊆ EvS
p_sub_SvS: free_svars p ⊆ SvS
q_sub_SvS: free_svars q ⊆ SvS
ψ_sub_SvS: free_svars (mu , ψ) ⊆ SvS
HEinψ: E ∈ free_evars ψ
X: svar
HeqX: X = svar_fresh (elements SvS)
frX: X ∉ SvS
H: well_formed ψ^{svar:0↦X} = true
H0: size' ψ^{svar:0↦X} ≤ sz
IH: Γ ⊢i ψ^[[evar:E↦p]]^[svar:0↦ patt_free_svar X] <---> ψ^[[evar:E↦q]]^[svar:0↦ patt_free_svar X] using gpi
IH1: Γ ⊢i ψ^[[evar:E↦p]]^[svar:0↦ patt_free_svar X] ---> ψ^[[evar:E↦q]]^[svar:0↦ patt_free_svar X] using gpi
IH2: Γ ⊢i ψ^[[evar:E↦q]]^[svar:0↦ patt_free_svar X] ---> ψ^[[evar:E↦p]]^[svar:0↦ patt_free_svar X] using gpi

ProofInfoLe (ExGen := ∅, SVSubst := {[?X]}, KT := true, FP := ∅) gpi
Σ: Signature
sz: nat
Γ: Theory
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
E: evar
exdepth, mudepth: nat
gpi: ProofInfo
pf: Γ ⊢i p <---> q using gpi
IHsz: (ψ : Pattern) (wfψ : well_formed ψ), size' ψ ≤ sz → (EvS : EVarSet) (SvS : SVarSet), ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ p q wfψ wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ ⊆ SvS → Γ ⊢i ψ^[[evar:E↦p]] <---> ψ^[[evar:E↦q]] using gpi
ψ: Pattern
wfψ: well_formed (mu , ψ)
Hsz: S (size' ψ) ≤ S sz
EvS: EVarSet
SvS: SVarSet
i':= ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (mu , ψ))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (mu , ψ))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (mu , ψ)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E (mu , ψ) p q wfψ wfp wfq): ProofInfo
pile: ProofInfoLe i' gpi
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
E_in_EvS: E ∈ EvS
ψ_sub_EvS: free_evars (mu , ψ) ⊆ EvS
p_sub_SvS: free_svars p ⊆ SvS
q_sub_SvS: free_svars q ⊆ SvS
ψ_sub_SvS: free_svars (mu , ψ) ⊆ SvS
HEinψ: E ∈ free_evars ψ
X: svar
HeqX: X = svar_fresh (elements SvS)
frX: X ∉ SvS
H: well_formed ψ^{svar:0↦X} = true
H0: size' ψ^{svar:0↦X} ≤ sz
IH: Γ ⊢i ψ^[[evar:E↦p]]^[svar:0↦ patt_free_svar X] <---> ψ^[[evar:E↦q]]^[svar:0↦ patt_free_svar X] using gpi
IH1: Γ ⊢i ψ^[[evar:E↦p]]^[svar:0↦ patt_free_svar X] ---> ψ^[[evar:E↦q]]^[svar:0↦ patt_free_svar X] using gpi
IH2: Γ ⊢i ψ^[[evar:E↦q]]^[svar:0↦ patt_free_svar X] ---> ψ^[[evar:E↦p]]^[svar:0↦ patt_free_svar X] using gpi
svar_has_negative_occurrence ?X ψ^[[evar:E↦q]]^{svar:0?X} = false
Σ: Signature
sz: nat
Γ: Theory
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
E: evar
exdepth, mudepth: nat
gpi: ProofInfo
pf: Γ ⊢i p <---> q using gpi
IHsz: (ψ : Pattern) (wfψ : well_formed ψ), size' ψ ≤ sz → (EvS : EVarSet) (SvS : SVarSet), ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ p q wfψ wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ ⊆ SvS → Γ ⊢i ψ^[[evar:E↦p]] <---> ψ^[[evar:E↦q]] using gpi
ψ: Pattern
wfψ: well_formed (mu , ψ)
Hsz: S (size' ψ) ≤ S sz
EvS: EVarSet
SvS: SVarSet
i':= ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (mu , ψ))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (mu , ψ))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (mu , ψ)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E (mu , ψ) p q wfψ wfp wfq): ProofInfo
pile: ProofInfoLe i' gpi
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
E_in_EvS: E ∈ EvS
ψ_sub_EvS: free_evars (mu , ψ) ⊆ EvS
p_sub_SvS: free_svars p ⊆ SvS
q_sub_SvS: free_svars q ⊆ SvS
ψ_sub_SvS: free_svars (mu , ψ) ⊆ SvS
HEinψ: E ∈ free_evars ψ
X: svar
HeqX: X = svar_fresh (elements SvS)
frX: X ∉ SvS
H: well_formed ψ^{svar:0↦X} = true
H0: size' ψ^{svar:0↦X} ≤ sz
IH: Γ ⊢i ψ^[[evar:E↦p]]^[svar:0↦ patt_free_svar X] <---> ψ^[[evar:E↦q]]^[svar:0↦ patt_free_svar X] using gpi
IH1: Γ ⊢i ψ^[[evar:E↦p]]^[svar:0↦ patt_free_svar X] ---> ψ^[[evar:E↦q]]^[svar:0↦ patt_free_svar X] using gpi
IH2: Γ ⊢i ψ^[[evar:E↦q]]^[svar:0↦ patt_free_svar X] ---> ψ^[[evar:E↦p]]^[svar:0↦ patt_free_svar X] using gpi
svar_has_negative_occurrence ?X ψ^[[evar:E↦p]]^{svar:0?X} = false
Σ: Signature
sz: nat
Γ: Theory
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
E: evar
exdepth, mudepth: nat
gpi: ProofInfo
pf: Γ ⊢i p <---> q using gpi
IHsz: (ψ : Pattern) (wfψ : well_formed ψ), size' ψ ≤ sz → (EvS : EVarSet) (SvS : SVarSet), ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ p q wfψ wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ ⊆ SvS → Γ ⊢i ψ^[[evar:E↦p]] <---> ψ^[[evar:E↦q]] using gpi
ψ: Pattern
wfψ: well_formed (mu , ψ)
Hsz: S (size' ψ) ≤ S sz
EvS: EVarSet
SvS: SVarSet
i':= ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (mu , ψ))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (mu , ψ))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (mu , ψ)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E (mu , ψ) p q wfψ wfp wfq): ProofInfo
pile: ProofInfoLe i' gpi
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
E_in_EvS: E ∈ EvS
ψ_sub_EvS: free_evars (mu , ψ) ⊆ EvS
p_sub_SvS: free_svars p ⊆ SvS
q_sub_SvS: free_svars q ⊆ SvS
ψ_sub_SvS: free_svars (mu , ψ) ⊆ SvS
HEinψ: E ∈ free_evars ψ
X: svar
HeqX: X = svar_fresh (elements SvS)
frX: X ∉ SvS
H: well_formed ψ^{svar:0↦X} = true
H0: size' ψ^{svar:0↦X} ≤ sz
IH: Γ ⊢i ψ^[[evar:E↦p]]^[svar:0↦ patt_free_svar X] <---> ψ^[[evar:E↦q]]^[svar:0↦ patt_free_svar X] using gpi
IH1: Γ ⊢i ψ^[[evar:E↦p]]^[svar:0↦ patt_free_svar X] ---> ψ^[[evar:E↦q]]^[svar:0↦ patt_free_svar X] using gpi
IH2: Γ ⊢i ψ^[[evar:E↦q]]^[svar:0↦ patt_free_svar X] ---> ψ^[[evar:E↦p]]^[svar:0↦ patt_free_svar X] using gpi
Γ ⊢i ψ^[[evar:E↦q]]^{svar:0?X} ---> ψ^[[evar:E↦p]]^{svar:0?X} using gpi
Σ: Signature
sz: nat
Γ: Theory
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
E: evar
exdepth, mudepth: nat
gpi: ProofInfo
pf: Γ ⊢i p <---> q using gpi
IHsz: (ψ : Pattern) (wfψ : well_formed ψ), size' ψ ≤ sz → (EvS : EVarSet) (SvS : SVarSet), ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ p q wfψ wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ ⊆ SvS → Γ ⊢i ψ^[[evar:E↦p]] <---> ψ^[[evar:E↦q]] using gpi
ψ: Pattern
wfψ: well_formed (mu , ψ)
Hsz: S (size' ψ) ≤ S sz
EvS: EVarSet
SvS: SVarSet
i':= ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (mu , ψ))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (mu , ψ))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (mu , ψ)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E (mu , ψ) p q wfψ wfp wfq): ProofInfo
pile: ProofInfoLe i' gpi
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
E_in_EvS: E ∈ EvS
ψ_sub_EvS: free_evars (mu , ψ) ⊆ EvS
p_sub_SvS: free_svars p ⊆ SvS
q_sub_SvS: free_svars q ⊆ SvS
ψ_sub_SvS: free_svars (mu , ψ) ⊆ SvS
HEinψ: E ∈ free_evars ψ
X: svar
HeqX: X = svar_fresh (elements SvS)
frX: X ∉ SvS
H: well_formed ψ^{svar:0↦X} = true
H0: size' ψ^{svar:0↦X} ≤ sz
IH: Γ ⊢i ψ^[[evar:E↦p]]^[svar:0↦ patt_free_svar X] <---> ψ^[[evar:E↦q]]^[svar:0↦ patt_free_svar X] using gpi
IH1: Γ ⊢i ψ^[[evar:E↦p]]^[svar:0↦ patt_free_svar X] ---> ψ^[[evar:E↦q]]^[svar:0↦ patt_free_svar X] using gpi
IH2: Γ ⊢i ψ^[[evar:E↦q]]^[svar:0↦ patt_free_svar X] ---> ψ^[[evar:E↦p]]^[svar:0↦ patt_free_svar X] using gpi

Γ ⊢i ψ^[[evar:E↦q]]^{svar:0?X} ---> ψ^[[evar:E↦p]]^{svar:0?X} using gpi
Σ: Signature
sz: nat
Γ: Theory
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
E: evar
exdepth, mudepth: nat
gpi: ProofInfo
pf: Γ ⊢i p <---> q using gpi
IHsz: (ψ : Pattern) (wfψ : well_formed ψ), size' ψ ≤ sz → (EvS : EVarSet) (SvS : SVarSet), ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ p q wfψ wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ ⊆ SvS → Γ ⊢i ψ^[[evar:E↦p]] <---> ψ^[[evar:E↦q]] using gpi
ψ: Pattern
wfψ: well_formed (mu , ψ)
Hsz: S (size' ψ) ≤ S sz
EvS: EVarSet
SvS: SVarSet
i':= ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (mu , ψ))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (mu , ψ))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (mu , ψ)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E (mu , ψ) p q wfψ wfp wfq): ProofInfo
pile: ProofInfoLe i' gpi
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
E_in_EvS: E ∈ EvS
ψ_sub_EvS: free_evars (mu , ψ) ⊆ EvS
p_sub_SvS: free_svars p ⊆ SvS
q_sub_SvS: free_svars q ⊆ SvS
ψ_sub_SvS: free_svars (mu , ψ) ⊆ SvS
HEinψ: E ∈ free_evars ψ
X: svar
HeqX: X = svar_fresh (elements SvS)
frX: X ∉ SvS
H: well_formed ψ^{svar:0↦X} = true
H0: size' ψ^{svar:0↦X} ≤ sz
IH: Γ ⊢i ψ^[[evar:E↦p]]^[svar:0↦ patt_free_svar X] <---> ψ^[[evar:E↦q]]^[svar:0↦ patt_free_svar X] using gpi
IH1: Γ ⊢i ψ^[[evar:E↦p]]^[svar:0↦ patt_free_svar X] ---> ψ^[[evar:E↦q]]^[svar:0↦ patt_free_svar X] using gpi
IH2: Γ ⊢i ψ^[[evar:E↦q]]^[svar:0↦ patt_free_svar X] ---> ψ^[[evar:E↦p]]^[svar:0↦ patt_free_svar X] using gpi

Γ ⊢i ψ^[[evar:E↦q]]^[svar:0↦patt_free_svar ?X] ---> ψ^[[evar:E↦p]]^[svar:0↦patt_free_svar ?X] using gpi
apply IH2.
Σ: Signature
sz: nat
Γ: Theory
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
E: evar
exdepth, mudepth: nat
gpi: ProofInfo
pf: Γ ⊢i p <---> q using gpi
IHsz: (ψ : Pattern) (wfψ : well_formed ψ), size' ψ ≤ sz → (EvS : EVarSet) (SvS : SVarSet), ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ p q wfψ wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ ⊆ SvS → Γ ⊢i ψ^[[evar:E↦p]] <---> ψ^[[evar:E↦q]] using gpi
ψ: Pattern
wfψ: well_formed (mu , ψ)
Hsz: S (size' ψ) ≤ S sz
EvS: EVarSet
SvS: SVarSet
i':= ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (mu , ψ))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (mu , ψ))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (mu , ψ)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E (mu , ψ) p q wfψ wfp wfq): ProofInfo
pile: ProofInfoLe i' gpi
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
E_in_EvS: E ∈ EvS
ψ_sub_EvS: free_evars (mu , ψ) ⊆ EvS
p_sub_SvS: free_svars p ⊆ SvS
q_sub_SvS: free_svars q ⊆ SvS
ψ_sub_SvS: free_svars (mu , ψ) ⊆ SvS
HEinψ: E ∈ free_evars ψ
X: svar
HeqX: X = svar_fresh (elements SvS)
frX: X ∉ SvS
H: well_formed ψ^{svar:0↦X} = true
H0: size' ψ^{svar:0↦X} ≤ sz
IH: Γ ⊢i ψ^[[evar:E↦p]]^[svar:0↦ patt_free_svar X] <---> ψ^[[evar:E↦q]]^[svar:0↦ patt_free_svar X] using gpi
IH1: Γ ⊢i ψ^[[evar:E↦p]]^[svar:0↦ patt_free_svar X] ---> ψ^[[evar:E↦q]]^[svar:0↦ patt_free_svar X] using gpi
IH2: Γ ⊢i ψ^[[evar:E↦q]]^[svar:0↦ patt_free_svar X] ---> ψ^[[evar:E↦p]]^[svar:0↦ patt_free_svar X] using gpi

ProofInfoLe (ExGen := ∅, SVSubst := {[X]}, KT := true, FP := ∅) gpi
Σ: Signature
sz: nat
Γ: Theory
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
E: evar
exdepth, mudepth: nat
gpi: ProofInfo
pf: Γ ⊢i p <---> q using gpi
IHsz: (ψ : Pattern) (wfψ : well_formed ψ), size' ψ ≤ sz → (EvS : EVarSet) (SvS : SVarSet), ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ p q wfψ wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ ⊆ SvS → Γ ⊢i ψ^[[evar:E↦p]] <---> ψ^[[evar:E↦q]] using gpi
ψ: Pattern
wfψ: well_formed (mu , ψ)
Hsz: S (size' ψ) ≤ S sz
EvS: EVarSet
SvS: SVarSet
i':= ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (mu , ψ))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (mu , ψ))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (mu , ψ)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E (mu , ψ) p q wfψ wfp wfq): ProofInfo
pile: ProofInfoLe i' gpi
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
E_in_EvS: E ∈ EvS
ψ_sub_EvS: free_evars (mu , ψ) ⊆ EvS
p_sub_SvS: free_svars p ⊆ SvS
q_sub_SvS: free_svars q ⊆ SvS
ψ_sub_SvS: free_svars (mu , ψ) ⊆ SvS
HEinψ: E ∈ free_evars ψ
X: svar
HeqX: X = svar_fresh (elements SvS)
frX: X ∉ SvS
H: well_formed ψ^{svar:0↦X} = true
H0: size' ψ^{svar:0↦X} ≤ sz
IH: Γ ⊢i ψ^[[evar:E↦p]]^[svar:0↦ patt_free_svar X] <---> ψ^[[evar:E↦q]]^[svar:0↦ patt_free_svar X] using gpi
IH1: Γ ⊢i ψ^[[evar:E↦p]]^[svar:0↦ patt_free_svar X] ---> ψ^[[evar:E↦q]]^[svar:0↦ patt_free_svar X] using gpi
IH2: Γ ⊢i ψ^[[evar:E↦q]]^[svar:0↦ patt_free_svar X] ---> ψ^[[evar:E↦p]]^[svar:0↦ patt_free_svar X] using gpi
svar_has_negative_occurrence X ψ^[[evar:E↦q]]^{svar:0↦X} = false
Σ: Signature
sz: nat
Γ: Theory
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
E: evar
exdepth, mudepth: nat
gpi: ProofInfo
pf: Γ ⊢i p <---> q using gpi
IHsz: (ψ : Pattern) (wfψ : well_formed ψ), size' ψ ≤ sz → (EvS : EVarSet) (SvS : SVarSet), ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ p q wfψ wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ ⊆ SvS → Γ ⊢i ψ^[[evar:E↦p]] <---> ψ^[[evar:E↦q]] using gpi
ψ: Pattern
wfψ: well_formed (mu , ψ)
Hsz: S (size' ψ) ≤ S sz
EvS: EVarSet
SvS: SVarSet
i':= ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (mu , ψ))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (mu , ψ))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (mu , ψ)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E (mu , ψ) p q wfψ wfp wfq): ProofInfo
pile: ProofInfoLe i' gpi
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
E_in_EvS: E ∈ EvS
ψ_sub_EvS: free_evars (mu , ψ) ⊆ EvS
p_sub_SvS: free_svars p ⊆ SvS
q_sub_SvS: free_svars q ⊆ SvS
ψ_sub_SvS: free_svars (mu , ψ) ⊆ SvS
HEinψ: E ∈ free_evars ψ
X: svar
HeqX: X = svar_fresh (elements SvS)
frX: X ∉ SvS
H: well_formed ψ^{svar:0↦X} = true
H0: size' ψ^{svar:0↦X} ≤ sz
IH: Γ ⊢i ψ^[[evar:E↦p]]^[svar:0↦ patt_free_svar X] <---> ψ^[[evar:E↦q]]^[svar:0↦ patt_free_svar X] using gpi
IH1: Γ ⊢i ψ^[[evar:E↦p]]^[svar:0↦ patt_free_svar X] ---> ψ^[[evar:E↦q]]^[svar:0↦ patt_free_svar X] using gpi
IH2: Γ ⊢i ψ^[[evar:E↦q]]^[svar:0↦ patt_free_svar X] ---> ψ^[[evar:E↦p]]^[svar:0↦ patt_free_svar X] using gpi
svar_has_negative_occurrence X ψ^[[evar:E↦p]]^{svar:0↦X} = false
Σ: Signature
sz: nat
Γ: Theory
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
E: evar
exdepth, mudepth: nat
gpi: ProofInfo
pf: Γ ⊢i p <---> q using gpi
IHsz: (ψ : Pattern) (wfψ : well_formed ψ), size' ψ ≤ sz → (EvS : EVarSet) (SvS : SVarSet), ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ p q wfψ wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ ⊆ SvS → Γ ⊢i ψ^[[evar:E↦p]] <---> ψ^[[evar:E↦q]] using gpi
ψ: Pattern
wfψ: well_formed (mu , ψ)
Hsz: S (size' ψ) ≤ S sz
EvS: EVarSet
SvS: SVarSet
i':= ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (mu , ψ))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (mu , ψ))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (mu , ψ)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E (mu , ψ) p q wfψ wfp wfq): ProofInfo
pile: ProofInfoLe i' gpi
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
E_in_EvS: E ∈ EvS
ψ_sub_EvS: free_evars (mu , ψ) ⊆ EvS
p_sub_SvS: free_svars p ⊆ SvS
q_sub_SvS: free_svars q ⊆ SvS
ψ_sub_SvS: free_svars (mu , ψ) ⊆ SvS
HEinψ: E ∈ free_evars ψ
X: svar
HeqX: X = svar_fresh (elements SvS)
frX: X ∉ SvS
H: well_formed ψ^{svar:0↦X} = true
H0: size' ψ^{svar:0↦X} ≤ sz
IH: Γ ⊢i ψ^[[evar:E↦p]]^[svar:0↦ patt_free_svar X] <---> ψ^[[evar:E↦q]]^[svar:0↦ patt_free_svar X] using gpi
IH1: Γ ⊢i ψ^[[evar:E↦p]]^[svar:0↦ patt_free_svar X] ---> ψ^[[evar:E↦q]]^[svar:0↦ patt_free_svar X] using gpi
IH2: Γ ⊢i ψ^[[evar:E↦q]]^[svar:0↦ patt_free_svar X] ---> ψ^[[evar:E↦p]]^[svar:0↦ patt_free_svar X] using gpi

svar_has_negative_occurrence X ψ^[[evar:E↦p]]^{svar:0↦X} = false
Falling back on (svar_has_negative_occurrence X ψ^[[evar:E↦p]]^{svar:0↦X} = false)
Falling back on (svar_is_fresh_in X ψ^[[evar:E↦p]])
Σ: Signature
sz: nat
Γ: Theory
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
E: evar
exdepth, mudepth: nat
gpi: ProofInfo
pf: Γ ⊢i p <---> q using gpi
IHsz: (ψ : Pattern) (wfψ : well_formed ψ), size' ψ ≤ sz → (EvS : EVarSet) (SvS : SVarSet), ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ p q wfψ wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ ⊆ SvS → Γ ⊢i ψ^[[evar:E↦p]] <---> ψ^[[evar:E↦q]] using gpi
ψ: Pattern
wfψ: well_formed (mu , ψ)
Hsz: S (size' ψ) ≤ S sz
EvS: EVarSet
SvS: SVarSet
i':= ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (mu , ψ))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (mu , ψ))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (mu , ψ)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E (mu , ψ) p q wfψ wfp wfq): ProofInfo
pile: ProofInfoLe i' gpi
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
E_in_EvS: E ∈ EvS
ψ_sub_EvS: free_evars (mu , ψ) ⊆ EvS
p_sub_SvS: free_svars p ⊆ SvS
q_sub_SvS: free_svars q ⊆ SvS
ψ_sub_SvS: free_svars (mu , ψ) ⊆ SvS
HEinψ: E ∈ free_evars ψ
X: svar
HeqX: X = svar_fresh (elements SvS)
frX: X ∉ SvS
H: well_formed ψ^{svar:0↦X} = true
H0: size' ψ^{svar:0↦X} ≤ sz
IH: Γ ⊢i ψ^[[evar:E↦p]]^[svar:0↦ patt_free_svar X] <---> ψ^[[evar:E↦q]]^[svar:0↦ patt_free_svar X] using gpi
IH1: Γ ⊢i ψ^[[evar:E↦p]]^[svar:0↦ patt_free_svar X] ---> ψ^[[evar:E↦q]]^[svar:0↦ patt_free_svar X] using gpi
IH2: Γ ⊢i ψ^[[evar:E↦q]]^[svar:0↦ patt_free_svar X] ---> ψ^[[evar:E↦p]]^[svar:0↦ patt_free_svar X] using gpi

ProofInfoLe (ExGen := ∅, SVSubst := {[X]}, KT := true, FP := ∅) gpi
Σ: Signature
sz: nat
Γ: Theory
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
E: evar
exdepth, mudepth: nat
gpi: ProofInfo
pf: Γ ⊢i p <---> q using gpi
IHsz: (ψ : Pattern) (wfψ : well_formed ψ), size' ψ ≤ sz → (EvS : EVarSet) (SvS : SVarSet), ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ p q wfψ wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ ⊆ SvS → Γ ⊢i ψ^[[evar:E↦p]] <---> ψ^[[evar:E↦q]] using gpi
ψ: Pattern
wfψ: well_formed (mu , ψ)
Hsz: S (size' ψ) ≤ S sz
EvS: EVarSet
SvS: SVarSet
i':= ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (mu , ψ))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (mu , ψ))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (mu , ψ)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E (mu , ψ) p q wfψ wfp wfq): ProofInfo
pile: ProofInfoLe i' gpi
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
E_in_EvS: E ∈ EvS
ψ_sub_EvS: free_evars (mu , ψ) ⊆ EvS
p_sub_SvS: free_svars p ⊆ SvS
q_sub_SvS: free_svars q ⊆ SvS
ψ_sub_SvS: free_svars (mu , ψ) ⊆ SvS
HEinψ: E ∈ free_evars ψ
X: svar
HeqX: X = svar_fresh (elements SvS)
frX: X ∉ SvS
H: well_formed ψ^{svar:0↦X} = true
H0: size' ψ^{svar:0↦X} ≤ sz
IH: Γ ⊢i ψ^[[evar:E↦p]]^[svar:0↦ patt_free_svar X] <---> ψ^[[evar:E↦q]]^[svar:0↦ patt_free_svar X] using gpi
IH1: Γ ⊢i ψ^[[evar:E↦p]]^[svar:0↦ patt_free_svar X] ---> ψ^[[evar:E↦q]]^[svar:0↦ patt_free_svar X] using gpi
IH2: Γ ⊢i ψ^[[evar:E↦q]]^[svar:0↦ patt_free_svar X] ---> ψ^[[evar:E↦p]]^[svar:0↦ patt_free_svar X] using gpi
svar_has_negative_occurrence X ψ^[[evar:E↦q]]^{svar:0↦X} = false
Σ: Signature
sz: nat
Γ: Theory
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
E: evar
exdepth, mudepth: nat
gpi: ProofInfo
pf: Γ ⊢i p <---> q using gpi
IHsz: (ψ : Pattern) (wfψ : well_formed ψ), size' ψ ≤ sz → (EvS : EVarSet) (SvS : SVarSet), ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ p q wfψ wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ ⊆ SvS → Γ ⊢i ψ^[[evar:E↦p]] <---> ψ^[[evar:E↦q]] using gpi
ψ: Pattern
wfψ: well_formed (mu , ψ)
Hsz: S (size' ψ) ≤ S sz
EvS: EVarSet
SvS: SVarSet
i':= ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (mu , ψ))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (mu , ψ))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (mu , ψ)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E (mu , ψ) p q wfψ wfp wfq): ProofInfo
pile: ProofInfoLe i' gpi
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
E_in_EvS: E ∈ EvS
ψ_sub_EvS: free_evars (mu , ψ) ⊆ EvS
p_sub_SvS: free_svars p ⊆ SvS
q_sub_SvS: free_svars q ⊆ SvS
ψ_sub_SvS: free_svars (mu , ψ) ⊆ SvS
HEinψ: E ∈ free_evars ψ
X: svar
HeqX: X = svar_fresh (elements SvS)
frX: X ∉ SvS
H: well_formed ψ^{svar:0↦X} = true
H0: size' ψ^{svar:0↦X} ≤ sz
IH: Γ ⊢i ψ^[[evar:E↦p]]^[svar:0↦ patt_free_svar X] <---> ψ^[[evar:E↦q]]^[svar:0↦ patt_free_svar X] using gpi
IH1: Γ ⊢i ψ^[[evar:E↦p]]^[svar:0↦ patt_free_svar X] ---> ψ^[[evar:E↦q]]^[svar:0↦ patt_free_svar X] using gpi
IH2: Γ ⊢i ψ^[[evar:E↦q]]^[svar:0↦ patt_free_svar X] ---> ψ^[[evar:E↦p]]^[svar:0↦ patt_free_svar X] using gpi

svar_has_negative_occurrence X ψ^[[evar:E↦q]]^{svar:0↦X} = false
Falling back on (svar_has_negative_occurrence X ψ^[[evar:E↦q]]^{svar:0↦X} = false)
Falling back on (svar_is_fresh_in X ψ^[[evar:E↦q]])
Σ: Signature
sz: nat
Γ: Theory
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
E: evar
exdepth, mudepth: nat
gpi: ProofInfo
pf: Γ ⊢i p <---> q using gpi
IHsz: (ψ : Pattern) (wfψ : well_formed ψ), size' ψ ≤ sz → (EvS : EVarSet) (SvS : SVarSet), ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ p q wfψ wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ ⊆ SvS → Γ ⊢i ψ^[[evar:E↦p]] <---> ψ^[[evar:E↦q]] using gpi
ψ: Pattern
wfψ: well_formed (mu , ψ)
Hsz: S (size' ψ) ≤ S sz
EvS: EVarSet
SvS: SVarSet
i':= ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (mu , ψ))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (mu , ψ))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (mu , ψ)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E (mu , ψ) p q wfψ wfp wfq): ProofInfo
pile: ProofInfoLe i' gpi
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
E_in_EvS: E ∈ EvS
ψ_sub_EvS: free_evars (mu , ψ) ⊆ EvS
p_sub_SvS: free_svars p ⊆ SvS
q_sub_SvS: free_svars q ⊆ SvS
ψ_sub_SvS: free_svars (mu , ψ) ⊆ SvS
HEinψ: E ∈ free_evars ψ
X: svar
HeqX: X = svar_fresh (elements SvS)
frX: X ∉ SvS
H: well_formed ψ^{svar:0↦X} = true
H0: size' ψ^{svar:0↦X} ≤ sz
IH: Γ ⊢i ψ^[[evar:E↦p]]^[svar:0↦ patt_free_svar X] <---> ψ^[[evar:E↦q]]^[svar:0↦ patt_free_svar X] using gpi
IH1: Γ ⊢i ψ^[[evar:E↦p]]^[svar:0↦ patt_free_svar X] ---> ψ^[[evar:E↦q]]^[svar:0↦ patt_free_svar X] using gpi
IH2: Γ ⊢i ψ^[[evar:E↦q]]^[svar:0↦ patt_free_svar X] ---> ψ^[[evar:E↦p]]^[svar:0↦ patt_free_svar X] using gpi

ProofInfoLe (ExGen := ∅, SVSubst := {[X]}, KT := true, FP := ∅) gpi
Σ: Signature
sz: nat
Γ: Theory
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
E: evar
exdepth, mudepth: nat
gpi: ProofInfo
pf: Γ ⊢i p <---> q using gpi
IHsz: (ψ : Pattern) (wfψ : well_formed ψ), size' ψ ≤ sz → (EvS : EVarSet) (SvS : SVarSet), ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ p q wfψ wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ ⊆ SvS → Γ ⊢i ψ^[[evar:E↦p]] <---> ψ^[[evar:E↦q]] using gpi
ψ: Pattern
wfψ: well_formed (mu , ψ)
Hsz: S (size' ψ) ≤ S sz
EvS: EVarSet
SvS: SVarSet
i':= ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (mu , ψ))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (mu , ψ))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (mu , ψ)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E (mu , ψ) p q wfψ wfp wfq): ProofInfo
pile: ProofInfoLe i' gpi
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
E_in_EvS: E ∈ EvS
ψ_sub_EvS: free_evars (mu , ψ) ⊆ EvS
p_sub_SvS: free_svars p ⊆ SvS
q_sub_SvS: free_svars q ⊆ SvS
ψ_sub_SvS: free_svars (mu , ψ) ⊆ SvS
HEinψ: E ∈ free_evars ψ
X: svar
HeqX: X = svar_fresh (elements SvS)
frX: X ∉ SvS
H: well_formed ψ^{svar:0↦X} = true
H0: size' ψ^{svar:0↦X} ≤ sz
IH: Γ ⊢i ψ^[[evar:E↦p]]^[svar:0↦ patt_free_svar X] <---> ψ^[[evar:E↦q]]^[svar:0↦ patt_free_svar X] using gpi
IH1: Γ ⊢i ψ^[[evar:E↦p]]^[svar:0↦ patt_free_svar X] ---> ψ^[[evar:E↦q]]^[svar:0↦ patt_free_svar X] using gpi
IH2: Γ ⊢i ψ^[[evar:E↦q]]^[svar:0↦ patt_free_svar X] ---> ψ^[[evar:E↦p]]^[svar:0↦ patt_free_svar X] using gpi

ProofInfoLe (ExGen := ∅, SVSubst := {[X]}, KT := true, FP := ∅) gpi
abstract ( subst i'; eapply pile_trans;[|apply pile]; apply pile_evs_svs_kt; [(clear; set_solver) |(simpl; rewrite mmdoeip_S_in; [(exact HEinψ)|]; simpl; unfold svar_fresh_s; rewrite -HeqX; clear; set_solver )|(repeat case_match; simpl in *; try reflexivity; pose proof (Htmp := e); rewrite mmdoeip_S_in in Htmp; [exact HEinψ|]; inversion Htmp)|(clear; set_solver)] ). }
Σ: Signature
sz: nat
Γ: Theory
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
E: evar
exdepth, mudepth: nat
gpi: ProofInfo
pf: Γ ⊢i p <---> q using gpi
IHsz: (ψ : Pattern) (wfψ : well_formed ψ), size' ψ ≤ sz → (EvS : EVarSet) (SvS : SVarSet), ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ p q wfψ wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ ⊆ SvS → Γ ⊢i ψ^[[evar:E↦p]] <---> ψ^[[evar:E↦q]] using gpi
ψ: Pattern
wfψ: well_formed (mu , ψ)
Hsz: S (size' ψ) ≤ S sz
EvS: EVarSet
SvS: SVarSet
i':= ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (mu , ψ))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (mu , ψ))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (mu , ψ)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E (mu , ψ) p q wfψ wfp wfq): ProofInfo
pile: ProofInfoLe i' gpi
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
E_in_EvS: E ∈ EvS
ψ_sub_EvS: free_evars (mu , ψ) ⊆ EvS
p_sub_SvS: free_svars p ⊆ SvS
q_sub_SvS: free_svars q ⊆ SvS
ψ_sub_SvS: free_svars (mu , ψ) ⊆ SvS
HEinψ: E ∈ free_evars ψ
X: svar
HeqX: X = svar_fresh (elements SvS)
frX: X ∉ SvS
H: well_formed ψ^{svar:0↦X} = true
H0: size' ψ^{svar:0↦X} ≤ sz
IH: Γ ⊢i ψ^[[evar:E↦p]]^[svar:0↦ patt_free_svar X] <---> ψ^[[evar:E↦q]]^[svar:0↦ patt_free_svar X] using gpi
IH1: Γ ⊢i ψ^[[evar:E↦p]]^[svar:0↦ patt_free_svar X] ---> ψ^[[evar:E↦q]]^[svar:0↦ patt_free_svar X] using gpi
IH2: Γ ⊢i ψ^[[evar:E↦q]]^[svar:0↦ patt_free_svar X] ---> ψ^[[evar:E↦p]]^[svar:0↦ patt_free_svar X] using gpi

well_formed (mu , ψ^[[evar:E↦p]]^{svar:0↦X}^{{svar:X↦0}})
Σ: Signature
sz: nat
Γ: Theory
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
E: evar
exdepth, mudepth: nat
gpi: ProofInfo
pf: Γ ⊢i p <---> q using gpi
IHsz: (ψ : Pattern) (wfψ : well_formed ψ), size' ψ ≤ sz → (EvS : EVarSet) (SvS : SVarSet), ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ p q wfψ wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ ⊆ SvS → Γ ⊢i ψ^[[evar:E↦p]] <---> ψ^[[evar:E↦q]] using gpi
ψ: Pattern
wfψ: well_formed (mu , ψ)
Hsz: S (size' ψ) ≤ S sz
EvS: EVarSet
SvS: SVarSet
i':= ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (mu , ψ))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (mu , ψ))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (mu , ψ)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E (mu , ψ) p q wfψ wfp wfq): ProofInfo
pile: ProofInfoLe i' gpi
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
E_in_EvS: E ∈ EvS
ψ_sub_EvS: free_evars (mu , ψ) ⊆ EvS
p_sub_SvS: free_svars p ⊆ SvS
q_sub_SvS: free_svars q ⊆ SvS
ψ_sub_SvS: free_svars (mu , ψ) ⊆ SvS
HEinψ: E ∈ free_evars ψ
X: svar
HeqX: X = svar_fresh (elements SvS)
frX: X ∉ SvS
H: well_formed ψ^{svar:0↦X} = true
H0: size' ψ^{svar:0↦X} ≤ sz
IH: Γ ⊢i ψ^[[evar:E↦p]]^[svar:0↦ patt_free_svar X] <---> ψ^[[evar:E↦q]]^[svar:0↦ patt_free_svar X] using gpi
IH1: Γ ⊢i ψ^[[evar:E↦p]]^[svar:0↦ patt_free_svar X] ---> ψ^[[evar:E↦q]]^[svar:0↦ patt_free_svar X] using gpi
IH2: Γ ⊢i ψ^[[evar:E↦q]]^[svar:0↦ patt_free_svar X] ---> ψ^[[evar:E↦p]]^[svar:0↦ patt_free_svar X] using gpi
well_formed (mu , ψ^[[evar:E↦q]]^{svar:0↦X}^{{svar:X↦0}})
Σ: Signature
sz: nat
Γ: Theory
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
E: evar
exdepth, mudepth: nat
gpi: ProofInfo
pf: Γ ⊢i p <---> q using gpi
IHsz: (ψ : Pattern) (wfψ : well_formed ψ), size' ψ ≤ sz → (EvS : EVarSet) (SvS : SVarSet), ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ p q wfψ wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ ⊆ SvS → Γ ⊢i ψ^[[evar:E↦p]] <---> ψ^[[evar:E↦q]] using gpi
ψ: Pattern
wfψ: well_formed (mu , ψ)
Hsz: S (size' ψ) ≤ S sz
EvS: EVarSet
SvS: SVarSet
i':= ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (mu , ψ))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (mu , ψ))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (mu , ψ)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E (mu , ψ) p q wfψ wfp wfq): ProofInfo
pile: ProofInfoLe i' gpi
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
E_in_EvS: E ∈ EvS
ψ_sub_EvS: free_evars (mu , ψ) ⊆ EvS
p_sub_SvS: free_svars p ⊆ SvS
q_sub_SvS: free_svars q ⊆ SvS
ψ_sub_SvS: free_svars (mu , ψ) ⊆ SvS
HEinψ: E ∈ free_evars ψ
X: svar
HeqX: X = svar_fresh (elements SvS)
frX: X ∉ SvS
H: well_formed ψ^{svar:0↦X} = true
H0: size' ψ^{svar:0↦X} ≤ sz
IH: Γ ⊢i ψ^[[evar:E↦p]]^[svar:0↦ patt_free_svar X] <---> ψ^[[evar:E↦q]]^[svar:0↦ patt_free_svar X] using gpi
IH1: Γ ⊢i ψ^[[evar:E↦p]]^[svar:0↦ patt_free_svar X] ---> ψ^[[evar:E↦q]]^[svar:0↦ patt_free_svar X] using gpi
IH2: Γ ⊢i ψ^[[evar:E↦q]]^[svar:0↦ patt_free_svar X] ---> ψ^[[evar:E↦p]]^[svar:0↦ patt_free_svar X] using gpi
Γ ⊢i (mu , ψ^[[evar:E↦p]]^{svar:0↦X}^{{svar:X↦0}}) ---> (mu , ψ^[[evar:E↦q]]^{svar:0↦X}^{{svar:X↦0}}) using gpi
Σ: Signature
sz: nat
Γ: Theory
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
E: evar
exdepth, mudepth: nat
gpi: ProofInfo
pf: Γ ⊢i p <---> q using gpi
IHsz: (ψ : Pattern) (wfψ : well_formed ψ), size' ψ ≤ sz → (EvS : EVarSet) (SvS : SVarSet), ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ p q wfψ wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ ⊆ SvS → Γ ⊢i ψ^[[evar:E↦p]] <---> ψ^[[evar:E↦q]] using gpi
ψ: Pattern
wfψ: well_formed (mu , ψ)
Hsz: S (size' ψ) ≤ S sz
EvS: EVarSet
SvS: SVarSet
i':= ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (mu , ψ))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (mu , ψ))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (mu , ψ)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E (mu , ψ) p q wfψ wfp wfq): ProofInfo
pile: ProofInfoLe i' gpi
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
E_in_EvS: E ∈ EvS
ψ_sub_EvS: free_evars (mu , ψ) ⊆ EvS
p_sub_SvS: free_svars p ⊆ SvS
q_sub_SvS: free_svars q ⊆ SvS
ψ_sub_SvS: free_svars (mu , ψ) ⊆ SvS
HEinψ: E ∈ free_evars ψ
X: svar
HeqX: X = svar_fresh (elements SvS)
frX: X ∉ SvS
H: well_formed ψ^{svar:0↦X} = true
H0: size' ψ^{svar:0↦X} ≤ sz
IH: Γ ⊢i ψ^[[evar:E↦p]]^[svar:0↦ patt_free_svar X] <---> ψ^[[evar:E↦q]]^[svar:0↦ patt_free_svar X] using gpi
IH1: Γ ⊢i ψ^[[evar:E↦p]]^[svar:0↦ patt_free_svar X] ---> ψ^[[evar:E↦q]]^[svar:0↦ patt_free_svar X] using gpi
IH2: Γ ⊢i ψ^[[evar:E↦q]]^[svar:0↦ patt_free_svar X] ---> ψ^[[evar:E↦p]]^[svar:0↦ patt_free_svar X] using gpi

Γ ⊢i (mu , ψ^[[evar:E↦p]]^{svar:0↦X}^{{svar:X↦0}}) ---> (mu , ψ^[[evar:E↦q]]^{svar:0↦X}^{{svar:X↦0}}) using gpi
Σ: Signature
sz: nat
Γ: Theory
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
E: evar
exdepth, mudepth: nat
gpi: ProofInfo
pf: Γ ⊢i p <---> q using gpi
IHsz: (ψ : Pattern) (wfψ : well_formed ψ), size' ψ ≤ sz → (EvS : EVarSet) (SvS : SVarSet), ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ p q wfψ wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ ⊆ SvS → Γ ⊢i ψ^[[evar:E↦p]] <---> ψ^[[evar:E↦q]] using gpi
ψ: Pattern
wfψ: well_formed (mu , ψ)
Hsz: S (size' ψ) ≤ S sz
EvS: EVarSet
SvS: SVarSet
i':= ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (mu , ψ))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (mu , ψ))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (mu , ψ)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E (mu , ψ) p q wfψ wfp wfq): ProofInfo
pile: ProofInfoLe i' gpi
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
E_in_EvS: E ∈ EvS
ψ_sub_EvS: free_evars (mu , ψ) ⊆ EvS
p_sub_SvS: free_svars p ⊆ SvS
q_sub_SvS: free_svars q ⊆ SvS
ψ_sub_SvS: free_svars (mu , ψ) ⊆ SvS
HEinψ: E ∈ free_evars ψ
X: svar
HeqX: X = svar_fresh (elements SvS)
frX: X ∉ SvS
H: well_formed ψ^{svar:0↦X} = true
H0: size' ψ^{svar:0↦X} ≤ sz
IH: Γ ⊢i ψ^[[evar:E↦p]]^[svar:0↦ patt_free_svar X] <---> ψ^[[evar:E↦q]]^[svar:0↦ patt_free_svar X] using gpi
IH1: Γ ⊢i ψ^[[evar:E↦p]]^[svar:0↦ patt_free_svar X] ---> ψ^[[evar:E↦q]]^[svar:0↦ patt_free_svar X] using gpi
IH2: Γ ⊢i ψ^[[evar:E↦q]]^[svar:0↦ patt_free_svar X] ---> ψ^[[evar:E↦p]]^[svar:0↦ patt_free_svar X] using gpi

ProofInfoLe (ExGen := ∅, SVSubst := {[X]}, KT := true, FP := ∅) gpi
Σ: Signature
sz: nat
Γ: Theory
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
E: evar
exdepth, mudepth: nat
gpi: ProofInfo
pf: Γ ⊢i p <---> q using gpi
IHsz: (ψ : Pattern) (wfψ : well_formed ψ), size' ψ ≤ sz → (EvS : EVarSet) (SvS : SVarSet), ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ p q wfψ wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ ⊆ SvS → Γ ⊢i ψ^[[evar:E↦p]] <---> ψ^[[evar:E↦q]] using gpi
ψ: Pattern
wfψ: well_formed (mu , ψ)
Hsz: S (size' ψ) ≤ S sz
EvS: EVarSet
SvS: SVarSet
i':= ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (mu , ψ))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (mu , ψ))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (mu , ψ)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E (mu , ψ) p q wfψ wfp wfq): ProofInfo
pile: ProofInfoLe i' gpi
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
E_in_EvS: E ∈ EvS
ψ_sub_EvS: free_evars (mu , ψ) ⊆ EvS
p_sub_SvS: free_svars p ⊆ SvS
q_sub_SvS: free_svars q ⊆ SvS
ψ_sub_SvS: free_svars (mu , ψ) ⊆ SvS
HEinψ: E ∈ free_evars ψ
X: svar
HeqX: X = svar_fresh (elements SvS)
frX: X ∉ SvS
H: well_formed ψ^{svar:0↦X} = true
H0: size' ψ^{svar:0↦X} ≤ sz
IH: Γ ⊢i ψ^[[evar:E↦p]]^[svar:0↦ patt_free_svar X] <---> ψ^[[evar:E↦q]]^[svar:0↦ patt_free_svar X] using gpi
IH1: Γ ⊢i ψ^[[evar:E↦p]]^[svar:0↦ patt_free_svar X] ---> ψ^[[evar:E↦q]]^[svar:0↦ patt_free_svar X] using gpi
IH2: Γ ⊢i ψ^[[evar:E↦q]]^[svar:0↦ patt_free_svar X] ---> ψ^[[evar:E↦p]]^[svar:0↦ patt_free_svar X] using gpi
svar_has_negative_occurrence X ψ^[[evar:E↦p]]^{svar:0↦X} = false
Σ: Signature
sz: nat
Γ: Theory
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
E: evar
exdepth, mudepth: nat
gpi: ProofInfo
pf: Γ ⊢i p <---> q using gpi
IHsz: (ψ : Pattern) (wfψ : well_formed ψ), size' ψ ≤ sz → (EvS : EVarSet) (SvS : SVarSet), ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ p q wfψ wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ ⊆ SvS → Γ ⊢i ψ^[[evar:E↦p]] <---> ψ^[[evar:E↦q]] using gpi
ψ: Pattern
wfψ: well_formed (mu , ψ)
Hsz: S (size' ψ) ≤ S sz
EvS: EVarSet
SvS: SVarSet
i':= ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (mu , ψ))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (mu , ψ))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (mu , ψ)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E (mu , ψ) p q wfψ wfp wfq): ProofInfo
pile: ProofInfoLe i' gpi
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
E_in_EvS: E ∈ EvS
ψ_sub_EvS: free_evars (mu , ψ) ⊆ EvS
p_sub_SvS: free_svars p ⊆ SvS
q_sub_SvS: free_svars q ⊆ SvS
ψ_sub_SvS: free_svars (mu , ψ) ⊆ SvS
HEinψ: E ∈ free_evars ψ
X: svar
HeqX: X = svar_fresh (elements SvS)
frX: X ∉ SvS
H: well_formed ψ^{svar:0↦X} = true
H0: size' ψ^{svar:0↦X} ≤ sz
IH: Γ ⊢i ψ^[[evar:E↦p]]^[svar:0↦ patt_free_svar X] <---> ψ^[[evar:E↦q]]^[svar:0↦ patt_free_svar X] using gpi
IH1: Γ ⊢i ψ^[[evar:E↦p]]^[svar:0↦ patt_free_svar X] ---> ψ^[[evar:E↦q]]^[svar:0↦ patt_free_svar X] using gpi
IH2: Γ ⊢i ψ^[[evar:E↦q]]^[svar:0↦ patt_free_svar X] ---> ψ^[[evar:E↦p]]^[svar:0↦ patt_free_svar X] using gpi
svar_has_negative_occurrence X ψ^[[evar:E↦q]]^{svar:0↦X} = false
Σ: Signature
sz: nat
Γ: Theory
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
E: evar
exdepth, mudepth: nat
gpi: ProofInfo
pf: Γ ⊢i p <---> q using gpi
IHsz: (ψ : Pattern) (wfψ : well_formed ψ), size' ψ ≤ sz → (EvS : EVarSet) (SvS : SVarSet), ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ p q wfψ wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ ⊆ SvS → Γ ⊢i ψ^[[evar:E↦p]] <---> ψ^[[evar:E↦q]] using gpi
ψ: Pattern
wfψ: well_formed (mu , ψ)
Hsz: S (size' ψ) ≤ S sz
EvS: EVarSet
SvS: SVarSet
i':= ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (mu , ψ))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (mu , ψ))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (mu , ψ)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E (mu , ψ) p q wfψ wfp wfq): ProofInfo
pile: ProofInfoLe i' gpi
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
E_in_EvS: E ∈ EvS
ψ_sub_EvS: free_evars (mu , ψ) ⊆ EvS
p_sub_SvS: free_svars p ⊆ SvS
q_sub_SvS: free_svars q ⊆ SvS
ψ_sub_SvS: free_svars (mu , ψ) ⊆ SvS
HEinψ: E ∈ free_evars ψ
X: svar
HeqX: X = svar_fresh (elements SvS)
frX: X ∉ SvS
H: well_formed ψ^{svar:0↦X} = true
H0: size' ψ^{svar:0↦X} ≤ sz
IH: Γ ⊢i ψ^[[evar:E↦p]]^[svar:0↦ patt_free_svar X] <---> ψ^[[evar:E↦q]]^[svar:0↦ patt_free_svar X] using gpi
IH1: Γ ⊢i ψ^[[evar:E↦p]]^[svar:0↦ patt_free_svar X] ---> ψ^[[evar:E↦q]]^[svar:0↦ patt_free_svar X] using gpi
IH2: Γ ⊢i ψ^[[evar:E↦q]]^[svar:0↦ patt_free_svar X] ---> ψ^[[evar:E↦p]]^[svar:0↦ patt_free_svar X] using gpi
Γ ⊢i ψ^[[evar:E↦p]]^{svar:0↦X} ---> ψ^[[evar:E↦q]]^{svar:0↦X} using gpi
Σ: Signature
sz: nat
Γ: Theory
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
E: evar
exdepth, mudepth: nat
gpi: ProofInfo
pf: Γ ⊢i p <---> q using gpi
IHsz: (ψ : Pattern) (wfψ : well_formed ψ), size' ψ ≤ sz → (EvS : EVarSet) (SvS : SVarSet), ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ p q wfψ wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ ⊆ SvS → Γ ⊢i ψ^[[evar:E↦p]] <---> ψ^[[evar:E↦q]] using gpi
ψ: Pattern
wfψ: well_formed (mu , ψ)
Hsz: S (size' ψ) ≤ S sz
EvS: EVarSet
SvS: SVarSet
i':= ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (mu , ψ))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (mu , ψ))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (mu , ψ)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E (mu , ψ) p q wfψ wfp wfq): ProofInfo
pile: ProofInfoLe i' gpi
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
E_in_EvS: E ∈ EvS
ψ_sub_EvS: free_evars (mu , ψ) ⊆ EvS
p_sub_SvS: free_svars p ⊆ SvS
q_sub_SvS: free_svars q ⊆ SvS
ψ_sub_SvS: free_svars (mu , ψ) ⊆ SvS
HEinψ: E ∈ free_evars ψ
X: svar
HeqX: X = svar_fresh (elements SvS)
frX: X ∉ SvS
H: well_formed ψ^{svar:0↦X} = true
H0: size' ψ^{svar:0↦X} ≤ sz
IH: Γ ⊢i ψ^[[evar:E↦p]]^[svar:0↦ patt_free_svar X] <---> ψ^[[evar:E↦q]]^[svar:0↦ patt_free_svar X] using gpi
IH1: Γ ⊢i ψ^[[evar:E↦p]]^[svar:0↦ patt_free_svar X] ---> ψ^[[evar:E↦q]]^[svar:0↦ patt_free_svar X] using gpi
IH2: Γ ⊢i ψ^[[evar:E↦q]]^[svar:0↦ patt_free_svar X] ---> ψ^[[evar:E↦p]]^[svar:0↦ patt_free_svar X] using gpi

Γ ⊢i ψ^[[evar:E↦p]]^{svar:0↦X} ---> ψ^[[evar:E↦q]]^{svar:0↦X} using gpi
Σ: Signature
sz: nat
Γ: Theory
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
E: evar
exdepth, mudepth: nat
gpi: ProofInfo
pf: Γ ⊢i p <---> q using gpi
IHsz: (ψ : Pattern) (wfψ : well_formed ψ), size' ψ ≤ sz → (EvS : EVarSet) (SvS : SVarSet), ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ p q wfψ wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ ⊆ SvS → Γ ⊢i ψ^[[evar:E↦p]] <---> ψ^[[evar:E↦q]] using gpi
ψ: Pattern
wfψ: well_formed (mu , ψ)
Hsz: S (size' ψ) ≤ S sz
EvS: EVarSet
SvS: SVarSet
i':= ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (mu , ψ))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (mu , ψ))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (mu , ψ)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E (mu , ψ) p q wfψ wfp wfq): ProofInfo
pile: ProofInfoLe i' gpi
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
E_in_EvS: E ∈ EvS
ψ_sub_EvS: free_evars (mu , ψ) ⊆ EvS
p_sub_SvS: free_svars p ⊆ SvS
q_sub_SvS: free_svars q ⊆ SvS
ψ_sub_SvS: free_svars (mu , ψ) ⊆ SvS
HEinψ: E ∈ free_evars ψ
X: svar
HeqX: X = svar_fresh (elements SvS)
frX: X ∉ SvS
H: well_formed ψ^{svar:0↦X} = true
H0: size' ψ^{svar:0↦X} ≤ sz
IH: Γ ⊢i ψ^[[evar:E↦p]]^[svar:0↦ patt_free_svar X] <---> ψ^[[evar:E↦q]]^[svar:0↦ patt_free_svar X] using gpi
IH1: Γ ⊢i ψ^[[evar:E↦p]]^[svar:0↦ patt_free_svar X] ---> ψ^[[evar:E↦q]]^[svar:0↦ patt_free_svar X] using gpi
IH2: Γ ⊢i ψ^[[evar:E↦q]]^[svar:0↦ patt_free_svar X] ---> ψ^[[evar:E↦p]]^[svar:0↦ patt_free_svar X] using gpi

Γ ⊢i ψ^[[evar:E↦p]]^[svar:0↦patt_free_svar X] ---> ψ^[[evar:E↦q]]^[svar:0↦patt_free_svar X] using gpi
apply IH1.
Σ: Signature
sz: nat
Γ: Theory
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
E: evar
exdepth, mudepth: nat
gpi: ProofInfo
pf: Γ ⊢i p <---> q using gpi
IHsz: (ψ : Pattern) (wfψ : well_formed ψ), size' ψ ≤ sz → (EvS : EVarSet) (SvS : SVarSet), ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ p q wfψ wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ ⊆ SvS → Γ ⊢i ψ^[[evar:E↦p]] <---> ψ^[[evar:E↦q]] using gpi
ψ: Pattern
wfψ: well_formed (mu , ψ)
Hsz: S (size' ψ) ≤ S sz
EvS: EVarSet
SvS: SVarSet
i':= ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (mu , ψ))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (mu , ψ))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (mu , ψ)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E (mu , ψ) p q wfψ wfp wfq): ProofInfo
pile: ProofInfoLe i' gpi
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
E_in_EvS: E ∈ EvS
ψ_sub_EvS: free_evars (mu , ψ) ⊆ EvS
p_sub_SvS: free_svars p ⊆ SvS
q_sub_SvS: free_svars q ⊆ SvS
ψ_sub_SvS: free_svars (mu , ψ) ⊆ SvS
HEinψ: E ∈ free_evars ψ
X: svar
HeqX: X = svar_fresh (elements SvS)
frX: X ∉ SvS
H: well_formed ψ^{svar:0↦X} = true
H0: size' ψ^{svar:0↦X} ≤ sz
IH: Γ ⊢i ψ^[[evar:E↦p]]^[svar:0↦ patt_free_svar X] <---> ψ^[[evar:E↦q]]^[svar:0↦ patt_free_svar X] using gpi
IH1: Γ ⊢i ψ^[[evar:E↦p]]^[svar:0↦ patt_free_svar X] ---> ψ^[[evar:E↦q]]^[svar:0↦ patt_free_svar X] using gpi
IH2: Γ ⊢i ψ^[[evar:E↦q]]^[svar:0↦ patt_free_svar X] ---> ψ^[[evar:E↦p]]^[svar:0↦ patt_free_svar X] using gpi

ProofInfoLe (ExGen := ∅, SVSubst := {[X]}, KT := true, FP := ∅) gpi
Σ: Signature
sz: nat
Γ: Theory
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
E: evar
exdepth, mudepth: nat
gpi: ProofInfo
pf: Γ ⊢i p <---> q using gpi
IHsz: (ψ : Pattern) (wfψ : well_formed ψ), size' ψ ≤ sz → (EvS : EVarSet) (SvS : SVarSet), ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ p q wfψ wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ ⊆ SvS → Γ ⊢i ψ^[[evar:E↦p]] <---> ψ^[[evar:E↦q]] using gpi
ψ: Pattern
wfψ: well_formed (mu , ψ)
Hsz: S (size' ψ) ≤ S sz
EvS: EVarSet
SvS: SVarSet
i':= ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (mu , ψ))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (mu , ψ))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (mu , ψ)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E (mu , ψ) p q wfψ wfp wfq): ProofInfo
pile: ProofInfoLe i' gpi
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
E_in_EvS: E ∈ EvS
ψ_sub_EvS: free_evars (mu , ψ) ⊆ EvS
p_sub_SvS: free_svars p ⊆ SvS
q_sub_SvS: free_svars q ⊆ SvS
ψ_sub_SvS: free_svars (mu , ψ) ⊆ SvS
HEinψ: E ∈ free_evars ψ
X: svar
HeqX: X = svar_fresh (elements SvS)
frX: X ∉ SvS
H: well_formed ψ^{svar:0↦X} = true
H0: size' ψ^{svar:0↦X} ≤ sz
IH: Γ ⊢i ψ^[[evar:E↦p]]^[svar:0↦ patt_free_svar X] <---> ψ^[[evar:E↦q]]^[svar:0↦ patt_free_svar X] using gpi
IH1: Γ ⊢i ψ^[[evar:E↦p]]^[svar:0↦ patt_free_svar X] ---> ψ^[[evar:E↦q]]^[svar:0↦ patt_free_svar X] using gpi
IH2: Γ ⊢i ψ^[[evar:E↦q]]^[svar:0↦ patt_free_svar X] ---> ψ^[[evar:E↦p]]^[svar:0↦ patt_free_svar X] using gpi
svar_has_negative_occurrence X ψ^[[evar:E↦p]]^{svar:0↦X} = false
Σ: Signature
sz: nat
Γ: Theory
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
E: evar
exdepth, mudepth: nat
gpi: ProofInfo
pf: Γ ⊢i p <---> q using gpi
IHsz: (ψ : Pattern) (wfψ : well_formed ψ), size' ψ ≤ sz → (EvS : EVarSet) (SvS : SVarSet), ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ p q wfψ wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ ⊆ SvS → Γ ⊢i ψ^[[evar:E↦p]] <---> ψ^[[evar:E↦q]] using gpi
ψ: Pattern
wfψ: well_formed (mu , ψ)
Hsz: S (size' ψ) ≤ S sz
EvS: EVarSet
SvS: SVarSet
i':= ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (mu , ψ))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (mu , ψ))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (mu , ψ)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E (mu , ψ) p q wfψ wfp wfq): ProofInfo
pile: ProofInfoLe i' gpi
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
E_in_EvS: E ∈ EvS
ψ_sub_EvS: free_evars (mu , ψ) ⊆ EvS
p_sub_SvS: free_svars p ⊆ SvS
q_sub_SvS: free_svars q ⊆ SvS
ψ_sub_SvS: free_svars (mu , ψ) ⊆ SvS
HEinψ: E ∈ free_evars ψ
X: svar
HeqX: X = svar_fresh (elements SvS)
frX: X ∉ SvS
H: well_formed ψ^{svar:0↦X} = true
H0: size' ψ^{svar:0↦X} ≤ sz
IH: Γ ⊢i ψ^[[evar:E↦p]]^[svar:0↦ patt_free_svar X] <---> ψ^[[evar:E↦q]]^[svar:0↦ patt_free_svar X] using gpi
IH1: Γ ⊢i ψ^[[evar:E↦p]]^[svar:0↦ patt_free_svar X] ---> ψ^[[evar:E↦q]]^[svar:0↦ patt_free_svar X] using gpi
IH2: Γ ⊢i ψ^[[evar:E↦q]]^[svar:0↦ patt_free_svar X] ---> ψ^[[evar:E↦p]]^[svar:0↦ patt_free_svar X] using gpi
svar_has_negative_occurrence X ψ^[[evar:E↦q]]^{svar:0↦X} = false
Σ: Signature
sz: nat
Γ: Theory
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
E: evar
exdepth, mudepth: nat
gpi: ProofInfo
pf: Γ ⊢i p <---> q using gpi
IHsz: (ψ : Pattern) (wfψ : well_formed ψ), size' ψ ≤ sz → (EvS : EVarSet) (SvS : SVarSet), ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ p q wfψ wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ ⊆ SvS → Γ ⊢i ψ^[[evar:E↦p]] <---> ψ^[[evar:E↦q]] using gpi
ψ: Pattern
wfψ: well_formed (mu , ψ)
Hsz: S (size' ψ) ≤ S sz
EvS: EVarSet
SvS: SVarSet
i':= ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (mu , ψ))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (mu , ψ))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (mu , ψ)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E (mu , ψ) p q wfψ wfp wfq): ProofInfo
pile: ProofInfoLe i' gpi
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
E_in_EvS: E ∈ EvS
ψ_sub_EvS: free_evars (mu , ψ) ⊆ EvS
p_sub_SvS: free_svars p ⊆ SvS
q_sub_SvS: free_svars q ⊆ SvS
ψ_sub_SvS: free_svars (mu , ψ) ⊆ SvS
HEinψ: E ∈ free_evars ψ
X: svar
HeqX: X = svar_fresh (elements SvS)
frX: X ∉ SvS
H: well_formed ψ^{svar:0↦X} = true
H0: size' ψ^{svar:0↦X} ≤ sz
IH: Γ ⊢i ψ^[[evar:E↦p]]^[svar:0↦ patt_free_svar X] <---> ψ^[[evar:E↦q]]^[svar:0↦ patt_free_svar X] using gpi
IH1: Γ ⊢i ψ^[[evar:E↦p]]^[svar:0↦ patt_free_svar X] ---> ψ^[[evar:E↦q]]^[svar:0↦ patt_free_svar X] using gpi
IH2: Γ ⊢i ψ^[[evar:E↦q]]^[svar:0↦ patt_free_svar X] ---> ψ^[[evar:E↦p]]^[svar:0↦ patt_free_svar X] using gpi

svar_has_negative_occurrence X ψ^[[evar:E↦q]]^{svar:0↦X} = false
Falling back on (svar_has_negative_occurrence X ψ^[[evar:E↦q]]^{svar:0↦X} = false)
Falling back on (svar_is_fresh_in X ψ^[[evar:E↦q]])
Σ: Signature
sz: nat
Γ: Theory
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
E: evar
exdepth, mudepth: nat
gpi: ProofInfo
pf: Γ ⊢i p <---> q using gpi
IHsz: (ψ : Pattern) (wfψ : well_formed ψ), size' ψ ≤ sz → (EvS : EVarSet) (SvS : SVarSet), ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ p q wfψ wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ ⊆ SvS → Γ ⊢i ψ^[[evar:E↦p]] <---> ψ^[[evar:E↦q]] using gpi
ψ: Pattern
wfψ: well_formed (mu , ψ)
Hsz: S (size' ψ) ≤ S sz
EvS: EVarSet
SvS: SVarSet
i':= ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (mu , ψ))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (mu , ψ))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (mu , ψ)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E (mu , ψ) p q wfψ wfp wfq): ProofInfo
pile: ProofInfoLe i' gpi
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
E_in_EvS: E ∈ EvS
ψ_sub_EvS: free_evars (mu , ψ) ⊆ EvS
p_sub_SvS: free_svars p ⊆ SvS
q_sub_SvS: free_svars q ⊆ SvS
ψ_sub_SvS: free_svars (mu , ψ) ⊆ SvS
HEinψ: E ∈ free_evars ψ
X: svar
HeqX: X = svar_fresh (elements SvS)
frX: X ∉ SvS
H: well_formed ψ^{svar:0↦X} = true
H0: size' ψ^{svar:0↦X} ≤ sz
IH: Γ ⊢i ψ^[[evar:E↦p]]^[svar:0↦ patt_free_svar X] <---> ψ^[[evar:E↦q]]^[svar:0↦ patt_free_svar X] using gpi
IH1: Γ ⊢i ψ^[[evar:E↦p]]^[svar:0↦ patt_free_svar X] ---> ψ^[[evar:E↦q]]^[svar:0↦ patt_free_svar X] using gpi
IH2: Γ ⊢i ψ^[[evar:E↦q]]^[svar:0↦ patt_free_svar X] ---> ψ^[[evar:E↦p]]^[svar:0↦ patt_free_svar X] using gpi

ProofInfoLe (ExGen := ∅, SVSubst := {[X]}, KT := true, FP := ∅) gpi
Σ: Signature
sz: nat
Γ: Theory
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
E: evar
exdepth, mudepth: nat
gpi: ProofInfo
pf: Γ ⊢i p <---> q using gpi
IHsz: (ψ : Pattern) (wfψ : well_formed ψ), size' ψ ≤ sz → (EvS : EVarSet) (SvS : SVarSet), ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ p q wfψ wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ ⊆ SvS → Γ ⊢i ψ^[[evar:E↦p]] <---> ψ^[[evar:E↦q]] using gpi
ψ: Pattern
wfψ: well_formed (mu , ψ)
Hsz: S (size' ψ) ≤ S sz
EvS: EVarSet
SvS: SVarSet
i':= ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (mu , ψ))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (mu , ψ))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (mu , ψ)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E (mu , ψ) p q wfψ wfp wfq): ProofInfo
pile: ProofInfoLe i' gpi
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
E_in_EvS: E ∈ EvS
ψ_sub_EvS: free_evars (mu , ψ) ⊆ EvS
p_sub_SvS: free_svars p ⊆ SvS
q_sub_SvS: free_svars q ⊆ SvS
ψ_sub_SvS: free_svars (mu , ψ) ⊆ SvS
HEinψ: E ∈ free_evars ψ
X: svar
HeqX: X = svar_fresh (elements SvS)
frX: X ∉ SvS
H: well_formed ψ^{svar:0↦X} = true
H0: size' ψ^{svar:0↦X} ≤ sz
IH: Γ ⊢i ψ^[[evar:E↦p]]^[svar:0↦ patt_free_svar X] <---> ψ^[[evar:E↦q]]^[svar:0↦ patt_free_svar X] using gpi
IH1: Γ ⊢i ψ^[[evar:E↦p]]^[svar:0↦ patt_free_svar X] ---> ψ^[[evar:E↦q]]^[svar:0↦ patt_free_svar X] using gpi
IH2: Γ ⊢i ψ^[[evar:E↦q]]^[svar:0↦ patt_free_svar X] ---> ψ^[[evar:E↦p]]^[svar:0↦ patt_free_svar X] using gpi
svar_has_negative_occurrence X ψ^[[evar:E↦p]]^{svar:0↦X} = false
Σ: Signature
sz: nat
Γ: Theory
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
E: evar
exdepth, mudepth: nat
gpi: ProofInfo
pf: Γ ⊢i p <---> q using gpi
IHsz: (ψ : Pattern) (wfψ : well_formed ψ), size' ψ ≤ sz → (EvS : EVarSet) (SvS : SVarSet), ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ p q wfψ wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ ⊆ SvS → Γ ⊢i ψ^[[evar:E↦p]] <---> ψ^[[evar:E↦q]] using gpi
ψ: Pattern
wfψ: well_formed (mu , ψ)
Hsz: S (size' ψ) ≤ S sz
EvS: EVarSet
SvS: SVarSet
i':= ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (mu , ψ))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (mu , ψ))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (mu , ψ)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E (mu , ψ) p q wfψ wfp wfq): ProofInfo
pile: ProofInfoLe i' gpi
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
E_in_EvS: E ∈ EvS
ψ_sub_EvS: free_evars (mu , ψ) ⊆ EvS
p_sub_SvS: free_svars p ⊆ SvS
q_sub_SvS: free_svars q ⊆ SvS
ψ_sub_SvS: free_svars (mu , ψ) ⊆ SvS
HEinψ: E ∈ free_evars ψ
X: svar
HeqX: X = svar_fresh (elements SvS)
frX: X ∉ SvS
H: well_formed ψ^{svar:0↦X} = true
H0: size' ψ^{svar:0↦X} ≤ sz
IH: Γ ⊢i ψ^[[evar:E↦p]]^[svar:0↦ patt_free_svar X] <---> ψ^[[evar:E↦q]]^[svar:0↦ patt_free_svar X] using gpi
IH1: Γ ⊢i ψ^[[evar:E↦p]]^[svar:0↦ patt_free_svar X] ---> ψ^[[evar:E↦q]]^[svar:0↦ patt_free_svar X] using gpi
IH2: Γ ⊢i ψ^[[evar:E↦q]]^[svar:0↦ patt_free_svar X] ---> ψ^[[evar:E↦p]]^[svar:0↦ patt_free_svar X] using gpi

svar_has_negative_occurrence X ψ^[[evar:E↦p]]^{svar:0↦X} = false
Falling back on (svar_has_negative_occurrence X ψ^[[evar:E↦p]]^{svar:0↦X} = false)
Falling back on (svar_is_fresh_in X ψ^[[evar:E↦p]])
Σ: Signature
sz: nat
Γ: Theory
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
E: evar
exdepth, mudepth: nat
gpi: ProofInfo
pf: Γ ⊢i p <---> q using gpi
IHsz: (ψ : Pattern) (wfψ : well_formed ψ), size' ψ ≤ sz → (EvS : EVarSet) (SvS : SVarSet), ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ p q wfψ wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ ⊆ SvS → Γ ⊢i ψ^[[evar:E↦p]] <---> ψ^[[evar:E↦q]] using gpi
ψ: Pattern
wfψ: well_formed (mu , ψ)
Hsz: S (size' ψ) ≤ S sz
EvS: EVarSet
SvS: SVarSet
i':= ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (mu , ψ))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (mu , ψ))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (mu , ψ)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E (mu , ψ) p q wfψ wfp wfq): ProofInfo
pile: ProofInfoLe i' gpi
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
E_in_EvS: E ∈ EvS
ψ_sub_EvS: free_evars (mu , ψ) ⊆ EvS
p_sub_SvS: free_svars p ⊆ SvS
q_sub_SvS: free_svars q ⊆ SvS
ψ_sub_SvS: free_svars (mu , ψ) ⊆ SvS
HEinψ: E ∈ free_evars ψ
X: svar
HeqX: X = svar_fresh (elements SvS)
frX: X ∉ SvS
H: well_formed ψ^{svar:0↦X} = true
H0: size' ψ^{svar:0↦X} ≤ sz
IH: Γ ⊢i ψ^[[evar:E↦p]]^[svar:0↦ patt_free_svar X] <---> ψ^[[evar:E↦q]]^[svar:0↦ patt_free_svar X] using gpi
IH1: Γ ⊢i ψ^[[evar:E↦p]]^[svar:0↦ patt_free_svar X] ---> ψ^[[evar:E↦q]]^[svar:0↦ patt_free_svar X] using gpi
IH2: Γ ⊢i ψ^[[evar:E↦q]]^[svar:0↦ patt_free_svar X] ---> ψ^[[evar:E↦p]]^[svar:0↦ patt_free_svar X] using gpi

ProofInfoLe (ExGen := ∅, SVSubst := {[X]}, KT := true, FP := ∅) gpi
Σ: Signature
sz: nat
Γ: Theory
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
E: evar
exdepth, mudepth: nat
gpi: ProofInfo
pf: Γ ⊢i p <---> q using gpi
IHsz: (ψ : Pattern) (wfψ : well_formed ψ), size' ψ ≤ sz → (EvS : EVarSet) (SvS : SVarSet), ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ p q wfψ wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ ⊆ SvS → Γ ⊢i ψ^[[evar:E↦p]] <---> ψ^[[evar:E↦q]] using gpi
ψ: Pattern
wfψ: well_formed (mu , ψ)
Hsz: S (size' ψ) ≤ S sz
EvS: EVarSet
SvS: SVarSet
i':= ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (mu , ψ))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (mu , ψ))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (mu , ψ)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E (mu , ψ) p q wfψ wfp wfq): ProofInfo
pile: ProofInfoLe i' gpi
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
E_in_EvS: E ∈ EvS
ψ_sub_EvS: free_evars (mu , ψ) ⊆ EvS
p_sub_SvS: free_svars p ⊆ SvS
q_sub_SvS: free_svars q ⊆ SvS
ψ_sub_SvS: free_svars (mu , ψ) ⊆ SvS
HEinψ: E ∈ free_evars ψ
X: svar
HeqX: X = svar_fresh (elements SvS)
frX: X ∉ SvS
H: well_formed ψ^{svar:0↦X} = true
H0: size' ψ^{svar:0↦X} ≤ sz
IH: Γ ⊢i ψ^[[evar:E↦p]]^[svar:0↦ patt_free_svar X] <---> ψ^[[evar:E↦q]]^[svar:0↦ patt_free_svar X] using gpi
IH1: Γ ⊢i ψ^[[evar:E↦p]]^[svar:0↦ patt_free_svar X] ---> ψ^[[evar:E↦q]]^[svar:0↦ patt_free_svar X] using gpi
IH2: Γ ⊢i ψ^[[evar:E↦q]]^[svar:0↦ patt_free_svar X] ---> ψ^[[evar:E↦p]]^[svar:0↦ patt_free_svar X] using gpi

ProofInfoLe (ExGen := ∅, SVSubst := {[X]}, KT := true, FP := ∅) gpi
abstract ( subst i'; eapply pile_trans;[|apply pile]; apply pile_evs_svs_kt; [(clear; set_solver) |(simpl; rewrite mmdoeip_S_in; [(exact HEinψ)|]; simpl; unfold svar_fresh_s; rewrite -HeqX; clear; set_solver )|(repeat case_match; simpl in *; try reflexivity; pose proof (Htmp := e); rewrite mmdoeip_S_in in Htmp; [exact HEinψ|]; inversion Htmp)|(clear; set_solver)] ). }
Σ: Signature
sz: nat
Γ: Theory
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
E: evar
exdepth, mudepth: nat
gpi: ProofInfo
pf: Γ ⊢i p <---> q using gpi
IHsz: (ψ : Pattern) (wfψ : well_formed ψ), size' ψ ≤ sz → (EvS : EVarSet) (SvS : SVarSet), ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ p q wfψ wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ ⊆ SvS → Γ ⊢i ψ^[[evar:E↦p]] <---> ψ^[[evar:E↦q]] using gpi
ψ: Pattern
wfψ: well_formed (mu , ψ)
Hsz: S (size' ψ) ≤ S sz
EvS: EVarSet
SvS: SVarSet
i':= ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (mu , ψ))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (mu , ψ))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (mu , ψ)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E (mu , ψ) p q wfψ wfp wfq): ProofInfo
pile: ProofInfoLe i' gpi
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
E_in_EvS: E ∈ EvS
ψ_sub_EvS: free_evars (mu , ψ) ⊆ EvS
p_sub_SvS: free_svars p ⊆ SvS
q_sub_SvS: free_svars q ⊆ SvS
ψ_sub_SvS: free_svars (mu , ψ) ⊆ SvS
HEinψ: E ∈ free_evars ψ
X: svar
HeqX: X = svar_fresh (elements SvS)
frX: X ∉ SvS
H: well_formed ψ^{svar:0↦X} = true
H0: size' ψ^{svar:0↦X} ≤ sz
IH: Γ ⊢i ψ^[[evar:E↦p]]^[svar:0↦ patt_free_svar X] <---> ψ^[[evar:E↦q]]^[svar:0↦ patt_free_svar X] using gpi
IH1: Γ ⊢i ψ^[[evar:E↦p]]^[svar:0↦ patt_free_svar X] ---> ψ^[[evar:E↦q]]^[svar:0↦ patt_free_svar X] using gpi
IH2: Γ ⊢i ψ^[[evar:E↦q]]^[svar:0↦ patt_free_svar X] ---> ψ^[[evar:E↦p]]^[svar:0↦ patt_free_svar X] using gpi

well_formed (mu , ψ^[[evar:E↦p]]^{svar:0↦X}^{{svar:X↦0}})
Σ: Signature
sz: nat
Γ: Theory
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
E: evar
exdepth, mudepth: nat
gpi: ProofInfo
pf: Γ ⊢i p <---> q using gpi
IHsz: (ψ : Pattern) (wfψ : well_formed ψ), size' ψ ≤ sz → (EvS : EVarSet) (SvS : SVarSet), ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ p q wfψ wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ ⊆ SvS → Γ ⊢i ψ^[[evar:E↦p]] <---> ψ^[[evar:E↦q]] using gpi
ψ: Pattern
wfψ: well_formed (mu , ψ)
Hsz: S (size' ψ) ≤ S sz
EvS: EVarSet
SvS: SVarSet
i':= ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (mu , ψ))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (mu , ψ))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (mu , ψ)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E (mu , ψ) p q wfψ wfp wfq): ProofInfo
pile: ProofInfoLe i' gpi
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
E_in_EvS: E ∈ EvS
ψ_sub_EvS: free_evars (mu , ψ) ⊆ EvS
p_sub_SvS: free_svars p ⊆ SvS
q_sub_SvS: free_svars q ⊆ SvS
ψ_sub_SvS: free_svars (mu , ψ) ⊆ SvS
HEinψ: E ∈ free_evars ψ
X: svar
HeqX: X = svar_fresh (elements SvS)
frX: X ∉ SvS
H: well_formed ψ^{svar:0↦X} = true
H0: size' ψ^{svar:0↦X} ≤ sz
IH: Γ ⊢i ψ^[[evar:E↦p]]^[svar:0↦ patt_free_svar X] <---> ψ^[[evar:E↦q]]^[svar:0↦ patt_free_svar X] using gpi
IH1: Γ ⊢i ψ^[[evar:E↦p]]^[svar:0↦ patt_free_svar X] ---> ψ^[[evar:E↦q]]^[svar:0↦ patt_free_svar X] using gpi
IH2: Γ ⊢i ψ^[[evar:E↦q]]^[svar:0↦ patt_free_svar X] ---> ψ^[[evar:E↦p]]^[svar:0↦ patt_free_svar X] using gpi
well_formed (mu , ψ^[[evar:E↦q]]^{svar:0↦X}^{{svar:X↦0}})
Σ: Signature
sz: nat
Γ: Theory
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
E: evar
exdepth, mudepth: nat
gpi: ProofInfo
pf: Γ ⊢i p <---> q using gpi
IHsz: (ψ : Pattern) (wfψ : well_formed ψ), size' ψ ≤ sz → (EvS : EVarSet) (SvS : SVarSet), ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ p q wfψ wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ ⊆ SvS → Γ ⊢i ψ^[[evar:E↦p]] <---> ψ^[[evar:E↦q]] using gpi
ψ: Pattern
wfψ: well_formed (mu , ψ)
Hsz: S (size' ψ) ≤ S sz
EvS: EVarSet
SvS: SVarSet
i':= ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (mu , ψ))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (mu , ψ))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (mu , ψ)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E (mu , ψ) p q wfψ wfp wfq): ProofInfo
pile: ProofInfoLe i' gpi
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
E_in_EvS: E ∈ EvS
ψ_sub_EvS: free_evars (mu , ψ) ⊆ EvS
p_sub_SvS: free_svars p ⊆ SvS
q_sub_SvS: free_svars q ⊆ SvS
ψ_sub_SvS: free_svars (mu , ψ) ⊆ SvS
HEinψ: E ∈ free_evars ψ
X: svar
HeqX: X = svar_fresh (elements SvS)
frX: X ∉ SvS
H: well_formed ψ^{svar:0↦X} = true
H0: size' ψ^{svar:0↦X} ≤ sz
IH: Γ ⊢i ψ^[[evar:E↦p]]^[svar:0↦ patt_free_svar X] <---> ψ^[[evar:E↦q]]^[svar:0↦ patt_free_svar X] using gpi
IH1: Γ ⊢i ψ^[[evar:E↦p]]^[svar:0↦ patt_free_svar X] ---> ψ^[[evar:E↦q]]^[svar:0↦ patt_free_svar X] using gpi
IH2: Γ ⊢i ψ^[[evar:E↦q]]^[svar:0↦ patt_free_svar X] ---> ψ^[[evar:E↦p]]^[svar:0↦ patt_free_svar X] using gpi

well_formed (mu , ψ^[[evar:E↦p]]^{svar:0↦X}^{{svar:X↦0}})
Σ: Signature
sz: nat
Γ: Theory
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
E: evar
exdepth, mudepth: nat
gpi: ProofInfo
pf: Γ ⊢i p <---> q using gpi
IHsz: (ψ : Pattern) (wfψ : well_formed ψ), size' ψ ≤ sz → (EvS : EVarSet) (SvS : SVarSet), ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ p q wfψ wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ ⊆ SvS → Γ ⊢i ψ^[[evar:E↦p]] <---> ψ^[[evar:E↦q]] using gpi
ψ: Pattern
wfψ: well_formed (mu , ψ)
Hsz: S (size' ψ) ≤ S sz
EvS: EVarSet
SvS: SVarSet
i':= ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (mu , ψ))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (mu , ψ))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (mu , ψ)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E (mu , ψ) p q wfψ wfp wfq): ProofInfo
pile: ProofInfoLe i' gpi
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
E_in_EvS: E ∈ EvS
ψ_sub_EvS: free_evars (mu , ψ) ⊆ EvS
p_sub_SvS: free_svars p ⊆ SvS
q_sub_SvS: free_svars q ⊆ SvS
ψ_sub_SvS: free_svars (mu , ψ) ⊆ SvS
HEinψ: E ∈ free_evars ψ
X: svar
HeqX: X = svar_fresh (elements SvS)
frX: X ∉ SvS
H: well_formed ψ^{svar:0↦X} = true
H0: size' ψ^{svar:0↦X} ≤ sz
IH: Γ ⊢i ψ^[[evar:E↦p]]^[svar:0↦ patt_free_svar X] <---> ψ^[[evar:E↦q]]^[svar:0↦ patt_free_svar X] using gpi
IH1: Γ ⊢i ψ^[[evar:E↦p]]^[svar:0↦ patt_free_svar X] ---> ψ^[[evar:E↦q]]^[svar:0↦ patt_free_svar X] using gpi
IH2: Γ ⊢i ψ^[[evar:E↦q]]^[svar:0↦ patt_free_svar X] ---> ψ^[[evar:E↦p]]^[svar:0↦ patt_free_svar X] using gpi

X ∉ free_svars ψ^[[evar:E↦p]] → well_formed (mu , ψ^[[evar:E↦p]]^{svar:0↦X}^{{svar:X↦0}})
Σ: Signature
sz: nat
Γ: Theory
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
E: evar
exdepth, mudepth: nat
gpi: ProofInfo
pf: Γ ⊢i p <---> q using gpi
IHsz: (ψ : Pattern) (wfψ : well_formed ψ), size' ψ ≤ sz → (EvS : EVarSet) (SvS : SVarSet), ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ p q wfψ wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ ⊆ SvS → Γ ⊢i ψ^[[evar:E↦p]] <---> ψ^[[evar:E↦q]] using gpi
ψ: Pattern
wfψ: well_formed (mu , ψ)
Hsz: S (size' ψ) ≤ S sz
EvS: EVarSet
SvS: SVarSet
i':= ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (mu , ψ))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (mu , ψ))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (mu , ψ)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E (mu , ψ) p q wfψ wfp wfq): ProofInfo
pile: ProofInfoLe i' gpi
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
E_in_EvS: E ∈ EvS
ψ_sub_EvS: free_evars (mu , ψ) ⊆ EvS
p_sub_SvS: free_svars p ⊆ SvS
q_sub_SvS: free_svars q ⊆ SvS
ψ_sub_SvS: free_svars (mu , ψ) ⊆ SvS
HEinψ: E ∈ free_evars ψ
X: svar
HeqX: X = svar_fresh (elements SvS)
frX: X ∉ SvS
H: well_formed ψ^{svar:0↦X} = true
H0: size' ψ^{svar:0↦X} ≤ sz
IH: Γ ⊢i ψ^[[evar:E↦p]]^[svar:0↦ patt_free_svar X] <---> ψ^[[evar:E↦q]]^[svar:0↦ patt_free_svar X] using gpi
IH1: Γ ⊢i ψ^[[evar:E↦p]]^[svar:0↦ patt_free_svar X] ---> ψ^[[evar:E↦q]]^[svar:0↦ patt_free_svar X] using gpi
IH2: Γ ⊢i ψ^[[evar:E↦q]]^[svar:0↦ patt_free_svar X] ---> ψ^[[evar:E↦p]]^[svar:0↦ patt_free_svar X] using gpi
X ∉ free_svars ψ^[[evar:E↦p]]
Σ: Signature
sz: nat
Γ: Theory
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
E: evar
exdepth, mudepth: nat
gpi: ProofInfo
pf: Γ ⊢i p <---> q using gpi
IHsz: (ψ : Pattern) (wfψ : well_formed ψ), size' ψ ≤ sz → (EvS : EVarSet) (SvS : SVarSet), ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ p q wfψ wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ ⊆ SvS → Γ ⊢i ψ^[[evar:E↦p]] <---> ψ^[[evar:E↦q]] using gpi
ψ: Pattern
wfψ: well_formed (mu , ψ)
Hsz: S (size' ψ) ≤ S sz
EvS: EVarSet
SvS: SVarSet
i':= ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (mu , ψ))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (mu , ψ))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (mu , ψ)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E (mu , ψ) p q wfψ wfp wfq): ProofInfo
pile: ProofInfoLe i' gpi
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
E_in_EvS: E ∈ EvS
ψ_sub_EvS: free_evars (mu , ψ) ⊆ EvS
p_sub_SvS: free_svars p ⊆ SvS
q_sub_SvS: free_svars q ⊆ SvS
ψ_sub_SvS: free_svars (mu , ψ) ⊆ SvS
HEinψ: E ∈ free_evars ψ
X: svar
HeqX: X = svar_fresh (elements SvS)
frX: X ∉ SvS
H: well_formed ψ^{svar:0↦X} = true
H0: size' ψ^{svar:0↦X} ≤ sz
IH: Γ ⊢i ψ^[[evar:E↦p]]^[svar:0↦ patt_free_svar X] <---> ψ^[[evar:E↦q]]^[svar:0↦ patt_free_svar X] using gpi
IH1: Γ ⊢i ψ^[[evar:E↦p]]^[svar:0↦ patt_free_svar X] ---> ψ^[[evar:E↦q]]^[svar:0↦ patt_free_svar X] using gpi
IH2: Γ ⊢i ψ^[[evar:E↦q]]^[svar:0↦ patt_free_svar X] ---> ψ^[[evar:E↦p]]^[svar:0↦ patt_free_svar X] using gpi

X ∉ free_svars ψ^[[evar:E↦p]] → well_formed (mu , ψ^[[evar:E↦p]]^{svar:0↦X}^{{svar:X↦0}})
Σ: Signature
p: Pattern
wfp: well_formed p
E: evar
ψ: Pattern
wfψ: well_formed (mu , ψ)
X: svar

X ∉ free_svars ψ^[[evar:E↦p]] → well_formed (mu , ψ^[[evar:E↦p]]^{svar:0↦X}^{{svar:X↦0}})
Σ: Signature
p: Pattern
wfp: well_formed p
E: evar
ψ: Pattern
wfψ: well_formed (mu , ψ)
X: svar
H: X ∉ free_svars ψ^[[evar:E↦p]]

well_formed (mu , ψ^[[evar:E↦p]]^{svar:0↦X}^{{svar:X↦0}})
(* TODO: this rewrite somewhy does not happen in wf_auto2 *)
Falling back on (is_true (well_formed_closed_mu_aux ψ^[[evar:E↦p]] 1))
Falling back on (well_formed_xy 0 0 (mu , ψ^[[evar:E↦p]]) = true)
Σ: Signature
sz: nat
Γ: Theory
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
E: evar
exdepth, mudepth: nat
gpi: ProofInfo
pf: Γ ⊢i p <---> q using gpi
IHsz: (ψ : Pattern) (wfψ : well_formed ψ), size' ψ ≤ sz → (EvS : EVarSet) (SvS : SVarSet), ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ p q wfψ wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ ⊆ SvS → Γ ⊢i ψ^[[evar:E↦p]] <---> ψ^[[evar:E↦q]] using gpi
ψ: Pattern
wfψ: well_formed (mu , ψ)
Hsz: S (size' ψ) ≤ S sz
EvS: EVarSet
SvS: SVarSet
i':= ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (mu , ψ))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (mu , ψ))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (mu , ψ)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E (mu , ψ) p q wfψ wfp wfq): ProofInfo
pile: ProofInfoLe i' gpi
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
E_in_EvS: E ∈ EvS
ψ_sub_EvS: free_evars (mu , ψ) ⊆ EvS
p_sub_SvS: free_svars p ⊆ SvS
q_sub_SvS: free_svars q ⊆ SvS
ψ_sub_SvS: free_svars (mu , ψ) ⊆ SvS
HEinψ: E ∈ free_evars ψ
X: svar
HeqX: X = svar_fresh (elements SvS)
frX: X ∉ SvS
H: well_formed ψ^{svar:0↦X} = true
H0: size' ψ^{svar:0↦X} ≤ sz
IH: Γ ⊢i ψ^[[evar:E↦p]]^[svar:0↦ patt_free_svar X] <---> ψ^[[evar:E↦q]]^[svar:0↦ patt_free_svar X] using gpi
IH1: Γ ⊢i ψ^[[evar:E↦p]]^[svar:0↦ patt_free_svar X] ---> ψ^[[evar:E↦q]]^[svar:0↦ patt_free_svar X] using gpi
IH2: Γ ⊢i ψ^[[evar:E↦q]]^[svar:0↦ patt_free_svar X] ---> ψ^[[evar:E↦p]]^[svar:0↦ patt_free_svar X] using gpi

X ∉ free_svars ψ^[[evar:E↦p]]
abstract ( pose proof (Htmp := free_svars_free_evar_subst ψ E p); clear -H Htmp frX ψ_sub_SvS p_sub_SvS; set_solver ).
Σ: Signature
sz: nat
Γ: Theory
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
E: evar
exdepth, mudepth: nat
gpi: ProofInfo
pf: Γ ⊢i p <---> q using gpi
IHsz: (ψ : Pattern) (wfψ : well_formed ψ), size' ψ ≤ sz → (EvS : EVarSet) (SvS : SVarSet), ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ p q wfψ wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ ⊆ SvS → Γ ⊢i ψ^[[evar:E↦p]] <---> ψ^[[evar:E↦q]] using gpi
ψ: Pattern
wfψ: well_formed (mu , ψ)
Hsz: S (size' ψ) ≤ S sz
EvS: EVarSet
SvS: SVarSet
i':= ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (mu , ψ))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (mu , ψ))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (mu , ψ)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E (mu , ψ) p q wfψ wfp wfq): ProofInfo
pile: ProofInfoLe i' gpi
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
E_in_EvS: E ∈ EvS
ψ_sub_EvS: free_evars (mu , ψ) ⊆ EvS
p_sub_SvS: free_svars p ⊆ SvS
q_sub_SvS: free_svars q ⊆ SvS
ψ_sub_SvS: free_svars (mu , ψ) ⊆ SvS
HEinψ: E ∈ free_evars ψ
X: svar
HeqX: X = svar_fresh (elements SvS)
frX: X ∉ SvS
H: well_formed ψ^{svar:0↦X} = true
H0: size' ψ^{svar:0↦X} ≤ sz
IH: Γ ⊢i ψ^[[evar:E↦p]]^[svar:0↦ patt_free_svar X] <---> ψ^[[evar:E↦q]]^[svar:0↦ patt_free_svar X] using gpi
IH1: Γ ⊢i ψ^[[evar:E↦p]]^[svar:0↦ patt_free_svar X] ---> ψ^[[evar:E↦q]]^[svar:0↦ patt_free_svar X] using gpi
IH2: Γ ⊢i ψ^[[evar:E↦q]]^[svar:0↦ patt_free_svar X] ---> ψ^[[evar:E↦p]]^[svar:0↦ patt_free_svar X] using gpi

well_formed (mu , ψ^[[evar:E↦q]]^{svar:0↦X}^{{svar:X↦0}})
Σ: Signature
sz: nat
Γ: Theory
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
E: evar
exdepth, mudepth: nat
gpi: ProofInfo
pf: Γ ⊢i p <---> q using gpi
IHsz: (ψ : Pattern) (wfψ : well_formed ψ), size' ψ ≤ sz → (EvS : EVarSet) (SvS : SVarSet), ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ p q wfψ wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ ⊆ SvS → Γ ⊢i ψ^[[evar:E↦p]] <---> ψ^[[evar:E↦q]] using gpi
ψ: Pattern
wfψ: well_formed (mu , ψ)
Hsz: S (size' ψ) ≤ S sz
EvS: EVarSet
SvS: SVarSet
i':= ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (mu , ψ))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (mu , ψ))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (mu , ψ)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E (mu , ψ) p q wfψ wfp wfq): ProofInfo
pile: ProofInfoLe i' gpi
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
E_in_EvS: E ∈ EvS
ψ_sub_EvS: free_evars (mu , ψ) ⊆ EvS
p_sub_SvS: free_svars p ⊆ SvS
q_sub_SvS: free_svars q ⊆ SvS
ψ_sub_SvS: free_svars (mu , ψ) ⊆ SvS
HEinψ: E ∈ free_evars ψ
X: svar
HeqX: X = svar_fresh (elements SvS)
frX: X ∉ SvS
H: well_formed ψ^{svar:0↦X} = true
H0: size' ψ^{svar:0↦X} ≤ sz
IH: Γ ⊢i ψ^[[evar:E↦p]]^[svar:0↦ patt_free_svar X] <---> ψ^[[evar:E↦q]]^[svar:0↦ patt_free_svar X] using gpi
IH1: Γ ⊢i ψ^[[evar:E↦p]]^[svar:0↦ patt_free_svar X] ---> ψ^[[evar:E↦q]]^[svar:0↦ patt_free_svar X] using gpi
IH2: Γ ⊢i ψ^[[evar:E↦q]]^[svar:0↦ patt_free_svar X] ---> ψ^[[evar:E↦p]]^[svar:0↦ patt_free_svar X] using gpi

well_formed (mu , ψ^[[evar:E↦q]]^{svar:0↦X}^{{svar:X↦0}})
Σ: Signature
sz: nat
Γ: Theory
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
E: evar
exdepth, mudepth: nat
gpi: ProofInfo
pf: Γ ⊢i p <---> q using gpi
IHsz: (ψ : Pattern) (wfψ : well_formed ψ), size' ψ ≤ sz → (EvS : EVarSet) (SvS : SVarSet), ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ p q wfψ wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ ⊆ SvS → Γ ⊢i ψ^[[evar:E↦p]] <---> ψ^[[evar:E↦q]] using gpi
ψ: Pattern
wfψ: well_formed (mu , ψ)
Hsz: S (size' ψ) ≤ S sz
EvS: EVarSet
SvS: SVarSet
i':= ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (mu , ψ))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (mu , ψ))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (mu , ψ)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E (mu , ψ) p q wfψ wfp wfq): ProofInfo
pile: ProofInfoLe i' gpi
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
E_in_EvS: E ∈ EvS
ψ_sub_EvS: free_evars (mu , ψ) ⊆ EvS
p_sub_SvS: free_svars p ⊆ SvS
q_sub_SvS: free_svars q ⊆ SvS
ψ_sub_SvS: free_svars (mu , ψ) ⊆ SvS
HEinψ: E ∈ free_evars ψ
X: svar
HeqX: X = svar_fresh (elements SvS)
frX: X ∉ SvS
H: well_formed ψ^{svar:0↦X} = true
H0: size' ψ^{svar:0↦X} ≤ sz
IH: Γ ⊢i ψ^[[evar:E↦p]]^[svar:0↦ patt_free_svar X] <---> ψ^[[evar:E↦q]]^[svar:0↦ patt_free_svar X] using gpi
IH1: Γ ⊢i ψ^[[evar:E↦p]]^[svar:0↦ patt_free_svar X] ---> ψ^[[evar:E↦q]]^[svar:0↦ patt_free_svar X] using gpi
IH2: Γ ⊢i ψ^[[evar:E↦q]]^[svar:0↦ patt_free_svar X] ---> ψ^[[evar:E↦p]]^[svar:0↦ patt_free_svar X] using gpi

X ∉ free_svars ψ^[[evar:E↦q]] → well_formed (mu , ψ^[[evar:E↦q]]^{svar:0↦X}^{{svar:X↦0}})
Σ: Signature
sz: nat
Γ: Theory
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
E: evar
exdepth, mudepth: nat
gpi: ProofInfo
pf: Γ ⊢i p <---> q using gpi
IHsz: (ψ : Pattern) (wfψ : well_formed ψ), size' ψ ≤ sz → (EvS : EVarSet) (SvS : SVarSet), ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ p q wfψ wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ ⊆ SvS → Γ ⊢i ψ^[[evar:E↦p]] <---> ψ^[[evar:E↦q]] using gpi
ψ: Pattern
wfψ: well_formed (mu , ψ)
Hsz: S (size' ψ) ≤ S sz
EvS: EVarSet
SvS: SVarSet
i':= ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (mu , ψ))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (mu , ψ))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (mu , ψ)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E (mu , ψ) p q wfψ wfp wfq): ProofInfo
pile: ProofInfoLe i' gpi
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
E_in_EvS: E ∈ EvS
ψ_sub_EvS: free_evars (mu , ψ) ⊆ EvS
p_sub_SvS: free_svars p ⊆ SvS
q_sub_SvS: free_svars q ⊆ SvS
ψ_sub_SvS: free_svars (mu , ψ) ⊆ SvS
HEinψ: E ∈ free_evars ψ
X: svar
HeqX: X = svar_fresh (elements SvS)
frX: X ∉ SvS
H: well_formed ψ^{svar:0↦X} = true
H0: size' ψ^{svar:0↦X} ≤ sz
IH: Γ ⊢i ψ^[[evar:E↦p]]^[svar:0↦ patt_free_svar X] <---> ψ^[[evar:E↦q]]^[svar:0↦ patt_free_svar X] using gpi
IH1: Γ ⊢i ψ^[[evar:E↦p]]^[svar:0↦ patt_free_svar X] ---> ψ^[[evar:E↦q]]^[svar:0↦ patt_free_svar X] using gpi
IH2: Γ ⊢i ψ^[[evar:E↦q]]^[svar:0↦ patt_free_svar X] ---> ψ^[[evar:E↦p]]^[svar:0↦ patt_free_svar X] using gpi
X ∉ free_svars ψ^[[evar:E↦q]]
Σ: Signature
sz: nat
Γ: Theory
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
E: evar
exdepth, mudepth: nat
gpi: ProofInfo
pf: Γ ⊢i p <---> q using gpi
IHsz: (ψ : Pattern) (wfψ : well_formed ψ), size' ψ ≤ sz → (EvS : EVarSet) (SvS : SVarSet), ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ p q wfψ wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ ⊆ SvS → Γ ⊢i ψ^[[evar:E↦p]] <---> ψ^[[evar:E↦q]] using gpi
ψ: Pattern
wfψ: well_formed (mu , ψ)
Hsz: S (size' ψ) ≤ S sz
EvS: EVarSet
SvS: SVarSet
i':= ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (mu , ψ))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (mu , ψ))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (mu , ψ)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E (mu , ψ) p q wfψ wfp wfq): ProofInfo
pile: ProofInfoLe i' gpi
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
E_in_EvS: E ∈ EvS
ψ_sub_EvS: free_evars (mu , ψ) ⊆ EvS
p_sub_SvS: free_svars p ⊆ SvS
q_sub_SvS: free_svars q ⊆ SvS
ψ_sub_SvS: free_svars (mu , ψ) ⊆ SvS
HEinψ: E ∈ free_evars ψ
X: svar
HeqX: X = svar_fresh (elements SvS)
frX: X ∉ SvS
H: well_formed ψ^{svar:0↦X} = true
H0: size' ψ^{svar:0↦X} ≤ sz
IH: Γ ⊢i ψ^[[evar:E↦p]]^[svar:0↦ patt_free_svar X] <---> ψ^[[evar:E↦q]]^[svar:0↦ patt_free_svar X] using gpi
IH1: Γ ⊢i ψ^[[evar:E↦p]]^[svar:0↦ patt_free_svar X] ---> ψ^[[evar:E↦q]]^[svar:0↦ patt_free_svar X] using gpi
IH2: Γ ⊢i ψ^[[evar:E↦q]]^[svar:0↦ patt_free_svar X] ---> ψ^[[evar:E↦p]]^[svar:0↦ patt_free_svar X] using gpi

X ∉ free_svars ψ^[[evar:E↦q]] → well_formed (mu , ψ^[[evar:E↦q]]^{svar:0↦X}^{{svar:X↦0}})
Σ: Signature
q: Pattern
wfq: well_formed q
E: evar
ψ: Pattern
wfψ: well_formed (mu , ψ)
X: svar

X ∉ free_svars ψ^[[evar:E↦q]] → well_formed (mu , ψ^[[evar:E↦q]]^{svar:0↦X}^{{svar:X↦0}})
Σ: Signature
q: Pattern
wfq: well_formed q
E: evar
ψ: Pattern
wfψ: well_formed (mu , ψ)
X: svar
H: X ∉ free_svars ψ^[[evar:E↦q]]

well_formed (mu , ψ^[[evar:E↦q]]^{svar:0↦X}^{{svar:X↦0}})
Falling back on (is_true (well_formed_closed_mu_aux ψ^[[evar:E↦q]] 1))
Falling back on (well_formed_xy 0 0 (mu , ψ^[[evar:E↦q]]) = true)
Σ: Signature
sz: nat
Γ: Theory
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
E: evar
exdepth, mudepth: nat
gpi: ProofInfo
pf: Γ ⊢i p <---> q using gpi
IHsz: (ψ : Pattern) (wfψ : well_formed ψ), size' ψ ≤ sz → (EvS : EVarSet) (SvS : SVarSet), ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ p q wfψ wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ ⊆ SvS → Γ ⊢i ψ^[[evar:E↦p]] <---> ψ^[[evar:E↦q]] using gpi
ψ: Pattern
wfψ: well_formed (mu , ψ)
Hsz: S (size' ψ) ≤ S sz
EvS: EVarSet
SvS: SVarSet
i':= ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (mu , ψ))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (mu , ψ))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (mu , ψ)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E (mu , ψ) p q wfψ wfp wfq): ProofInfo
pile: ProofInfoLe i' gpi
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
E_in_EvS: E ∈ EvS
ψ_sub_EvS: free_evars (mu , ψ) ⊆ EvS
p_sub_SvS: free_svars p ⊆ SvS
q_sub_SvS: free_svars q ⊆ SvS
ψ_sub_SvS: free_svars (mu , ψ) ⊆ SvS
HEinψ: E ∈ free_evars ψ
X: svar
HeqX: X = svar_fresh (elements SvS)
frX: X ∉ SvS
H: well_formed ψ^{svar:0↦X} = true
H0: size' ψ^{svar:0↦X} ≤ sz
IH: Γ ⊢i ψ^[[evar:E↦p]]^[svar:0↦ patt_free_svar X] <---> ψ^[[evar:E↦q]]^[svar:0↦ patt_free_svar X] using gpi
IH1: Γ ⊢i ψ^[[evar:E↦p]]^[svar:0↦ patt_free_svar X] ---> ψ^[[evar:E↦q]]^[svar:0↦ patt_free_svar X] using gpi
IH2: Γ ⊢i ψ^[[evar:E↦q]]^[svar:0↦ patt_free_svar X] ---> ψ^[[evar:E↦p]]^[svar:0↦ patt_free_svar X] using gpi

X ∉ free_svars ψ^[[evar:E↦q]]
abstract ( pose proof (Htmp := free_svars_free_evar_subst ψ E q); clear -H Htmp frX ψ_sub_SvS q_sub_SvS; set_solver ). }
Σ: Signature
sz: nat
Γ: Theory
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
E: evar
exdepth, mudepth: nat
gpi: ProofInfo
pf: Γ ⊢i p <---> q using gpi
IHsz: (ψ : Pattern) (wfψ : well_formed ψ), size' ψ ≤ sz → (EvS : EVarSet) (SvS : SVarSet), ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ p q wfψ wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ ⊆ SvS → Γ ⊢i ψ^[[evar:E↦p]] <---> ψ^[[evar:E↦q]] using gpi
ψ: Pattern
wfψ: well_formed (mu , ψ)
Hsz: S (size' ψ) ≤ S sz
EvS: EVarSet
SvS: SVarSet
i':= ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (mu , ψ))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (mu , ψ))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (mu , ψ)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E (mu , ψ) p q wfψ wfp wfq): ProofInfo
pile: ProofInfoLe i' gpi
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
E_in_EvS: E ∈ EvS
ψ_sub_EvS: free_evars (mu , ψ) ⊆ EvS
p_sub_SvS: free_svars p ⊆ SvS
q_sub_SvS: free_svars q ⊆ SvS
ψ_sub_SvS: free_svars (mu , ψ) ⊆ SvS
HEinψ: E ∈ free_evars ψ
X: svar
HeqX: X = svar_fresh (elements SvS)
frX: X ∉ SvS
H: well_formed ψ^{svar:0↦X} = true
H0: size' ψ^{svar:0↦X} ≤ sz
IH: Γ ⊢i ψ^[[evar:E↦p]]^[svar:0↦ patt_free_svar X] <---> ψ^[[evar:E↦q]]^[svar:0↦ patt_free_svar X] using gpi
IH1: Γ ⊢i ψ^[[evar:E↦p]]^[svar:0↦ patt_free_svar X] ---> ψ^[[evar:E↦q]]^[svar:0↦ patt_free_svar X] using gpi
IH2: Γ ⊢i ψ^[[evar:E↦q]]^[svar:0↦ patt_free_svar X] ---> ψ^[[evar:E↦p]]^[svar:0↦ patt_free_svar X] using gpi

well_formed_closed_mu_aux ψ^[[evar:E↦p]] 1
Σ: Signature
sz: nat
Γ: Theory
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
E: evar
exdepth, mudepth: nat
gpi: ProofInfo
pf: Γ ⊢i p <---> q using gpi
IHsz: (ψ : Pattern) (wfψ : well_formed ψ), size' ψ ≤ sz → (EvS : EVarSet) (SvS : SVarSet), ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ p q wfψ wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ ⊆ SvS → Γ ⊢i ψ^[[evar:E↦p]] <---> ψ^[[evar:E↦q]] using gpi
ψ: Pattern
wfψ: well_formed (mu , ψ)
Hsz: S (size' ψ) ≤ S sz
EvS: EVarSet
SvS: SVarSet
i':= ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (mu , ψ))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (mu , ψ))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (mu , ψ)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E (mu , ψ) p q wfψ wfp wfq): ProofInfo
pile: ProofInfoLe i' gpi
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
E_in_EvS: E ∈ EvS
ψ_sub_EvS: free_evars (mu , ψ) ⊆ EvS
p_sub_SvS: free_svars p ⊆ SvS
q_sub_SvS: free_svars q ⊆ SvS
ψ_sub_SvS: free_svars (mu , ψ) ⊆ SvS
HEinψ: E ∈ free_evars ψ
X: svar
HeqX: X = svar_fresh (elements SvS)
frX: X ∉ SvS
H: well_formed ψ^{svar:0↦X} = true
H0: size' ψ^{svar:0↦X} ≤ sz
IH: Γ ⊢i ψ^[[evar:E↦p]]^[svar:0↦ patt_free_svar X] <---> ψ^[[evar:E↦q]]^[svar:0↦ patt_free_svar X] using gpi
IH1: Γ ⊢i ψ^[[evar:E↦p]]^[svar:0↦ patt_free_svar X] ---> ψ^[[evar:E↦q]]^[svar:0↦ patt_free_svar X] using gpi
IH2: Γ ⊢i ψ^[[evar:E↦q]]^[svar:0↦ patt_free_svar X] ---> ψ^[[evar:E↦p]]^[svar:0↦ patt_free_svar X] using gpi
well_formed_closed_mu_aux ψ^[[evar:E↦q]] 1
Σ: Signature
sz: nat
Γ: Theory
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
E: evar
exdepth, mudepth: nat
gpi: ProofInfo
pf: Γ ⊢i p <---> q using gpi
IHsz: (ψ : Pattern) (wfψ : well_formed ψ), size' ψ ≤ sz → (EvS : EVarSet) (SvS : SVarSet), ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ p q wfψ wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ ⊆ SvS → Γ ⊢i ψ^[[evar:E↦p]] <---> ψ^[[evar:E↦q]] using gpi
ψ: Pattern
wfψ: well_formed (mu , ψ)
Hsz: S (size' ψ) ≤ S sz
EvS: EVarSet
SvS: SVarSet
i':= ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (mu , ψ))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (mu , ψ))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (mu , ψ)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E (mu , ψ) p q wfψ wfp wfq): ProofInfo
pile: ProofInfoLe i' gpi
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
E_in_EvS: E ∈ EvS
ψ_sub_EvS: free_evars (mu , ψ) ⊆ EvS
p_sub_SvS: free_svars p ⊆ SvS
q_sub_SvS: free_svars q ⊆ SvS
ψ_sub_SvS: free_svars (mu , ψ) ⊆ SvS
HEinψ: E ∈ free_evars ψ
X: svar
HeqX: X = svar_fresh (elements SvS)
frX: X ∉ SvS
H: well_formed ψ^{svar:0↦X} = true
H0: size' ψ^{svar:0↦X} ≤ sz
IH: Γ ⊢i ψ^[[evar:E↦p]]^[svar:0↦ patt_free_svar X] <---> ψ^[[evar:E↦q]]^[svar:0↦ patt_free_svar X] using gpi
IH1: Γ ⊢i ψ^[[evar:E↦p]]^[svar:0↦ patt_free_svar X] ---> ψ^[[evar:E↦q]]^[svar:0↦ patt_free_svar X] using gpi
IH2: Γ ⊢i ψ^[[evar:E↦q]]^[svar:0↦ patt_free_svar X] ---> ψ^[[evar:E↦p]]^[svar:0↦ patt_free_svar X] using gpi
X ∉ free_svars ψ^[[evar:E↦p]]
Σ: Signature
sz: nat
Γ: Theory
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
E: evar
exdepth, mudepth: nat
gpi: ProofInfo
pf: Γ ⊢i p <---> q using gpi
IHsz: (ψ : Pattern) (wfψ : well_formed ψ), size' ψ ≤ sz → (EvS : EVarSet) (SvS : SVarSet), ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ p q wfψ wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ ⊆ SvS → Γ ⊢i ψ^[[evar:E↦p]] <---> ψ^[[evar:E↦q]] using gpi
ψ: Pattern
wfψ: well_formed (mu , ψ)
Hsz: S (size' ψ) ≤ S sz
EvS: EVarSet
SvS: SVarSet
i':= ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (mu , ψ))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (mu , ψ))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (mu , ψ)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E (mu , ψ) p q wfψ wfp wfq): ProofInfo
pile: ProofInfoLe i' gpi
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
E_in_EvS: E ∈ EvS
ψ_sub_EvS: free_evars (mu , ψ) ⊆ EvS
p_sub_SvS: free_svars p ⊆ SvS
q_sub_SvS: free_svars q ⊆ SvS
ψ_sub_SvS: free_svars (mu , ψ) ⊆ SvS
HEinψ: E ∈ free_evars ψ
X: svar
HeqX: X = svar_fresh (elements SvS)
frX: X ∉ SvS
H: well_formed ψ^{svar:0↦X} = true
H0: size' ψ^{svar:0↦X} ≤ sz
IH: Γ ⊢i ψ^[[evar:E↦p]]^[svar:0↦ patt_free_svar X] <---> ψ^[[evar:E↦q]]^[svar:0↦ patt_free_svar X] using gpi
IH1: Γ ⊢i ψ^[[evar:E↦p]]^[svar:0↦ patt_free_svar X] ---> ψ^[[evar:E↦q]]^[svar:0↦ patt_free_svar X] using gpi
IH2: Γ ⊢i ψ^[[evar:E↦q]]^[svar:0↦ patt_free_svar X] ---> ψ^[[evar:E↦p]]^[svar:0↦ patt_free_svar X] using gpi
X ∉ free_svars ψ^[[evar:E↦q]]
Σ: Signature
sz: nat
Γ: Theory
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
E: evar
exdepth, mudepth: nat
gpi: ProofInfo
pf: Γ ⊢i p <---> q using gpi
IHsz: (ψ : Pattern) (wfψ : well_formed ψ), size' ψ ≤ sz → (EvS : EVarSet) (SvS : SVarSet), ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ p q wfψ wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ ⊆ SvS → Γ ⊢i ψ^[[evar:E↦p]] <---> ψ^[[evar:E↦q]] using gpi
ψ: Pattern
wfψ: well_formed (mu , ψ)
Hsz: S (size' ψ) ≤ S sz
EvS: EVarSet
SvS: SVarSet
i':= ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (mu , ψ))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (mu , ψ))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (mu , ψ)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E (mu , ψ) p q wfψ wfp wfq): ProofInfo
pile: ProofInfoLe i' gpi
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
E_in_EvS: E ∈ EvS
ψ_sub_EvS: free_evars (mu , ψ) ⊆ EvS
p_sub_SvS: free_svars p ⊆ SvS
q_sub_SvS: free_svars q ⊆ SvS
ψ_sub_SvS: free_svars (mu , ψ) ⊆ SvS
HEinψ: E ∈ free_evars ψ
X: svar
HeqX: X = svar_fresh (elements SvS)
frX: X ∉ SvS
H: well_formed ψ^{svar:0↦X} = true
H0: size' ψ^{svar:0↦X} ≤ sz
IH: Γ ⊢i ψ^[[evar:E↦p]]^[svar:0↦ patt_free_svar X] <---> ψ^[[evar:E↦q]]^[svar:0↦ patt_free_svar X] using gpi
IH1: Γ ⊢i ψ^[[evar:E↦p]]^[svar:0↦ patt_free_svar X] ---> ψ^[[evar:E↦q]]^[svar:0↦ patt_free_svar X] using gpi
IH2: Γ ⊢i ψ^[[evar:E↦q]]^[svar:0↦ patt_free_svar X] ---> ψ^[[evar:E↦p]]^[svar:0↦ patt_free_svar X] using gpi

well_formed_closed_mu_aux ψ^[[evar:E↦p]] 1
Σ: Signature
p: Pattern
wfp: well_formed p
E: evar
ψ: Pattern
wfψ: well_formed (mu , ψ)

well_formed_closed_mu_aux ψ^[[evar:E↦p]] 1
Falling back on (is_true (well_formed_closed_mu_aux ψ^[[evar:E↦p]] 1))
Σ: Signature
sz: nat
Γ: Theory
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
E: evar
exdepth, mudepth: nat
gpi: ProofInfo
pf: Γ ⊢i p <---> q using gpi
IHsz: (ψ : Pattern) (wfψ : well_formed ψ), size' ψ ≤ sz → (EvS : EVarSet) (SvS : SVarSet), ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ p q wfψ wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ ⊆ SvS → Γ ⊢i ψ^[[evar:E↦p]] <---> ψ^[[evar:E↦q]] using gpi
ψ: Pattern
wfψ: well_formed (mu , ψ)
Hsz: S (size' ψ) ≤ S sz
EvS: EVarSet
SvS: SVarSet
i':= ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (mu , ψ))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (mu , ψ))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (mu , ψ)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E (mu , ψ) p q wfψ wfp wfq): ProofInfo
pile: ProofInfoLe i' gpi
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
E_in_EvS: E ∈ EvS
ψ_sub_EvS: free_evars (mu , ψ) ⊆ EvS
p_sub_SvS: free_svars p ⊆ SvS
q_sub_SvS: free_svars q ⊆ SvS
ψ_sub_SvS: free_svars (mu , ψ) ⊆ SvS
HEinψ: E ∈ free_evars ψ
X: svar
HeqX: X = svar_fresh (elements SvS)
frX: X ∉ SvS
H: well_formed ψ^{svar:0↦X} = true
H0: size' ψ^{svar:0↦X} ≤ sz
IH: Γ ⊢i ψ^[[evar:E↦p]]^[svar:0↦ patt_free_svar X] <---> ψ^[[evar:E↦q]]^[svar:0↦ patt_free_svar X] using gpi
IH1: Γ ⊢i ψ^[[evar:E↦p]]^[svar:0↦ patt_free_svar X] ---> ψ^[[evar:E↦q]]^[svar:0↦ patt_free_svar X] using gpi
IH2: Γ ⊢i ψ^[[evar:E↦q]]^[svar:0↦ patt_free_svar X] ---> ψ^[[evar:E↦p]]^[svar:0↦ patt_free_svar X] using gpi

well_formed_closed_mu_aux ψ^[[evar:E↦q]] 1
Σ: Signature
sz: nat
Γ: Theory
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
E: evar
exdepth, mudepth: nat
gpi: ProofInfo
pf: Γ ⊢i p <---> q using gpi
IHsz: (ψ : Pattern) (wfψ : well_formed ψ), size' ψ ≤ sz → (EvS : EVarSet) (SvS : SVarSet), ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ p q wfψ wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ ⊆ SvS → Γ ⊢i ψ^[[evar:E↦p]] <---> ψ^[[evar:E↦q]] using gpi
ψ: Pattern
wfψ: well_formed (mu , ψ)
Hsz: S (size' ψ) ≤ S sz
EvS: EVarSet
SvS: SVarSet
i':= ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (mu , ψ))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (mu , ψ))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (mu , ψ)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E (mu , ψ) p q wfψ wfp wfq): ProofInfo
pile: ProofInfoLe i' gpi
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
E_in_EvS: E ∈ EvS
ψ_sub_EvS: free_evars (mu , ψ) ⊆ EvS
p_sub_SvS: free_svars p ⊆ SvS
q_sub_SvS: free_svars q ⊆ SvS
ψ_sub_SvS: free_svars (mu , ψ) ⊆ SvS
HEinψ: E ∈ free_evars ψ
X: svar
HeqX: X = svar_fresh (elements SvS)
frX: X ∉ SvS
H: well_formed ψ^{svar:0↦X} = true
H0: size' ψ^{svar:0↦X} ≤ sz
IH: Γ ⊢i ψ^[[evar:E↦p]]^[svar:0↦ patt_free_svar X] <---> ψ^[[evar:E↦q]]^[svar:0↦ patt_free_svar X] using gpi
IH1: Γ ⊢i ψ^[[evar:E↦p]]^[svar:0↦ patt_free_svar X] ---> ψ^[[evar:E↦q]]^[svar:0↦ patt_free_svar X] using gpi
IH2: Γ ⊢i ψ^[[evar:E↦q]]^[svar:0↦ patt_free_svar X] ---> ψ^[[evar:E↦p]]^[svar:0↦ patt_free_svar X] using gpi
X ∉ free_svars ψ^[[evar:E↦p]]
Σ: Signature
sz: nat
Γ: Theory
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
E: evar
exdepth, mudepth: nat
gpi: ProofInfo
pf: Γ ⊢i p <---> q using gpi
IHsz: (ψ : Pattern) (wfψ : well_formed ψ), size' ψ ≤ sz → (EvS : EVarSet) (SvS : SVarSet), ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ p q wfψ wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ ⊆ SvS → Γ ⊢i ψ^[[evar:E↦p]] <---> ψ^[[evar:E↦q]] using gpi
ψ: Pattern
wfψ: well_formed (mu , ψ)
Hsz: S (size' ψ) ≤ S sz
EvS: EVarSet
SvS: SVarSet
i':= ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (mu , ψ))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (mu , ψ))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (mu , ψ)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E (mu , ψ) p q wfψ wfp wfq): ProofInfo
pile: ProofInfoLe i' gpi
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
E_in_EvS: E ∈ EvS
ψ_sub_EvS: free_evars (mu , ψ) ⊆ EvS
p_sub_SvS: free_svars p ⊆ SvS
q_sub_SvS: free_svars q ⊆ SvS
ψ_sub_SvS: free_svars (mu , ψ) ⊆ SvS
HEinψ: E ∈ free_evars ψ
X: svar
HeqX: X = svar_fresh (elements SvS)
frX: X ∉ SvS
H: well_formed ψ^{svar:0↦X} = true
H0: size' ψ^{svar:0↦X} ≤ sz
IH: Γ ⊢i ψ^[[evar:E↦p]]^[svar:0↦ patt_free_svar X] <---> ψ^[[evar:E↦q]]^[svar:0↦ patt_free_svar X] using gpi
IH1: Γ ⊢i ψ^[[evar:E↦p]]^[svar:0↦ patt_free_svar X] ---> ψ^[[evar:E↦q]]^[svar:0↦ patt_free_svar X] using gpi
IH2: Γ ⊢i ψ^[[evar:E↦q]]^[svar:0↦ patt_free_svar X] ---> ψ^[[evar:E↦p]]^[svar:0↦ patt_free_svar X] using gpi
X ∉ free_svars ψ^[[evar:E↦q]]
Σ: Signature
sz: nat
Γ: Theory
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
E: evar
exdepth, mudepth: nat
gpi: ProofInfo
pf: Γ ⊢i p <---> q using gpi
IHsz: (ψ : Pattern) (wfψ : well_formed ψ), size' ψ ≤ sz → (EvS : EVarSet) (SvS : SVarSet), ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ p q wfψ wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ ⊆ SvS → Γ ⊢i ψ^[[evar:E↦p]] <---> ψ^[[evar:E↦q]] using gpi
ψ: Pattern
wfψ: well_formed (mu , ψ)
Hsz: S (size' ψ) ≤ S sz
EvS: EVarSet
SvS: SVarSet
i':= ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (mu , ψ))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (mu , ψ))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (mu , ψ)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E (mu , ψ) p q wfψ wfp wfq): ProofInfo
pile: ProofInfoLe i' gpi
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
E_in_EvS: E ∈ EvS
ψ_sub_EvS: free_evars (mu , ψ) ⊆ EvS
p_sub_SvS: free_svars p ⊆ SvS
q_sub_SvS: free_svars q ⊆ SvS
ψ_sub_SvS: free_svars (mu , ψ) ⊆ SvS
HEinψ: E ∈ free_evars ψ
X: svar
HeqX: X = svar_fresh (elements SvS)
frX: X ∉ SvS
H: well_formed ψ^{svar:0↦X} = true
H0: size' ψ^{svar:0↦X} ≤ sz
IH: Γ ⊢i ψ^[[evar:E↦p]]^[svar:0↦ patt_free_svar X] <---> ψ^[[evar:E↦q]]^[svar:0↦ patt_free_svar X] using gpi
IH1: Γ ⊢i ψ^[[evar:E↦p]]^[svar:0↦ patt_free_svar X] ---> ψ^[[evar:E↦q]]^[svar:0↦ patt_free_svar X] using gpi
IH2: Γ ⊢i ψ^[[evar:E↦q]]^[svar:0↦ patt_free_svar X] ---> ψ^[[evar:E↦p]]^[svar:0↦ patt_free_svar X] using gpi

well_formed_closed_mu_aux ψ^[[evar:E↦q]] 1
Σ: Signature
q: Pattern
wfq: well_formed q
E: evar
ψ: Pattern
wfψ: well_formed (mu , ψ)

well_formed_closed_mu_aux ψ^[[evar:E↦q]] 1
Falling back on (is_true (well_formed_closed_mu_aux ψ^[[evar:E↦q]] 1))
Σ: Signature
sz: nat
Γ: Theory
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
E: evar
exdepth, mudepth: nat
gpi: ProofInfo
pf: Γ ⊢i p <---> q using gpi
IHsz: (ψ : Pattern) (wfψ : well_formed ψ), size' ψ ≤ sz → (EvS : EVarSet) (SvS : SVarSet), ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ p q wfψ wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ ⊆ SvS → Γ ⊢i ψ^[[evar:E↦p]] <---> ψ^[[evar:E↦q]] using gpi
ψ: Pattern
wfψ: well_formed (mu , ψ)
Hsz: S (size' ψ) ≤ S sz
EvS: EVarSet
SvS: SVarSet
i':= ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (mu , ψ))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (mu , ψ))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (mu , ψ)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E (mu , ψ) p q wfψ wfp wfq): ProofInfo
pile: ProofInfoLe i' gpi
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
E_in_EvS: E ∈ EvS
ψ_sub_EvS: free_evars (mu , ψ) ⊆ EvS
p_sub_SvS: free_svars p ⊆ SvS
q_sub_SvS: free_svars q ⊆ SvS
ψ_sub_SvS: free_svars (mu , ψ) ⊆ SvS
HEinψ: E ∈ free_evars ψ
X: svar
HeqX: X = svar_fresh (elements SvS)
frX: X ∉ SvS
H: well_formed ψ^{svar:0↦X} = true
H0: size' ψ^{svar:0↦X} ≤ sz
IH: Γ ⊢i ψ^[[evar:E↦p]]^[svar:0↦ patt_free_svar X] <---> ψ^[[evar:E↦q]]^[svar:0↦ patt_free_svar X] using gpi
IH1: Γ ⊢i ψ^[[evar:E↦p]]^[svar:0↦ patt_free_svar X] ---> ψ^[[evar:E↦q]]^[svar:0↦ patt_free_svar X] using gpi
IH2: Γ ⊢i ψ^[[evar:E↦q]]^[svar:0↦ patt_free_svar X] ---> ψ^[[evar:E↦p]]^[svar:0↦ patt_free_svar X] using gpi

X ∉ free_svars ψ^[[evar:E↦p]]
Σ: Signature
sz: nat
Γ: Theory
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
E: evar
exdepth, mudepth: nat
gpi: ProofInfo
pf: Γ ⊢i p <---> q using gpi
IHsz: (ψ : Pattern) (wfψ : well_formed ψ), size' ψ ≤ sz → (EvS : EVarSet) (SvS : SVarSet), ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ p q wfψ wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ ⊆ SvS → Γ ⊢i ψ^[[evar:E↦p]] <---> ψ^[[evar:E↦q]] using gpi
ψ: Pattern
wfψ: well_formed (mu , ψ)
Hsz: S (size' ψ) ≤ S sz
EvS: EVarSet
SvS: SVarSet
i':= ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (mu , ψ))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (mu , ψ))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (mu , ψ)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E (mu , ψ) p q wfψ wfp wfq): ProofInfo
pile: ProofInfoLe i' gpi
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
E_in_EvS: E ∈ EvS
ψ_sub_EvS: free_evars (mu , ψ) ⊆ EvS
p_sub_SvS: free_svars p ⊆ SvS
q_sub_SvS: free_svars q ⊆ SvS
ψ_sub_SvS: free_svars (mu , ψ) ⊆ SvS
HEinψ: E ∈ free_evars ψ
X: svar
HeqX: X = svar_fresh (elements SvS)
frX: X ∉ SvS
H: well_formed ψ^{svar:0↦X} = true
H0: size' ψ^{svar:0↦X} ≤ sz
IH: Γ ⊢i ψ^[[evar:E↦p]]^[svar:0↦ patt_free_svar X] <---> ψ^[[evar:E↦q]]^[svar:0↦ patt_free_svar X] using gpi
IH1: Γ ⊢i ψ^[[evar:E↦p]]^[svar:0↦ patt_free_svar X] ---> ψ^[[evar:E↦q]]^[svar:0↦ patt_free_svar X] using gpi
IH2: Γ ⊢i ψ^[[evar:E↦q]]^[svar:0↦ patt_free_svar X] ---> ψ^[[evar:E↦p]]^[svar:0↦ patt_free_svar X] using gpi
X ∉ free_svars ψ^[[evar:E↦q]]
Σ: Signature
sz: nat
Γ: Theory
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
E: evar
exdepth, mudepth: nat
gpi: ProofInfo
pf: Γ ⊢i p <---> q using gpi
IHsz: (ψ : Pattern) (wfψ : well_formed ψ), size' ψ ≤ sz → (EvS : EVarSet) (SvS : SVarSet), ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ p q wfψ wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ ⊆ SvS → Γ ⊢i ψ^[[evar:E↦p]] <---> ψ^[[evar:E↦q]] using gpi
ψ: Pattern
wfψ: well_formed (mu , ψ)
Hsz: S (size' ψ) ≤ S sz
EvS: EVarSet
SvS: SVarSet
i':= ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (mu , ψ))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (mu , ψ))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (mu , ψ)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E (mu , ψ) p q wfψ wfp wfq): ProofInfo
pile: ProofInfoLe i' gpi
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
E_in_EvS: E ∈ EvS
ψ_sub_EvS: free_evars (mu , ψ) ⊆ EvS
p_sub_SvS: free_svars p ⊆ SvS
q_sub_SvS: free_svars q ⊆ SvS
ψ_sub_SvS: free_svars (mu , ψ) ⊆ SvS
HEinψ: E ∈ free_evars ψ
X: svar
HeqX: X = svar_fresh (elements SvS)
frX: X ∉ SvS
H: well_formed ψ^{svar:0↦X} = true
H0: size' ψ^{svar:0↦X} ≤ sz
IH: Γ ⊢i ψ^[[evar:E↦p]]^[svar:0↦ patt_free_svar X] <---> ψ^[[evar:E↦q]]^[svar:0↦ patt_free_svar X] using gpi
IH1: Γ ⊢i ψ^[[evar:E↦p]]^[svar:0↦ patt_free_svar X] ---> ψ^[[evar:E↦q]]^[svar:0↦ patt_free_svar X] using gpi
IH2: Γ ⊢i ψ^[[evar:E↦q]]^[svar:0↦ patt_free_svar X] ---> ψ^[[evar:E↦p]]^[svar:0↦ patt_free_svar X] using gpi

X ∉ free_svars ψ^[[evar:E↦p]]
abstract ( pose proof (Htmp := free_svars_free_evar_subst ψ E p); clear -H Htmp frX ψ_sub_SvS p_sub_SvS; set_solver ).
Σ: Signature
sz: nat
Γ: Theory
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
E: evar
exdepth, mudepth: nat
gpi: ProofInfo
pf: Γ ⊢i p <---> q using gpi
IHsz: (ψ : Pattern) (wfψ : well_formed ψ), size' ψ ≤ sz → (EvS : EVarSet) (SvS : SVarSet), ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ p q wfψ wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ ⊆ SvS → Γ ⊢i ψ^[[evar:E↦p]] <---> ψ^[[evar:E↦q]] using gpi
ψ: Pattern
wfψ: well_formed (mu , ψ)
Hsz: S (size' ψ) ≤ S sz
EvS: EVarSet
SvS: SVarSet
i':= ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (mu , ψ))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (mu , ψ))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (mu , ψ)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E (mu , ψ) p q wfψ wfp wfq): ProofInfo
pile: ProofInfoLe i' gpi
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
E_in_EvS: E ∈ EvS
ψ_sub_EvS: free_evars (mu , ψ) ⊆ EvS
p_sub_SvS: free_svars p ⊆ SvS
q_sub_SvS: free_svars q ⊆ SvS
ψ_sub_SvS: free_svars (mu , ψ) ⊆ SvS
HEinψ: E ∈ free_evars ψ
X: svar
HeqX: X = svar_fresh (elements SvS)
frX: X ∉ SvS
H: well_formed ψ^{svar:0↦X} = true
H0: size' ψ^{svar:0↦X} ≤ sz
IH: Γ ⊢i ψ^[[evar:E↦p]]^[svar:0↦ patt_free_svar X] <---> ψ^[[evar:E↦q]]^[svar:0↦ patt_free_svar X] using gpi
IH1: Γ ⊢i ψ^[[evar:E↦p]]^[svar:0↦ patt_free_svar X] ---> ψ^[[evar:E↦q]]^[svar:0↦ patt_free_svar X] using gpi
IH2: Γ ⊢i ψ^[[evar:E↦q]]^[svar:0↦ patt_free_svar X] ---> ψ^[[evar:E↦p]]^[svar:0↦ patt_free_svar X] using gpi

X ∉ free_svars ψ^[[evar:E↦q]]
Σ: Signature
sz: nat
Γ: Theory
p, q: Pattern
wfp: well_formed p
wfq: well_formed q
E: evar
exdepth, mudepth: nat
gpi: ProofInfo
pf: Γ ⊢i p <---> q using gpi
IHsz: (ψ : Pattern) (wfψ : well_formed ψ), size' ψ ≤ sz → (EvS : EVarSet) (SvS : SVarSet), ProofInfoLe (ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E ψ)), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E ψ p q wfψ wfp wfq)) gpi → free_evars p ⊆ EvS → free_evars q ⊆ EvS → E ∈ EvS → free_evars ψ ⊆ EvS → free_svars p ⊆ SvS → free_svars q ⊆ SvS → free_svars ψ ⊆ SvS → Γ ⊢i ψ^[[evar:E↦p]] <---> ψ^[[evar:E↦q]] using gpi
ψ: Pattern
wfψ: well_formed (mu , ψ)
Hsz: S (size' ψ) ≤ S sz
EvS: EVarSet
SvS: SVarSet
i':= ExGen := list_to_set (evar_fresh_seq EvS (maximal_exists_depth_of_evar_in_pattern' exdepth E (mu , ψ))), SVSubst := list_to_set (svar_fresh_seq SvS (maximal_mu_depth_of_evar_in_pattern' mudepth E (mu , ψ))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' mudepth E (mu , ψ)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' EvS SvS E (mu , ψ) p q wfψ wfp wfq): ProofInfo
pile: ProofInfoLe i' gpi
p_sub_EvS: free_evars p ⊆ EvS
q_sub_EvS: free_evars q ⊆ EvS
E_in_EvS: E ∈ EvS
ψ_sub_EvS: free_evars (mu , ψ) ⊆ EvS
p_sub_SvS: free_svars p ⊆ SvS
q_sub_SvS: free_svars q ⊆ SvS
ψ_sub_SvS: free_svars (mu , ψ) ⊆ SvS
HEinψ: E ∈ free_evars ψ
X: svar
HeqX: X = svar_fresh (elements SvS)
frX: X ∉ SvS
H: well_formed ψ^{svar:0↦X} = true
H0: size' ψ^{svar:0↦X} ≤ sz
IH: Γ ⊢i ψ^[[evar:E↦p]]^[svar:0↦ patt_free_svar X] <---> ψ^[[evar:E↦q]]^[svar:0↦ patt_free_svar X] using gpi
IH1: Γ ⊢i ψ^[[evar:E↦p]]^[svar:0↦ patt_free_svar X] ---> ψ^[[evar:E↦q]]^[svar:0↦ patt_free_svar X] using gpi
IH2: Γ ⊢i ψ^[[evar:E↦q]]^[svar:0↦ patt_free_svar X] ---> ψ^[[evar:E↦p]]^[svar:0↦ patt_free_svar X] using gpi

X ∉ free_svars ψ^[[evar:E↦q]]
abstract ( pose proof (Htmp := free_svars_free_evar_subst ψ E q); clear -H Htmp frX ψ_sub_SvS q_sub_SvS; set_solver ). } } Defined.
Σ: Signature
Γ: Theory
p, q: Pattern
C: PatternCtx
gpi: ProofInfo
wfp: well_formed p = true
wfq: well_formed q = true
wfC: PC_wf C
pile: ProofInfoLe (ExGen := list_to_set (evar_fresh_seq (free_evars (pcPattern C) ∪ free_evars p ∪ free_evars q ∪ {[ pcEvar C]}) (maximal_exists_depth_of_evar_in_pattern (pcEvar C) (pcPattern C))), SVSubst := list_to_set (svar_fresh_seq (free_svars (pcPattern C) ∪ free_svars p ∪ free_svars q) (maximal_mu_depth_of_evar_in_pattern (pcEvar C) (pcPattern C))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern (pcEvar C) (pcPattern C)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' (free_evars (pcPattern C) ∪ free_evars p ∪ free_evars q ∪ {[ pcEvar C]}) (free_svars (pcPattern C) ∪ free_svars p ∪ free_svars q) (pcEvar C) (pcPattern C) p q wfC wfp wfq)) gpi

Γ ⊢i p <---> q using gpi → Γ ⊢i (C [p]) <---> (C [q]) using gpi
Σ: Signature
Γ: Theory
p, q: Pattern
C: PatternCtx
gpi: ProofInfo
wfp: well_formed p = true
wfq: well_formed q = true
wfC: PC_wf C
pile: ProofInfoLe (ExGen := list_to_set (evar_fresh_seq (free_evars (pcPattern C) ∪ free_evars p ∪ free_evars q ∪ {[ pcEvar C]}) (maximal_exists_depth_of_evar_in_pattern (pcEvar C) (pcPattern C))), SVSubst := list_to_set (svar_fresh_seq (free_svars (pcPattern C) ∪ free_svars p ∪ free_svars q) (maximal_mu_depth_of_evar_in_pattern (pcEvar C) (pcPattern C))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern (pcEvar C) (pcPattern C)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' (free_evars (pcPattern C) ∪ free_evars p ∪ free_evars q ∪ {[ pcEvar C]}) (free_svars (pcPattern C) ∪ free_svars p ∪ free_svars q) (pcEvar C) (pcPattern C) p q wfC wfp wfq)) gpi

Γ ⊢i p <---> q using gpi → Γ ⊢i (C [p]) <---> (C [q]) using gpi
Σ: Signature
Γ: Theory
p, q: Pattern
C: PatternCtx
gpi: ProofInfo
wfp: well_formed p = true
wfq: well_formed q = true
wfC: PC_wf C
pile: ProofInfoLe (ExGen := list_to_set (evar_fresh_seq (free_evars (pcPattern C) ∪ free_evars p ∪ free_evars q ∪ {[ pcEvar C]}) (maximal_exists_depth_of_evar_in_pattern (pcEvar C) (pcPattern C))), SVSubst := list_to_set (svar_fresh_seq (free_svars (pcPattern C) ∪ free_svars p ∪ free_svars q) (maximal_mu_depth_of_evar_in_pattern (pcEvar C) (pcPattern C))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern (pcEvar C) (pcPattern C)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' (free_evars (pcPattern C) ∪ free_evars p ∪ free_evars q ∪ {[ pcEvar C]}) (free_svars (pcPattern C) ∪ free_svars p ∪ free_svars q) (pcEvar C) (pcPattern C) p q wfC wfp wfq)) gpi
Hiff: Γ ⊢i p <---> q using gpi

Γ ⊢i (C [p]) <---> (C [q]) using gpi
Σ: Signature
Γ: Theory
p, q: Pattern
C: PatternCtx
gpi: ProofInfo
wfp: well_formed p = true
wfq: well_formed q = true
wfC: PC_wf C
pile: ProofInfoLe (ExGen := list_to_set (evar_fresh_seq (free_evars (pcPattern C) ∪ free_evars p ∪ free_evars q ∪ {[ pcEvar C]}) (maximal_exists_depth_of_evar_in_pattern (pcEvar C) (pcPattern C))), SVSubst := list_to_set (svar_fresh_seq (free_svars (pcPattern C) ∪ free_svars p ∪ free_svars q) (maximal_mu_depth_of_evar_in_pattern (pcEvar C) (pcPattern C))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern (pcEvar C) (pcPattern C)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' (free_evars (pcPattern C) ∪ free_evars p ∪ free_evars q ∪ {[ pcEvar C]}) (free_svars (pcPattern C) ∪ free_svars p ∪ free_svars q) (pcEvar C) (pcPattern C) p q wfC wfp wfq)) gpi
Hiff: Γ ⊢i p <---> q using gpi

well_formed (p <---> q)
Σ: Signature
Γ: Theory
p, q: Pattern
C: PatternCtx
gpi: ProofInfo
wfp: well_formed p = true
wfq: well_formed q = true
wfC: PC_wf C
pile: ProofInfoLe (ExGen := list_to_set (evar_fresh_seq (free_evars (pcPattern C) ∪ free_evars p ∪ free_evars q ∪ {[ pcEvar C]}) (maximal_exists_depth_of_evar_in_pattern (pcEvar C) (pcPattern C))), SVSubst := list_to_set (svar_fresh_seq (free_svars (pcPattern C) ∪ free_svars p ∪ free_svars q) (maximal_mu_depth_of_evar_in_pattern (pcEvar C) (pcPattern C))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern (pcEvar C) (pcPattern C)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' (free_evars (pcPattern C) ∪ free_evars p ∪ free_evars q ∪ {[ pcEvar C]}) (free_svars (pcPattern C) ∪ free_svars p ∪ free_svars q) (pcEvar C) (pcPattern C) p q wfC wfp wfq)) gpi
Hiff: Γ ⊢i p <---> q using gpi
H: well_formed (p <---> q)
Γ ⊢i (C [p]) <---> (C [q]) using gpi
Σ: Signature
Γ: Theory
p, q: Pattern
C: PatternCtx
gpi: ProofInfo
wfp: well_formed p = true
wfq: well_formed q = true
wfC: PC_wf C
pile: ProofInfoLe (ExGen := list_to_set (evar_fresh_seq (free_evars (pcPattern C) ∪ free_evars p ∪ free_evars q ∪ {[ pcEvar C]}) (maximal_exists_depth_of_evar_in_pattern (pcEvar C) (pcPattern C))), SVSubst := list_to_set (svar_fresh_seq (free_svars (pcPattern C) ∪ free_svars p ∪ free_svars q) (maximal_mu_depth_of_evar_in_pattern (pcEvar C) (pcPattern C))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern (pcEvar C) (pcPattern C)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' (free_evars (pcPattern C) ∪ free_evars p ∪ free_evars q ∪ {[ pcEvar C]}) (free_svars (pcPattern C) ∪ free_svars p ∪ free_svars q) (pcEvar C) (pcPattern C) p q wfC wfp wfq)) gpi
Hiff: Γ ⊢i p <---> q using gpi

well_formed (p <---> q)
abstract ( pose proof (proved_impl_wf _ _ (proj1_sig Hiff)); assumption ).
Σ: Signature
Γ: Theory
p, q: Pattern
C: PatternCtx
gpi: ProofInfo
wfp: well_formed p = true
wfq: well_formed q = true
wfC: PC_wf C
pile: ProofInfoLe (ExGen := list_to_set (evar_fresh_seq (free_evars (pcPattern C) ∪ free_evars p ∪ free_evars q ∪ {[ pcEvar C]}) (maximal_exists_depth_of_evar_in_pattern (pcEvar C) (pcPattern C))), SVSubst := list_to_set (svar_fresh_seq (free_svars (pcPattern C) ∪ free_svars p ∪ free_svars q) (maximal_mu_depth_of_evar_in_pattern (pcEvar C) (pcPattern C))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern (pcEvar C) (pcPattern C)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' (free_evars (pcPattern C) ∪ free_evars p ∪ free_evars q ∪ {[ pcEvar C]}) (free_svars (pcPattern C) ∪ free_svars p ∪ free_svars q) (pcEvar C) (pcPattern C) p q wfC wfp wfq)) gpi
Hiff: Γ ⊢i p <---> q using gpi
H: well_formed (p <---> q)

Γ ⊢i (C [p]) <---> (C [q]) using gpi
Σ: Signature
Γ: Theory
p, q: Pattern
C: PatternCtx
gpi: ProofInfo
wfp: well_formed p = true
wfq: well_formed q = true
wfC: PC_wf C
pile: ProofInfoLe (ExGen := list_to_set (evar_fresh_seq (free_evars (pcPattern C) ∪ free_evars p ∪ free_evars q ∪ {[ pcEvar C]}) (maximal_exists_depth_of_evar_in_pattern (pcEvar C) (pcPattern C))), SVSubst := list_to_set (svar_fresh_seq (free_svars (pcPattern C) ∪ free_svars p ∪ free_svars q) (maximal_mu_depth_of_evar_in_pattern (pcEvar C) (pcPattern C))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern (pcEvar C) (pcPattern C)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' (free_evars (pcPattern C) ∪ free_evars p ∪ free_evars q ∪ {[ pcEvar C]}) (free_svars (pcPattern C) ∪ free_svars p ∪ free_svars q) (pcEvar C) (pcPattern C) p q wfC wfp wfq)) gpi
Hiff: Γ ⊢i p <---> q using gpi
H: well_formed (p <---> q)
H0: well_formed p

Γ ⊢i (C [p]) <---> (C [q]) using gpi
Σ: Signature
Γ: Theory
p, q: Pattern
C: PatternCtx
gpi: ProofInfo
wfp: well_formed p = true
wfq: well_formed q = true
wfC: PC_wf C
pile: ProofInfoLe (ExGen := list_to_set (evar_fresh_seq (free_evars (pcPattern C) ∪ free_evars p ∪ free_evars q ∪ {[ pcEvar C]}) (maximal_exists_depth_of_evar_in_pattern (pcEvar C) (pcPattern C))), SVSubst := list_to_set (svar_fresh_seq (free_svars (pcPattern C) ∪ free_svars p ∪ free_svars q) (maximal_mu_depth_of_evar_in_pattern (pcEvar C) (pcPattern C))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern (pcEvar C) (pcPattern C)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' (free_evars (pcPattern C) ∪ free_evars p ∪ free_evars q ∪ {[ pcEvar C]}) (free_svars (pcPattern C) ∪ free_svars p ∪ free_svars q) (pcEvar C) (pcPattern C) p q wfC wfp wfq)) gpi
Hiff: Γ ⊢i p <---> q using gpi
H: well_formed (p <---> q)
H0: well_formed p
H1: well_formed q

Γ ⊢i (C [p]) <---> (C [q]) using gpi
Σ: Signature
Γ: Theory
p, q: Pattern
E: evar
ψ: Pattern
gpi: ProofInfo
wfp: well_formed p = true
wfq: well_formed q = true
wfC: PC_wf {| pcEvar := E; pcPattern := ψ |}
pile: ProofInfoLe (ExGen := list_to_set (evar_fresh_seq (free_evars (pcPattern {| pcEvar := E; pcPattern := ψ |}) ∪ free_evars p ∪ free_evars q ∪ {[pcEvar {| pcEvar := E; pcPattern := ψ |}]}) (maximal_exists_depth_of_evar_in_pattern (pcEvar {| pcEvar := E; pcPattern := ψ |}) (pcPattern {| pcEvar := E; pcPattern := ψ |}))), SVSubst := list_to_set (svar_fresh_seq (free_svars (pcPattern {| pcEvar := E; pcPattern := ψ |}) ∪ free_svars p ∪ free_svars q) (maximal_mu_depth_of_evar_in_pattern (pcEvar {| pcEvar := E; pcPattern := ψ |}) (pcPattern {| pcEvar := E; pcPattern := ψ |}))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern (pcEvar {| pcEvar := E; pcPattern := ψ |}) (pcPattern {| pcEvar := E; pcPattern := ψ |})) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' (free_evars (pcPattern {| pcEvar := E; pcPattern := ψ |}) ∪ free_evars p ∪ free_evars q ∪ {[pcEvar {| pcEvar := E; pcPattern := ψ |}]}) (free_svars (pcPattern {| pcEvar := E; pcPattern := ψ |}) ∪ free_svars p ∪ free_svars q) (pcEvar {| pcEvar := E; pcPattern := ψ |}) (pcPattern {| pcEvar := E; pcPattern := ψ |}) p q wfC wfp wfq)) gpi
Hiff: Γ ⊢i p <---> q using gpi
H: well_formed (p <---> q)
H0: well_formed p
H1: well_formed q

Γ ⊢i ({| pcEvar := E; pcPattern := ψ |} [p]) <---> ({| pcEvar := E; pcPattern := ψ |} [q]) using gpi
Σ: Signature
Γ: Theory
p, q: Pattern
E: evar
ψ: Pattern
gpi: ProofInfo
wfp: well_formed p = true
wfq: well_formed q = true
wfC: PC_wf {| pcEvar := E; pcPattern := ψ |}
pile: ProofInfoLe (ExGen := list_to_set (evar_fresh_seq (free_evars ψ ∪ free_evars p ∪ free_evars q ∪ {[E]}) (maximal_exists_depth_of_evar_in_pattern E ψ)), SVSubst := list_to_set (svar_fresh_seq (free_svars ψ ∪ free_svars p ∪ free_svars q) (maximal_mu_depth_of_evar_in_pattern E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' (free_evars ψ ∪ free_evars p ∪ free_evars q ∪ {[E]}) (free_svars ψ ∪ free_svars p ∪ free_svars q) E ψ p q wfC wfp wfq)) gpi
Hiff: Γ ⊢i p <---> q using gpi
H: well_formed (p <---> q)
H0: well_formed p
H1: well_formed q

Γ ⊢i ({| pcEvar := E; pcPattern := ψ |} [p]) <---> ({| pcEvar := E; pcPattern := ψ |} [q]) using gpi
Σ: Signature
Γ: Theory
p, q: Pattern
E: evar
ψ: Pattern
gpi: ProofInfo
wfp: well_formed p = true
wfq: well_formed q = true
wfC: PC_wf {| pcEvar := E; pcPattern := ψ |}
pile: ProofInfoLe (ExGen := list_to_set (evar_fresh_seq (free_evars ψ ∪ free_evars p ∪ free_evars q ∪ {[E]}) (maximal_exists_depth_of_evar_in_pattern E ψ)), SVSubst := list_to_set (svar_fresh_seq (free_svars ψ ∪ free_svars p ∪ free_svars q) (maximal_mu_depth_of_evar_in_pattern E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' (free_evars ψ ∪ free_evars p ∪ free_evars q ∪ {[E]}) (free_svars ψ ∪ free_svars p ∪ free_svars q) E ψ p q wfC wfp wfq)) gpi
Hiff: Γ ⊢i p <---> q using gpi
H: well_formed (p <---> q)
H0: well_formed p
H1: well_formed q

Γ ⊢i (pcPattern {| pcEvar := E; pcPattern := ψ |})^[[evar: pcEvar {| pcEvar := E; pcPattern := ψ |}↦p]] <---> (pcPattern {| pcEvar := E; pcPattern := ψ |})^[[evar: pcEvar {| pcEvar := E; pcPattern := ψ |}↦q]] using gpi
Σ: Signature
Γ: Theory
p, q: Pattern
E: evar
ψ: Pattern
gpi: ProofInfo
wfp: well_formed p = true
wfq: well_formed q = true
wfC: PC_wf {| pcEvar := E; pcPattern := ψ |}
pile: ProofInfoLe (ExGen := list_to_set (evar_fresh_seq (free_evars ψ ∪ free_evars p ∪ free_evars q ∪ {[E]}) (maximal_exists_depth_of_evar_in_pattern E ψ)), SVSubst := list_to_set (svar_fresh_seq (free_svars ψ ∪ free_svars p ∪ free_svars q) (maximal_mu_depth_of_evar_in_pattern E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' (free_evars ψ ∪ free_evars p ∪ free_evars q ∪ {[E]}) (free_svars ψ ∪ free_svars p ∪ free_svars q) E ψ p q wfC wfp wfq)) gpi
Hiff: Γ ⊢i p <---> q using gpi
H: well_formed (p <---> q)
H0: well_formed p
H1: well_formed q

Γ ⊢i ψ^[[evar:E↦p]] <---> ψ^[[evar:E↦q]] using gpi
Σ: Signature
Γ: Theory
p, q: Pattern
E: evar
ψ: Pattern
gpi: ProofInfo
wfp: well_formed p = true
wfq: well_formed q = true
wfC: PC_wf {| pcEvar := E; pcPattern := ψ |}
pile: ProofInfoLe (ExGen := list_to_set (evar_fresh_seq (free_evars ψ ∪ free_evars p ∪ free_evars q ∪ {[E]}) (maximal_exists_depth_of_evar_in_pattern E ψ)), SVSubst := list_to_set (svar_fresh_seq (free_svars ψ ∪ free_svars p ∪ free_svars q) (maximal_mu_depth_of_evar_in_pattern E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' (free_evars ψ ∪ free_evars p ∪ free_evars q ∪ {[E]}) (free_svars ψ ∪ free_svars p ∪ free_svars q) E ψ p q wfC wfp wfq)) gpi
Hiff: Γ ⊢i p <---> q using gpi
H: well_formed (p <---> q)
H0: well_formed p
H1: well_formed q

size' ψ ≤ size' ψ
Σ: Signature
Γ: Theory
p, q: Pattern
E: evar
ψ: Pattern
gpi: ProofInfo
wfp: well_formed p = true
wfq: well_formed q = true
wfC: PC_wf {| pcEvar := E; pcPattern := ψ |}
pile: ProofInfoLe (ExGen := list_to_set (evar_fresh_seq (free_evars ψ ∪ free_evars p ∪ free_evars q ∪ {[E]}) (maximal_exists_depth_of_evar_in_pattern E ψ)), SVSubst := list_to_set (svar_fresh_seq (free_svars ψ ∪ free_svars p ∪ free_svars q) (maximal_mu_depth_of_evar_in_pattern E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' (free_evars ψ ∪ free_evars p ∪ free_evars q ∪ {[E]}) (free_svars ψ ∪ free_svars p ∪ free_svars q) E ψ p q wfC wfp wfq)) gpi
Hiff: Γ ⊢i p <---> q using gpi
H: well_formed (p <---> q)
H0: well_formed p
H1: well_formed q
free_evars p ⊆ free_evars ψ ∪ free_evars p ∪ free_evars q ∪ {[E]}
Σ: Signature
Γ: Theory
p, q: Pattern
E: evar
ψ: Pattern
gpi: ProofInfo
wfp: well_formed p = true
wfq: well_formed q = true
wfC: PC_wf {| pcEvar := E; pcPattern := ψ |}
pile: ProofInfoLe (ExGen := list_to_set (evar_fresh_seq (free_evars ψ ∪ free_evars p ∪ free_evars q ∪ {[E]}) (maximal_exists_depth_of_evar_in_pattern E ψ)), SVSubst := list_to_set (svar_fresh_seq (free_svars ψ ∪ free_svars p ∪ free_svars q) (maximal_mu_depth_of_evar_in_pattern E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' (free_evars ψ ∪ free_evars p ∪ free_evars q ∪ {[E]}) (free_svars ψ ∪ free_svars p ∪ free_svars q) E ψ p q wfC wfp wfq)) gpi
Hiff: Γ ⊢i p <---> q using gpi
H: well_formed (p <---> q)
H0: well_formed p
H1: well_formed q
free_evars q ⊆ free_evars ψ ∪ free_evars p ∪ free_evars q ∪ {[E]}
Σ: Signature
Γ: Theory
p, q: Pattern
E: evar
ψ: Pattern
gpi: ProofInfo
wfp: well_formed p = true
wfq: well_formed q = true
wfC: PC_wf {| pcEvar := E; pcPattern := ψ |}
pile: ProofInfoLe (ExGen := list_to_set (evar_fresh_seq (free_evars ψ ∪ free_evars p ∪ free_evars q ∪ {[E]}) (maximal_exists_depth_of_evar_in_pattern E ψ)), SVSubst := list_to_set (svar_fresh_seq (free_svars ψ ∪ free_svars p ∪ free_svars q) (maximal_mu_depth_of_evar_in_pattern E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' (free_evars ψ ∪ free_evars p ∪ free_evars q ∪ {[E]}) (free_svars ψ ∪ free_svars p ∪ free_svars q) E ψ p q wfC wfp wfq)) gpi
Hiff: Γ ⊢i p <---> q using gpi
H: well_formed (p <---> q)
H0: well_formed p
H1: well_formed q
free_evars ψ ⊆ free_evars ψ ∪ free_evars p ∪ free_evars q ∪ {[E]}
Σ: Signature
Γ: Theory
p, q: Pattern
E: evar
ψ: Pattern
gpi: ProofInfo
wfp: well_formed p = true
wfq: well_formed q = true
wfC: PC_wf {| pcEvar := E; pcPattern := ψ |}
pile: ProofInfoLe (ExGen := list_to_set (evar_fresh_seq (free_evars ψ ∪ free_evars p ∪ free_evars q ∪ {[E]}) (maximal_exists_depth_of_evar_in_pattern E ψ)), SVSubst := list_to_set (svar_fresh_seq (free_svars ψ ∪ free_svars p ∪ free_svars q) (maximal_mu_depth_of_evar_in_pattern E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' (free_evars ψ ∪ free_evars p ∪ free_evars q ∪ {[E]}) (free_svars ψ ∪ free_svars p ∪ free_svars q) E ψ p q wfC wfp wfq)) gpi
Hiff: Γ ⊢i p <---> q using gpi
H: well_formed (p <---> q)
H0: well_formed p
H1: well_formed q
E ∈ free_evars ψ ∪ free_evars p ∪ free_evars q ∪ {[E]}
Σ: Signature
Γ: Theory
p, q: Pattern
E: evar
ψ: Pattern
gpi: ProofInfo
wfp: well_formed p = true
wfq: well_formed q = true
wfC: PC_wf {| pcEvar := E; pcPattern := ψ |}
pile: ProofInfoLe (ExGen := list_to_set (evar_fresh_seq (free_evars ψ ∪ free_evars p ∪ free_evars q ∪ {[E]}) (maximal_exists_depth_of_evar_in_pattern E ψ)), SVSubst := list_to_set (svar_fresh_seq (free_svars ψ ∪ free_svars p ∪ free_svars q) (maximal_mu_depth_of_evar_in_pattern E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' (free_evars ψ ∪ free_evars p ∪ free_evars q ∪ {[E]}) (free_svars ψ ∪ free_svars p ∪ free_svars q) E ψ p q wfC wfp wfq)) gpi
Hiff: Γ ⊢i p <---> q using gpi
H: well_formed (p <---> q)
H0: well_formed p
H1: well_formed q
free_svars p ⊆ free_svars ψ ∪ free_svars p ∪ free_svars q
Σ: Signature
Γ: Theory
p, q: Pattern
E: evar
ψ: Pattern
gpi: ProofInfo
wfp: well_formed p = true
wfq: well_formed q = true
wfC: PC_wf {| pcEvar := E; pcPattern := ψ |}
pile: ProofInfoLe (ExGen := list_to_set (evar_fresh_seq (free_evars ψ ∪ free_evars p ∪ free_evars q ∪ {[E]}) (maximal_exists_depth_of_evar_in_pattern E ψ)), SVSubst := list_to_set (svar_fresh_seq (free_svars ψ ∪ free_svars p ∪ free_svars q) (maximal_mu_depth_of_evar_in_pattern E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' (free_evars ψ ∪ free_evars p ∪ free_evars q ∪ {[E]}) (free_svars ψ ∪ free_svars p ∪ free_svars q) E ψ p q wfC wfp wfq)) gpi
Hiff: Γ ⊢i p <---> q using gpi
H: well_formed (p <---> q)
H0: well_formed p
H1: well_formed q
free_svars q ⊆ free_svars ψ ∪ free_svars p ∪ free_svars q
Σ: Signature
Γ: Theory
p, q: Pattern
E: evar
ψ: Pattern
gpi: ProofInfo
wfp: well_formed p = true
wfq: well_formed q = true
wfC: PC_wf {| pcEvar := E; pcPattern := ψ |}
pile: ProofInfoLe (ExGen := list_to_set (evar_fresh_seq (free_evars ψ ∪ free_evars p ∪ free_evars q ∪ {[E]}) (maximal_exists_depth_of_evar_in_pattern E ψ)), SVSubst := list_to_set (svar_fresh_seq (free_svars ψ ∪ free_svars p ∪ free_svars q) (maximal_mu_depth_of_evar_in_pattern E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' (free_evars ψ ∪ free_evars p ∪ free_evars q ∪ {[E]}) (free_svars ψ ∪ free_svars p ∪ free_svars q) E ψ p q wfC wfp wfq)) gpi
Hiff: Γ ⊢i p <---> q using gpi
H: well_formed (p <---> q)
H0: well_formed p
H1: well_formed q
free_svars ψ ⊆ free_svars ψ ∪ free_svars p ∪ free_svars q
Σ: Signature
Γ: Theory
p, q: Pattern
E: evar
ψ: Pattern
gpi: ProofInfo
wfp: well_formed p = true
wfq: well_formed q = true
wfC: PC_wf {| pcEvar := E; pcPattern := ψ |}
pile: ProofInfoLe (ExGen := list_to_set (evar_fresh_seq (free_evars ψ ∪ free_evars p ∪ free_evars q ∪ {[E]}) (maximal_exists_depth_of_evar_in_pattern E ψ)), SVSubst := list_to_set (svar_fresh_seq (free_svars ψ ∪ free_svars p ∪ free_svars q) (maximal_mu_depth_of_evar_in_pattern E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' (free_evars ψ ∪ free_evars p ∪ free_evars q ∪ {[E]}) (free_svars ψ ∪ free_svars p ∪ free_svars q) E ψ p q wfC wfp wfq)) gpi
Hiff: Γ ⊢i p <---> q using gpi
H: well_formed (p <---> q)
H0: well_formed p
H1: well_formed q
ProofInfoLe (ExGen := list_to_set (evar_fresh_seq (free_evars ψ ∪ free_evars p ∪ free_evars q ∪ {[E]}) (maximal_exists_depth_of_evar_in_pattern' 0 E ψ)), SVSubst := list_to_set (svar_fresh_seq (free_svars ψ ∪ free_svars p ∪ free_svars q) (maximal_mu_depth_of_evar_in_pattern' 0 E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' 0 E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' (free_evars ψ ∪ free_evars p ∪ free_evars q ∪ {[E]}) (free_svars ψ ∪ free_svars p ∪ free_svars q) E ψ p q ?wfψ ?wfp ?wfq)) gpi
Σ: Signature
Γ: Theory
p, q: Pattern
E: evar
ψ: Pattern
gpi: ProofInfo
wfp: well_formed p = true
wfq: well_formed q = true
wfC: PC_wf {| pcEvar := E; pcPattern := ψ |}
pile: ProofInfoLe (ExGen := list_to_set (evar_fresh_seq (free_evars ψ ∪ free_evars p ∪ free_evars q ∪ {[E]}) (maximal_exists_depth_of_evar_in_pattern E ψ)), SVSubst := list_to_set (svar_fresh_seq (free_svars ψ ∪ free_svars p ∪ free_svars q) (maximal_mu_depth_of_evar_in_pattern E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' (free_evars ψ ∪ free_evars p ∪ free_evars q ∪ {[E]}) (free_svars ψ ∪ free_svars p ∪ free_svars q) E ψ p q wfC wfp wfq)) gpi
Hiff: Γ ⊢i p <---> q using gpi
H: well_formed (p <---> q)
H0: well_formed p
H1: well_formed q
Γ ⊢i p <---> q using gpi
Σ: Signature
Γ: Theory
p, q: Pattern
E: evar
ψ: Pattern
gpi: ProofInfo
wfp: well_formed p = true
wfq: well_formed q = true
wfC: PC_wf {| pcEvar := E; pcPattern := ψ |}
pile: ProofInfoLe (ExGen := list_to_set (evar_fresh_seq (free_evars ψ ∪ free_evars p ∪ free_evars q ∪ {[E]}) (maximal_exists_depth_of_evar_in_pattern E ψ)), SVSubst := list_to_set (svar_fresh_seq (free_svars ψ ∪ free_svars p ∪ free_svars q) (maximal_mu_depth_of_evar_in_pattern E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' (free_evars ψ ∪ free_evars p ∪ free_evars q ∪ {[E]}) (free_svars ψ ∪ free_svars p ∪ free_svars q) E ψ p q wfC wfp wfq)) gpi
Hiff: Γ ⊢i p <---> q using gpi
H: well_formed (p <---> q)
H0: well_formed p
H1: well_formed q

size' ψ ≤ size' ψ
apply reflexivity.
Σ: Signature
Γ: Theory
p, q: Pattern
E: evar
ψ: Pattern
gpi: ProofInfo
wfp: well_formed p = true
wfq: well_formed q = true
wfC: PC_wf {| pcEvar := E; pcPattern := ψ |}
pile: ProofInfoLe (ExGen := list_to_set (evar_fresh_seq (free_evars ψ ∪ free_evars p ∪ free_evars q ∪ {[E]}) (maximal_exists_depth_of_evar_in_pattern E ψ)), SVSubst := list_to_set (svar_fresh_seq (free_svars ψ ∪ free_svars p ∪ free_svars q) (maximal_mu_depth_of_evar_in_pattern E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' (free_evars ψ ∪ free_evars p ∪ free_evars q ∪ {[E]}) (free_svars ψ ∪ free_svars p ∪ free_svars q) E ψ p q wfC wfp wfq)) gpi
Hiff: Γ ⊢i p <---> q using gpi
H: well_formed (p <---> q)
H0: well_formed p
H1: well_formed q

free_evars p ⊆ free_evars ψ ∪ free_evars p ∪ free_evars q ∪ {[E]}
Σ: Signature
Γ: Theory
p, q: Pattern
E: evar
ψ: Pattern
gpi: ProofInfo
wfp: well_formed p = true
wfq: well_formed q = true
wfC: PC_wf {| pcEvar := E; pcPattern := ψ |}
pile: ProofInfoLe (ExGen := list_to_set (evar_fresh_seq (free_evars ψ ∪ free_evars p ∪ free_evars q ∪ {[E]}) (maximal_exists_depth_of_evar_in_pattern E ψ)), SVSubst := list_to_set (svar_fresh_seq (free_svars ψ ∪ free_svars p ∪ free_svars q) (maximal_mu_depth_of_evar_in_pattern E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' (free_evars ψ ∪ free_evars p ∪ free_evars q ∪ {[E]}) (free_svars ψ ∪ free_svars p ∪ free_svars q) E ψ p q wfC wfp wfq)) gpi
Hiff: Γ ⊢i p <---> q using gpi
H: well_formed (p <---> q)
H0: well_formed p
H1: well_formed q
free_evars q ⊆ free_evars ψ ∪ free_evars p ∪ free_evars q ∪ {[E]}
Σ: Signature
Γ: Theory
p, q: Pattern
E: evar
ψ: Pattern
gpi: ProofInfo
wfp: well_formed p = true
wfq: well_formed q = true
wfC: PC_wf {| pcEvar := E; pcPattern := ψ |}
pile: ProofInfoLe (ExGen := list_to_set (evar_fresh_seq (free_evars ψ ∪ free_evars p ∪ free_evars q ∪ {[E]}) (maximal_exists_depth_of_evar_in_pattern E ψ)), SVSubst := list_to_set (svar_fresh_seq (free_svars ψ ∪ free_svars p ∪ free_svars q) (maximal_mu_depth_of_evar_in_pattern E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' (free_evars ψ ∪ free_evars p ∪ free_evars q ∪ {[E]}) (free_svars ψ ∪ free_svars p ∪ free_svars q) E ψ p q wfC wfp wfq)) gpi
Hiff: Γ ⊢i p <---> q using gpi
H: well_formed (p <---> q)
H0: well_formed p
H1: well_formed q
free_evars ψ ⊆ free_evars ψ ∪ free_evars p ∪ free_evars q ∪ {[E]}
Σ: Signature
Γ: Theory
p, q: Pattern
E: evar
ψ: Pattern
gpi: ProofInfo
wfp: well_formed p = true
wfq: well_formed q = true
wfC: PC_wf {| pcEvar := E; pcPattern := ψ |}
pile: ProofInfoLe (ExGen := list_to_set (evar_fresh_seq (free_evars ψ ∪ free_evars p ∪ free_evars q ∪ {[E]}) (maximal_exists_depth_of_evar_in_pattern E ψ)), SVSubst := list_to_set (svar_fresh_seq (free_svars ψ ∪ free_svars p ∪ free_svars q) (maximal_mu_depth_of_evar_in_pattern E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' (free_evars ψ ∪ free_evars p ∪ free_evars q ∪ {[E]}) (free_svars ψ ∪ free_svars p ∪ free_svars q) E ψ p q wfC wfp wfq)) gpi
Hiff: Γ ⊢i p <---> q using gpi
H: well_formed (p <---> q)
H0: well_formed p
H1: well_formed q
E ∈ free_evars ψ ∪ free_evars p ∪ free_evars q ∪ {[E]}
Σ: Signature
Γ: Theory
p, q: Pattern
E: evar
ψ: Pattern
gpi: ProofInfo
wfp: well_formed p = true
wfq: well_formed q = true
wfC: PC_wf {| pcEvar := E; pcPattern := ψ |}
pile: ProofInfoLe (ExGen := list_to_set (evar_fresh_seq (free_evars ψ ∪ free_evars p ∪ free_evars q ∪ {[E]}) (maximal_exists_depth_of_evar_in_pattern E ψ)), SVSubst := list_to_set (svar_fresh_seq (free_svars ψ ∪ free_svars p ∪ free_svars q) (maximal_mu_depth_of_evar_in_pattern E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' (free_evars ψ ∪ free_evars p ∪ free_evars q ∪ {[E]}) (free_svars ψ ∪ free_svars p ∪ free_svars q) E ψ p q wfC wfp wfq)) gpi
Hiff: Γ ⊢i p <---> q using gpi
H: well_formed (p <---> q)
H0: well_formed p
H1: well_formed q
free_svars p ⊆ free_svars ψ ∪ free_svars p ∪ free_svars q
Σ: Signature
Γ: Theory
p, q: Pattern
E: evar
ψ: Pattern
gpi: ProofInfo
wfp: well_formed p = true
wfq: well_formed q = true
wfC: PC_wf {| pcEvar := E; pcPattern := ψ |}
pile: ProofInfoLe (ExGen := list_to_set (evar_fresh_seq (free_evars ψ ∪ free_evars p ∪ free_evars q ∪ {[E]}) (maximal_exists_depth_of_evar_in_pattern E ψ)), SVSubst := list_to_set (svar_fresh_seq (free_svars ψ ∪ free_svars p ∪ free_svars q) (maximal_mu_depth_of_evar_in_pattern E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' (free_evars ψ ∪ free_evars p ∪ free_evars q ∪ {[E]}) (free_svars ψ ∪ free_svars p ∪ free_svars q) E ψ p q wfC wfp wfq)) gpi
Hiff: Γ ⊢i p <---> q using gpi
H: well_formed (p <---> q)
H0: well_formed p
H1: well_formed q
free_svars q ⊆ free_svars ψ ∪ free_svars p ∪ free_svars q
Σ: Signature
Γ: Theory
p, q: Pattern
E: evar
ψ: Pattern
gpi: ProofInfo
wfp: well_formed p = true
wfq: well_formed q = true
wfC: PC_wf {| pcEvar := E; pcPattern := ψ |}
pile: ProofInfoLe (ExGen := list_to_set (evar_fresh_seq (free_evars ψ ∪ free_evars p ∪ free_evars q ∪ {[E]}) (maximal_exists_depth_of_evar_in_pattern E ψ)), SVSubst := list_to_set (svar_fresh_seq (free_svars ψ ∪ free_svars p ∪ free_svars q) (maximal_mu_depth_of_evar_in_pattern E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' (free_evars ψ ∪ free_evars p ∪ free_evars q ∪ {[E]}) (free_svars ψ ∪ free_svars p ∪ free_svars q) E ψ p q wfC wfp wfq)) gpi
Hiff: Γ ⊢i p <---> q using gpi
H: well_formed (p <---> q)
H0: well_formed p
H1: well_formed q
free_svars ψ ⊆ free_svars ψ ∪ free_svars p ∪ free_svars q
Σ: Signature
Γ: Theory
p, q: Pattern
E: evar
ψ: Pattern
gpi: ProofInfo
wfp: well_formed p = true
wfq: well_formed q = true
wfC: PC_wf {| pcEvar := E; pcPattern := ψ |}
pile: ProofInfoLe (ExGen := list_to_set (evar_fresh_seq (free_evars ψ ∪ free_evars p ∪ free_evars q ∪ {[E]}) (maximal_exists_depth_of_evar_in_pattern E ψ)), SVSubst := list_to_set (svar_fresh_seq (free_svars ψ ∪ free_svars p ∪ free_svars q) (maximal_mu_depth_of_evar_in_pattern E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' (free_evars ψ ∪ free_evars p ∪ free_evars q ∪ {[E]}) (free_svars ψ ∪ free_svars p ∪ free_svars q) E ψ p q wfC wfp wfq)) gpi
Hiff: Γ ⊢i p <---> q using gpi
H: well_formed (p <---> q)
H0: well_formed p
H1: well_formed q
ProofInfoLe (ExGen := list_to_set (evar_fresh_seq (free_evars ψ ∪ free_evars p ∪ free_evars q ∪ {[E]}) (maximal_exists_depth_of_evar_in_pattern' 0 E ψ)), SVSubst := list_to_set (svar_fresh_seq (free_svars ψ ∪ free_svars p ∪ free_svars q) (maximal_mu_depth_of_evar_in_pattern' 0 E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' 0 E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' (free_evars ψ ∪ free_evars p ∪ free_evars q ∪ {[E]}) (free_svars ψ ∪ free_svars p ∪ free_svars q) E ψ p q ?wfψ ?wfp ?wfq)) gpi
Σ: Signature
Γ: Theory
p, q: Pattern
E: evar
ψ: Pattern
gpi: ProofInfo
wfp: well_formed p = true
wfq: well_formed q = true
wfC: PC_wf {| pcEvar := E; pcPattern := ψ |}
pile: ProofInfoLe (ExGen := list_to_set (evar_fresh_seq (free_evars ψ ∪ free_evars p ∪ free_evars q ∪ {[E]}) (maximal_exists_depth_of_evar_in_pattern E ψ)), SVSubst := list_to_set (svar_fresh_seq (free_svars ψ ∪ free_svars p ∪ free_svars q) (maximal_mu_depth_of_evar_in_pattern E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' (free_evars ψ ∪ free_evars p ∪ free_evars q ∪ {[E]}) (free_svars ψ ∪ free_svars p ∪ free_svars q) E ψ p q wfC wfp wfq)) gpi
Hiff: Γ ⊢i p <---> q using gpi
H: well_formed (p <---> q)
H0: well_formed p
H1: well_formed q
Γ ⊢i p <---> q using gpi
Σ: Signature
Γ: Theory
p, q: Pattern
E: evar
ψ: Pattern
gpi: ProofInfo
wfp: well_formed p = true
wfq: well_formed q = true
wfC: PC_wf {| pcEvar := E; pcPattern := ψ |}
pile: ProofInfoLe (ExGen := list_to_set (evar_fresh_seq (free_evars ψ ∪ free_evars p ∪ free_evars q ∪ {[E]}) (maximal_exists_depth_of_evar_in_pattern E ψ)), SVSubst := list_to_set (svar_fresh_seq (free_svars ψ ∪ free_svars p ∪ free_svars q) (maximal_mu_depth_of_evar_in_pattern E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' (free_evars ψ ∪ free_evars p ∪ free_evars q ∪ {[E]}) (free_svars ψ ∪ free_svars p ∪ free_svars q) E ψ p q wfC wfp wfq)) gpi
Hiff: Γ ⊢i p <---> q using gpi
H: well_formed (p <---> q)
H0: well_formed p
H1: well_formed q

free_evars p ⊆ free_evars ψ ∪ free_evars p ∪ free_evars q ∪ {[E]}
abstract (clear; set_solver).
Σ: Signature
Γ: Theory
p, q: Pattern
E: evar
ψ: Pattern
gpi: ProofInfo
wfp: well_formed p = true
wfq: well_formed q = true
wfC: PC_wf {| pcEvar := E; pcPattern := ψ |}
pile: ProofInfoLe (ExGen := list_to_set (evar_fresh_seq (free_evars ψ ∪ free_evars p ∪ free_evars q ∪ {[E]}) (maximal_exists_depth_of_evar_in_pattern E ψ)), SVSubst := list_to_set (svar_fresh_seq (free_svars ψ ∪ free_svars p ∪ free_svars q) (maximal_mu_depth_of_evar_in_pattern E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' (free_evars ψ ∪ free_evars p ∪ free_evars q ∪ {[E]}) (free_svars ψ ∪ free_svars p ∪ free_svars q) E ψ p q wfC wfp wfq)) gpi
Hiff: Γ ⊢i p <---> q using gpi
H: well_formed (p <---> q)
H0: well_formed p
H1: well_formed q

free_evars q ⊆ free_evars ψ ∪ free_evars p ∪ free_evars q ∪ {[E]}
Σ: Signature
Γ: Theory
p, q: Pattern
E: evar
ψ: Pattern
gpi: ProofInfo
wfp: well_formed p = true
wfq: well_formed q = true
wfC: PC_wf {| pcEvar := E; pcPattern := ψ |}
pile: ProofInfoLe (ExGen := list_to_set (evar_fresh_seq (free_evars ψ ∪ free_evars p ∪ free_evars q ∪ {[E]}) (maximal_exists_depth_of_evar_in_pattern E ψ)), SVSubst := list_to_set (svar_fresh_seq (free_svars ψ ∪ free_svars p ∪ free_svars q) (maximal_mu_depth_of_evar_in_pattern E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' (free_evars ψ ∪ free_evars p ∪ free_evars q ∪ {[E]}) (free_svars ψ ∪ free_svars p ∪ free_svars q) E ψ p q wfC wfp wfq)) gpi
Hiff: Γ ⊢i p <---> q using gpi
H: well_formed (p <---> q)
H0: well_formed p
H1: well_formed q
free_evars ψ ⊆ free_evars ψ ∪ free_evars p ∪ free_evars q ∪ {[E]}
Σ: Signature
Γ: Theory
p, q: Pattern
E: evar
ψ: Pattern
gpi: ProofInfo
wfp: well_formed p = true
wfq: well_formed q = true
wfC: PC_wf {| pcEvar := E; pcPattern := ψ |}
pile: ProofInfoLe (ExGen := list_to_set (evar_fresh_seq (free_evars ψ ∪ free_evars p ∪ free_evars q ∪ {[E]}) (maximal_exists_depth_of_evar_in_pattern E ψ)), SVSubst := list_to_set (svar_fresh_seq (free_svars ψ ∪ free_svars p ∪ free_svars q) (maximal_mu_depth_of_evar_in_pattern E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' (free_evars ψ ∪ free_evars p ∪ free_evars q ∪ {[E]}) (free_svars ψ ∪ free_svars p ∪ free_svars q) E ψ p q wfC wfp wfq)) gpi
Hiff: Γ ⊢i p <---> q using gpi
H: well_formed (p <---> q)
H0: well_formed p
H1: well_formed q
E ∈ free_evars ψ ∪ free_evars p ∪ free_evars q ∪ {[E]}
Σ: Signature
Γ: Theory
p, q: Pattern
E: evar
ψ: Pattern
gpi: ProofInfo
wfp: well_formed p = true
wfq: well_formed q = true
wfC: PC_wf {| pcEvar := E; pcPattern := ψ |}
pile: ProofInfoLe (ExGen := list_to_set (evar_fresh_seq (free_evars ψ ∪ free_evars p ∪ free_evars q ∪ {[E]}) (maximal_exists_depth_of_evar_in_pattern E ψ)), SVSubst := list_to_set (svar_fresh_seq (free_svars ψ ∪ free_svars p ∪ free_svars q) (maximal_mu_depth_of_evar_in_pattern E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' (free_evars ψ ∪ free_evars p ∪ free_evars q ∪ {[E]}) (free_svars ψ ∪ free_svars p ∪ free_svars q) E ψ p q wfC wfp wfq)) gpi
Hiff: Γ ⊢i p <---> q using gpi
H: well_formed (p <---> q)
H0: well_formed p
H1: well_formed q
free_svars p ⊆ free_svars ψ ∪ free_svars p ∪ free_svars q
Σ: Signature
Γ: Theory
p, q: Pattern
E: evar
ψ: Pattern
gpi: ProofInfo
wfp: well_formed p = true
wfq: well_formed q = true
wfC: PC_wf {| pcEvar := E; pcPattern := ψ |}
pile: ProofInfoLe (ExGen := list_to_set (evar_fresh_seq (free_evars ψ ∪ free_evars p ∪ free_evars q ∪ {[E]}) (maximal_exists_depth_of_evar_in_pattern E ψ)), SVSubst := list_to_set (svar_fresh_seq (free_svars ψ ∪ free_svars p ∪ free_svars q) (maximal_mu_depth_of_evar_in_pattern E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' (free_evars ψ ∪ free_evars p ∪ free_evars q ∪ {[E]}) (free_svars ψ ∪ free_svars p ∪ free_svars q) E ψ p q wfC wfp wfq)) gpi
Hiff: Γ ⊢i p <---> q using gpi
H: well_formed (p <---> q)
H0: well_formed p
H1: well_formed q
free_svars q ⊆ free_svars ψ ∪ free_svars p ∪ free_svars q
Σ: Signature
Γ: Theory
p, q: Pattern
E: evar
ψ: Pattern
gpi: ProofInfo
wfp: well_formed p = true
wfq: well_formed q = true
wfC: PC_wf {| pcEvar := E; pcPattern := ψ |}
pile: ProofInfoLe (ExGen := list_to_set (evar_fresh_seq (free_evars ψ ∪ free_evars p ∪ free_evars q ∪ {[E]}) (maximal_exists_depth_of_evar_in_pattern E ψ)), SVSubst := list_to_set (svar_fresh_seq (free_svars ψ ∪ free_svars p ∪ free_svars q) (maximal_mu_depth_of_evar_in_pattern E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' (free_evars ψ ∪ free_evars p ∪ free_evars q ∪ {[E]}) (free_svars ψ ∪ free_svars p ∪ free_svars q) E ψ p q wfC wfp wfq)) gpi
Hiff: Γ ⊢i p <---> q using gpi
H: well_formed (p <---> q)
H0: well_formed p
H1: well_formed q
free_svars ψ ⊆ free_svars ψ ∪ free_svars p ∪ free_svars q
Σ: Signature
Γ: Theory
p, q: Pattern
E: evar
ψ: Pattern
gpi: ProofInfo
wfp: well_formed p = true
wfq: well_formed q = true
wfC: PC_wf {| pcEvar := E; pcPattern := ψ |}
pile: ProofInfoLe (ExGen := list_to_set (evar_fresh_seq (free_evars ψ ∪ free_evars p ∪ free_evars q ∪ {[E]}) (maximal_exists_depth_of_evar_in_pattern E ψ)), SVSubst := list_to_set (svar_fresh_seq (free_svars ψ ∪ free_svars p ∪ free_svars q) (maximal_mu_depth_of_evar_in_pattern E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' (free_evars ψ ∪ free_evars p ∪ free_evars q ∪ {[E]}) (free_svars ψ ∪ free_svars p ∪ free_svars q) E ψ p q wfC wfp wfq)) gpi
Hiff: Γ ⊢i p <---> q using gpi
H: well_formed (p <---> q)
H0: well_formed p
H1: well_formed q
ProofInfoLe (ExGen := list_to_set (evar_fresh_seq (free_evars ψ ∪ free_evars p ∪ free_evars q ∪ {[E]}) (maximal_exists_depth_of_evar_in_pattern' 0 E ψ)), SVSubst := list_to_set (svar_fresh_seq (free_svars ψ ∪ free_svars p ∪ free_svars q) (maximal_mu_depth_of_evar_in_pattern' 0 E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' 0 E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' (free_evars ψ ∪ free_evars p ∪ free_evars q ∪ {[E]}) (free_svars ψ ∪ free_svars p ∪ free_svars q) E ψ p q ?wfψ ?wfp ?wfq)) gpi
Σ: Signature
Γ: Theory
p, q: Pattern
E: evar
ψ: Pattern
gpi: ProofInfo
wfp: well_formed p = true
wfq: well_formed q = true
wfC: PC_wf {| pcEvar := E; pcPattern := ψ |}
pile: ProofInfoLe (ExGen := list_to_set (evar_fresh_seq (free_evars ψ ∪ free_evars p ∪ free_evars q ∪ {[E]}) (maximal_exists_depth_of_evar_in_pattern E ψ)), SVSubst := list_to_set (svar_fresh_seq (free_svars ψ ∪ free_svars p ∪ free_svars q) (maximal_mu_depth_of_evar_in_pattern E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' (free_evars ψ ∪ free_evars p ∪ free_evars q ∪ {[E]}) (free_svars ψ ∪ free_svars p ∪ free_svars q) E ψ p q wfC wfp wfq)) gpi
Hiff: Γ ⊢i p <---> q using gpi
H: well_formed (p <---> q)
H0: well_formed p
H1: well_formed q
Γ ⊢i p <---> q using gpi
Σ: Signature
Γ: Theory
p, q: Pattern
E: evar
ψ: Pattern
gpi: ProofInfo
wfp: well_formed p = true
wfq: well_formed q = true
wfC: PC_wf {| pcEvar := E; pcPattern := ψ |}
pile: ProofInfoLe (ExGen := list_to_set (evar_fresh_seq (free_evars ψ ∪ free_evars p ∪ free_evars q ∪ {[E]}) (maximal_exists_depth_of_evar_in_pattern E ψ)), SVSubst := list_to_set (svar_fresh_seq (free_svars ψ ∪ free_svars p ∪ free_svars q) (maximal_mu_depth_of_evar_in_pattern E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' (free_evars ψ ∪ free_evars p ∪ free_evars q ∪ {[E]}) (free_svars ψ ∪ free_svars p ∪ free_svars q) E ψ p q wfC wfp wfq)) gpi
Hiff: Γ ⊢i p <---> q using gpi
H: well_formed (p <---> q)
H0: well_formed p
H1: well_formed q

free_evars q ⊆ free_evars ψ ∪ free_evars p ∪ free_evars q ∪ {[E]}
abstract (clear; set_solver).
Σ: Signature
Γ: Theory
p, q: Pattern
E: evar
ψ: Pattern
gpi: ProofInfo
wfp: well_formed p = true
wfq: well_formed q = true
wfC: PC_wf {| pcEvar := E; pcPattern := ψ |}
pile: ProofInfoLe (ExGen := list_to_set (evar_fresh_seq (free_evars ψ ∪ free_evars p ∪ free_evars q ∪ {[E]}) (maximal_exists_depth_of_evar_in_pattern E ψ)), SVSubst := list_to_set (svar_fresh_seq (free_svars ψ ∪ free_svars p ∪ free_svars q) (maximal_mu_depth_of_evar_in_pattern E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' (free_evars ψ ∪ free_evars p ∪ free_evars q ∪ {[E]}) (free_svars ψ ∪ free_svars p ∪ free_svars q) E ψ p q wfC wfp wfq)) gpi
Hiff: Γ ⊢i p <---> q using gpi
H: well_formed (p <---> q)
H0: well_formed p
H1: well_formed q

free_evars ψ ⊆ free_evars ψ ∪ free_evars p ∪ free_evars q ∪ {[E]}
Σ: Signature
Γ: Theory
p, q: Pattern
E: evar
ψ: Pattern
gpi: ProofInfo
wfp: well_formed p = true
wfq: well_formed q = true
wfC: PC_wf {| pcEvar := E; pcPattern := ψ |}
pile: ProofInfoLe (ExGen := list_to_set (evar_fresh_seq (free_evars ψ ∪ free_evars p ∪ free_evars q ∪ {[E]}) (maximal_exists_depth_of_evar_in_pattern E ψ)), SVSubst := list_to_set (svar_fresh_seq (free_svars ψ ∪ free_svars p ∪ free_svars q) (maximal_mu_depth_of_evar_in_pattern E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' (free_evars ψ ∪ free_evars p ∪ free_evars q ∪ {[E]}) (free_svars ψ ∪ free_svars p ∪ free_svars q) E ψ p q wfC wfp wfq)) gpi
Hiff: Γ ⊢i p <---> q using gpi
H: well_formed (p <---> q)
H0: well_formed p
H1: well_formed q
E ∈ free_evars ψ ∪ free_evars p ∪ free_evars q ∪ {[E]}
Σ: Signature
Γ: Theory
p, q: Pattern
E: evar
ψ: Pattern
gpi: ProofInfo
wfp: well_formed p = true
wfq: well_formed q = true
wfC: PC_wf {| pcEvar := E; pcPattern := ψ |}
pile: ProofInfoLe (ExGen := list_to_set (evar_fresh_seq (free_evars ψ ∪ free_evars p ∪ free_evars q ∪ {[E]}) (maximal_exists_depth_of_evar_in_pattern E ψ)), SVSubst := list_to_set (svar_fresh_seq (free_svars ψ ∪ free_svars p ∪ free_svars q) (maximal_mu_depth_of_evar_in_pattern E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' (free_evars ψ ∪ free_evars p ∪ free_evars q ∪ {[E]}) (free_svars ψ ∪ free_svars p ∪ free_svars q) E ψ p q wfC wfp wfq)) gpi
Hiff: Γ ⊢i p <---> q using gpi
H: well_formed (p <---> q)
H0: well_formed p
H1: well_formed q
free_svars p ⊆ free_svars ψ ∪ free_svars p ∪ free_svars q
Σ: Signature
Γ: Theory
p, q: Pattern
E: evar
ψ: Pattern
gpi: ProofInfo
wfp: well_formed p = true
wfq: well_formed q = true
wfC: PC_wf {| pcEvar := E; pcPattern := ψ |}
pile: ProofInfoLe (ExGen := list_to_set (evar_fresh_seq (free_evars ψ ∪ free_evars p ∪ free_evars q ∪ {[E]}) (maximal_exists_depth_of_evar_in_pattern E ψ)), SVSubst := list_to_set (svar_fresh_seq (free_svars ψ ∪ free_svars p ∪ free_svars q) (maximal_mu_depth_of_evar_in_pattern E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' (free_evars ψ ∪ free_evars p ∪ free_evars q ∪ {[E]}) (free_svars ψ ∪ free_svars p ∪ free_svars q) E ψ p q wfC wfp wfq)) gpi
Hiff: Γ ⊢i p <---> q using gpi
H: well_formed (p <---> q)
H0: well_formed p
H1: well_formed q
free_svars q ⊆ free_svars ψ ∪ free_svars p ∪ free_svars q
Σ: Signature
Γ: Theory
p, q: Pattern
E: evar
ψ: Pattern
gpi: ProofInfo
wfp: well_formed p = true
wfq: well_formed q = true
wfC: PC_wf {| pcEvar := E; pcPattern := ψ |}
pile: ProofInfoLe (ExGen := list_to_set (evar_fresh_seq (free_evars ψ ∪ free_evars p ∪ free_evars q ∪ {[E]}) (maximal_exists_depth_of_evar_in_pattern E ψ)), SVSubst := list_to_set (svar_fresh_seq (free_svars ψ ∪ free_svars p ∪ free_svars q) (maximal_mu_depth_of_evar_in_pattern E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' (free_evars ψ ∪ free_evars p ∪ free_evars q ∪ {[E]}) (free_svars ψ ∪ free_svars p ∪ free_svars q) E ψ p q wfC wfp wfq)) gpi
Hiff: Γ ⊢i p <---> q using gpi
H: well_formed (p <---> q)
H0: well_formed p
H1: well_formed q
free_svars ψ ⊆ free_svars ψ ∪ free_svars p ∪ free_svars q
Σ: Signature
Γ: Theory
p, q: Pattern
E: evar
ψ: Pattern
gpi: ProofInfo
wfp: well_formed p = true
wfq: well_formed q = true
wfC: PC_wf {| pcEvar := E; pcPattern := ψ |}
pile: ProofInfoLe (ExGen := list_to_set (evar_fresh_seq (free_evars ψ ∪ free_evars p ∪ free_evars q ∪ {[E]}) (maximal_exists_depth_of_evar_in_pattern E ψ)), SVSubst := list_to_set (svar_fresh_seq (free_svars ψ ∪ free_svars p ∪ free_svars q) (maximal_mu_depth_of_evar_in_pattern E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' (free_evars ψ ∪ free_evars p ∪ free_evars q ∪ {[E]}) (free_svars ψ ∪ free_svars p ∪ free_svars q) E ψ p q wfC wfp wfq)) gpi
Hiff: Γ ⊢i p <---> q using gpi
H: well_formed (p <---> q)
H0: well_formed p
H1: well_formed q
ProofInfoLe (ExGen := list_to_set (evar_fresh_seq (free_evars ψ ∪ free_evars p ∪ free_evars q ∪ {[E]}) (maximal_exists_depth_of_evar_in_pattern' 0 E ψ)), SVSubst := list_to_set (svar_fresh_seq (free_svars ψ ∪ free_svars p ∪ free_svars q) (maximal_mu_depth_of_evar_in_pattern' 0 E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' 0 E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' (free_evars ψ ∪ free_evars p ∪ free_evars q ∪ {[E]}) (free_svars ψ ∪ free_svars p ∪ free_svars q) E ψ p q ?wfψ ?wfp ?wfq)) gpi
Σ: Signature
Γ: Theory
p, q: Pattern
E: evar
ψ: Pattern
gpi: ProofInfo
wfp: well_formed p = true
wfq: well_formed q = true
wfC: PC_wf {| pcEvar := E; pcPattern := ψ |}
pile: ProofInfoLe (ExGen := list_to_set (evar_fresh_seq (free_evars ψ ∪ free_evars p ∪ free_evars q ∪ {[E]}) (maximal_exists_depth_of_evar_in_pattern E ψ)), SVSubst := list_to_set (svar_fresh_seq (free_svars ψ ∪ free_svars p ∪ free_svars q) (maximal_mu_depth_of_evar_in_pattern E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' (free_evars ψ ∪ free_evars p ∪ free_evars q ∪ {[E]}) (free_svars ψ ∪ free_svars p ∪ free_svars q) E ψ p q wfC wfp wfq)) gpi
Hiff: Γ ⊢i p <---> q using gpi
H: well_formed (p <---> q)
H0: well_formed p
H1: well_formed q
Γ ⊢i p <---> q using gpi
Σ: Signature
Γ: Theory
p, q: Pattern
E: evar
ψ: Pattern
gpi: ProofInfo
wfp: well_formed p = true
wfq: well_formed q = true
wfC: PC_wf {| pcEvar := E; pcPattern := ψ |}
pile: ProofInfoLe (ExGen := list_to_set (evar_fresh_seq (free_evars ψ ∪ free_evars p ∪ free_evars q ∪ {[E]}) (maximal_exists_depth_of_evar_in_pattern E ψ)), SVSubst := list_to_set (svar_fresh_seq (free_svars ψ ∪ free_svars p ∪ free_svars q) (maximal_mu_depth_of_evar_in_pattern E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' (free_evars ψ ∪ free_evars p ∪ free_evars q ∪ {[E]}) (free_svars ψ ∪ free_svars p ∪ free_svars q) E ψ p q wfC wfp wfq)) gpi
Hiff: Γ ⊢i p <---> q using gpi
H: well_formed (p <---> q)
H0: well_formed p
H1: well_formed q

free_evars ψ ⊆ free_evars ψ ∪ free_evars p ∪ free_evars q ∪ {[E]}
abstract (clear; set_solver).
Σ: Signature
Γ: Theory
p, q: Pattern
E: evar
ψ: Pattern
gpi: ProofInfo
wfp: well_formed p = true
wfq: well_formed q = true
wfC: PC_wf {| pcEvar := E; pcPattern := ψ |}
pile: ProofInfoLe (ExGen := list_to_set (evar_fresh_seq (free_evars ψ ∪ free_evars p ∪ free_evars q ∪ {[E]}) (maximal_exists_depth_of_evar_in_pattern E ψ)), SVSubst := list_to_set (svar_fresh_seq (free_svars ψ ∪ free_svars p ∪ free_svars q) (maximal_mu_depth_of_evar_in_pattern E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' (free_evars ψ ∪ free_evars p ∪ free_evars q ∪ {[E]}) (free_svars ψ ∪ free_svars p ∪ free_svars q) E ψ p q wfC wfp wfq)) gpi
Hiff: Γ ⊢i p <---> q using gpi
H: well_formed (p <---> q)
H0: well_formed p
H1: well_formed q

E ∈ free_evars ψ ∪ free_evars p ∪ free_evars q ∪ {[E]}
Σ: Signature
Γ: Theory
p, q: Pattern
E: evar
ψ: Pattern
gpi: ProofInfo
wfp: well_formed p = true
wfq: well_formed q = true
wfC: PC_wf {| pcEvar := E; pcPattern := ψ |}
pile: ProofInfoLe (ExGen := list_to_set (evar_fresh_seq (free_evars ψ ∪ free_evars p ∪ free_evars q ∪ {[E]}) (maximal_exists_depth_of_evar_in_pattern E ψ)), SVSubst := list_to_set (svar_fresh_seq (free_svars ψ ∪ free_svars p ∪ free_svars q) (maximal_mu_depth_of_evar_in_pattern E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' (free_evars ψ ∪ free_evars p ∪ free_evars q ∪ {[E]}) (free_svars ψ ∪ free_svars p ∪ free_svars q) E ψ p q wfC wfp wfq)) gpi
Hiff: Γ ⊢i p <---> q using gpi
H: well_formed (p <---> q)
H0: well_formed p
H1: well_formed q
free_svars p ⊆ free_svars ψ ∪ free_svars p ∪ free_svars q
Σ: Signature
Γ: Theory
p, q: Pattern
E: evar
ψ: Pattern
gpi: ProofInfo
wfp: well_formed p = true
wfq: well_formed q = true
wfC: PC_wf {| pcEvar := E; pcPattern := ψ |}
pile: ProofInfoLe (ExGen := list_to_set (evar_fresh_seq (free_evars ψ ∪ free_evars p ∪ free_evars q ∪ {[E]}) (maximal_exists_depth_of_evar_in_pattern E ψ)), SVSubst := list_to_set (svar_fresh_seq (free_svars ψ ∪ free_svars p ∪ free_svars q) (maximal_mu_depth_of_evar_in_pattern E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' (free_evars ψ ∪ free_evars p ∪ free_evars q ∪ {[E]}) (free_svars ψ ∪ free_svars p ∪ free_svars q) E ψ p q wfC wfp wfq)) gpi
Hiff: Γ ⊢i p <---> q using gpi
H: well_formed (p <---> q)
H0: well_formed p
H1: well_formed q
free_svars q ⊆ free_svars ψ ∪ free_svars p ∪ free_svars q
Σ: Signature
Γ: Theory
p, q: Pattern
E: evar
ψ: Pattern
gpi: ProofInfo
wfp: well_formed p = true
wfq: well_formed q = true
wfC: PC_wf {| pcEvar := E; pcPattern := ψ |}
pile: ProofInfoLe (ExGen := list_to_set (evar_fresh_seq (free_evars ψ ∪ free_evars p ∪ free_evars q ∪ {[E]}) (maximal_exists_depth_of_evar_in_pattern E ψ)), SVSubst := list_to_set (svar_fresh_seq (free_svars ψ ∪ free_svars p ∪ free_svars q) (maximal_mu_depth_of_evar_in_pattern E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' (free_evars ψ ∪ free_evars p ∪ free_evars q ∪ {[E]}) (free_svars ψ ∪ free_svars p ∪ free_svars q) E ψ p q wfC wfp wfq)) gpi
Hiff: Γ ⊢i p <---> q using gpi
H: well_formed (p <---> q)
H0: well_formed p
H1: well_formed q
free_svars ψ ⊆ free_svars ψ ∪ free_svars p ∪ free_svars q
Σ: Signature
Γ: Theory
p, q: Pattern
E: evar
ψ: Pattern
gpi: ProofInfo
wfp: well_formed p = true
wfq: well_formed q = true
wfC: PC_wf {| pcEvar := E; pcPattern := ψ |}
pile: ProofInfoLe (ExGen := list_to_set (evar_fresh_seq (free_evars ψ ∪ free_evars p ∪ free_evars q ∪ {[E]}) (maximal_exists_depth_of_evar_in_pattern E ψ)), SVSubst := list_to_set (svar_fresh_seq (free_svars ψ ∪ free_svars p ∪ free_svars q) (maximal_mu_depth_of_evar_in_pattern E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' (free_evars ψ ∪ free_evars p ∪ free_evars q ∪ {[E]}) (free_svars ψ ∪ free_svars p ∪ free_svars q) E ψ p q wfC wfp wfq)) gpi
Hiff: Γ ⊢i p <---> q using gpi
H: well_formed (p <---> q)
H0: well_formed p
H1: well_formed q
ProofInfoLe (ExGen := list_to_set (evar_fresh_seq (free_evars ψ ∪ free_evars p ∪ free_evars q ∪ {[E]}) (maximal_exists_depth_of_evar_in_pattern' 0 E ψ)), SVSubst := list_to_set (svar_fresh_seq (free_svars ψ ∪ free_svars p ∪ free_svars q) (maximal_mu_depth_of_evar_in_pattern' 0 E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' 0 E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' (free_evars ψ ∪ free_evars p ∪ free_evars q ∪ {[E]}) (free_svars ψ ∪ free_svars p ∪ free_svars q) E ψ p q ?wfψ ?wfp ?wfq)) gpi
Σ: Signature
Γ: Theory
p, q: Pattern
E: evar
ψ: Pattern
gpi: ProofInfo
wfp: well_formed p = true
wfq: well_formed q = true
wfC: PC_wf {| pcEvar := E; pcPattern := ψ |}
pile: ProofInfoLe (ExGen := list_to_set (evar_fresh_seq (free_evars ψ ∪ free_evars p ∪ free_evars q ∪ {[E]}) (maximal_exists_depth_of_evar_in_pattern E ψ)), SVSubst := list_to_set (svar_fresh_seq (free_svars ψ ∪ free_svars p ∪ free_svars q) (maximal_mu_depth_of_evar_in_pattern E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' (free_evars ψ ∪ free_evars p ∪ free_evars q ∪ {[E]}) (free_svars ψ ∪ free_svars p ∪ free_svars q) E ψ p q wfC wfp wfq)) gpi
Hiff: Γ ⊢i p <---> q using gpi
H: well_formed (p <---> q)
H0: well_formed p
H1: well_formed q
Γ ⊢i p <---> q using gpi
Σ: Signature
Γ: Theory
p, q: Pattern
E: evar
ψ: Pattern
gpi: ProofInfo
wfp: well_formed p = true
wfq: well_formed q = true
wfC: PC_wf {| pcEvar := E; pcPattern := ψ |}
pile: ProofInfoLe (ExGen := list_to_set (evar_fresh_seq (free_evars ψ ∪ free_evars p ∪ free_evars q ∪ {[E]}) (maximal_exists_depth_of_evar_in_pattern E ψ)), SVSubst := list_to_set (svar_fresh_seq (free_svars ψ ∪ free_svars p ∪ free_svars q) (maximal_mu_depth_of_evar_in_pattern E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' (free_evars ψ ∪ free_evars p ∪ free_evars q ∪ {[E]}) (free_svars ψ ∪ free_svars p ∪ free_svars q) E ψ p q wfC wfp wfq)) gpi
Hiff: Γ ⊢i p <---> q using gpi
H: well_formed (p <---> q)
H0: well_formed p
H1: well_formed q

E ∈ free_evars ψ ∪ free_evars p ∪ free_evars q ∪ {[E]}
abstract (clear; set_solver).
Σ: Signature
Γ: Theory
p, q: Pattern
E: evar
ψ: Pattern
gpi: ProofInfo
wfp: well_formed p = true
wfq: well_formed q = true
wfC: PC_wf {| pcEvar := E; pcPattern := ψ |}
pile: ProofInfoLe (ExGen := list_to_set (evar_fresh_seq (free_evars ψ ∪ free_evars p ∪ free_evars q ∪ {[E]}) (maximal_exists_depth_of_evar_in_pattern E ψ)), SVSubst := list_to_set (svar_fresh_seq (free_svars ψ ∪ free_svars p ∪ free_svars q) (maximal_mu_depth_of_evar_in_pattern E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' (free_evars ψ ∪ free_evars p ∪ free_evars q ∪ {[E]}) (free_svars ψ ∪ free_svars p ∪ free_svars q) E ψ p q wfC wfp wfq)) gpi
Hiff: Γ ⊢i p <---> q using gpi
H: well_formed (p <---> q)
H0: well_formed p
H1: well_formed q

free_svars p ⊆ free_svars ψ ∪ free_svars p ∪ free_svars q
Σ: Signature
Γ: Theory
p, q: Pattern
E: evar
ψ: Pattern
gpi: ProofInfo
wfp: well_formed p = true
wfq: well_formed q = true
wfC: PC_wf {| pcEvar := E; pcPattern := ψ |}
pile: ProofInfoLe (ExGen := list_to_set (evar_fresh_seq (free_evars ψ ∪ free_evars p ∪ free_evars q ∪ {[E]}) (maximal_exists_depth_of_evar_in_pattern E ψ)), SVSubst := list_to_set (svar_fresh_seq (free_svars ψ ∪ free_svars p ∪ free_svars q) (maximal_mu_depth_of_evar_in_pattern E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' (free_evars ψ ∪ free_evars p ∪ free_evars q ∪ {[E]}) (free_svars ψ ∪ free_svars p ∪ free_svars q) E ψ p q wfC wfp wfq)) gpi
Hiff: Γ ⊢i p <---> q using gpi
H: well_formed (p <---> q)
H0: well_formed p
H1: well_formed q
free_svars q ⊆ free_svars ψ ∪ free_svars p ∪ free_svars q
Σ: Signature
Γ: Theory
p, q: Pattern
E: evar
ψ: Pattern
gpi: ProofInfo
wfp: well_formed p = true
wfq: well_formed q = true
wfC: PC_wf {| pcEvar := E; pcPattern := ψ |}
pile: ProofInfoLe (ExGen := list_to_set (evar_fresh_seq (free_evars ψ ∪ free_evars p ∪ free_evars q ∪ {[E]}) (maximal_exists_depth_of_evar_in_pattern E ψ)), SVSubst := list_to_set (svar_fresh_seq (free_svars ψ ∪ free_svars p ∪ free_svars q) (maximal_mu_depth_of_evar_in_pattern E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' (free_evars ψ ∪ free_evars p ∪ free_evars q ∪ {[E]}) (free_svars ψ ∪ free_svars p ∪ free_svars q) E ψ p q wfC wfp wfq)) gpi
Hiff: Γ ⊢i p <---> q using gpi
H: well_formed (p <---> q)
H0: well_formed p
H1: well_formed q
free_svars ψ ⊆ free_svars ψ ∪ free_svars p ∪ free_svars q
Σ: Signature
Γ: Theory
p, q: Pattern
E: evar
ψ: Pattern
gpi: ProofInfo
wfp: well_formed p = true
wfq: well_formed q = true
wfC: PC_wf {| pcEvar := E; pcPattern := ψ |}
pile: ProofInfoLe (ExGen := list_to_set (evar_fresh_seq (free_evars ψ ∪ free_evars p ∪ free_evars q ∪ {[E]}) (maximal_exists_depth_of_evar_in_pattern E ψ)), SVSubst := list_to_set (svar_fresh_seq (free_svars ψ ∪ free_svars p ∪ free_svars q) (maximal_mu_depth_of_evar_in_pattern E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' (free_evars ψ ∪ free_evars p ∪ free_evars q ∪ {[E]}) (free_svars ψ ∪ free_svars p ∪ free_svars q) E ψ p q wfC wfp wfq)) gpi
Hiff: Γ ⊢i p <---> q using gpi
H: well_formed (p <---> q)
H0: well_formed p
H1: well_formed q
ProofInfoLe (ExGen := list_to_set (evar_fresh_seq (free_evars ψ ∪ free_evars p ∪ free_evars q ∪ {[E]}) (maximal_exists_depth_of_evar_in_pattern' 0 E ψ)), SVSubst := list_to_set (svar_fresh_seq (free_svars ψ ∪ free_svars p ∪ free_svars q) (maximal_mu_depth_of_evar_in_pattern' 0 E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' 0 E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' (free_evars ψ ∪ free_evars p ∪ free_evars q ∪ {[E]}) (free_svars ψ ∪ free_svars p ∪ free_svars q) E ψ p q ?wfψ ?wfp ?wfq)) gpi
Σ: Signature
Γ: Theory
p, q: Pattern
E: evar
ψ: Pattern
gpi: ProofInfo
wfp: well_formed p = true
wfq: well_formed q = true
wfC: PC_wf {| pcEvar := E; pcPattern := ψ |}
pile: ProofInfoLe (ExGen := list_to_set (evar_fresh_seq (free_evars ψ ∪ free_evars p ∪ free_evars q ∪ {[E]}) (maximal_exists_depth_of_evar_in_pattern E ψ)), SVSubst := list_to_set (svar_fresh_seq (free_svars ψ ∪ free_svars p ∪ free_svars q) (maximal_mu_depth_of_evar_in_pattern E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' (free_evars ψ ∪ free_evars p ∪ free_evars q ∪ {[E]}) (free_svars ψ ∪ free_svars p ∪ free_svars q) E ψ p q wfC wfp wfq)) gpi
Hiff: Γ ⊢i p <---> q using gpi
H: well_formed (p <---> q)
H0: well_formed p
H1: well_formed q
Γ ⊢i p <---> q using gpi
Σ: Signature
Γ: Theory
p, q: Pattern
E: evar
ψ: Pattern
gpi: ProofInfo
wfp: well_formed p = true
wfq: well_formed q = true
wfC: PC_wf {| pcEvar := E; pcPattern := ψ |}
pile: ProofInfoLe (ExGen := list_to_set (evar_fresh_seq (free_evars ψ ∪ free_evars p ∪ free_evars q ∪ {[E]}) (maximal_exists_depth_of_evar_in_pattern E ψ)), SVSubst := list_to_set (svar_fresh_seq (free_svars ψ ∪ free_svars p ∪ free_svars q) (maximal_mu_depth_of_evar_in_pattern E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' (free_evars ψ ∪ free_evars p ∪ free_evars q ∪ {[E]}) (free_svars ψ ∪ free_svars p ∪ free_svars q) E ψ p q wfC wfp wfq)) gpi
Hiff: Γ ⊢i p <---> q using gpi
H: well_formed (p <---> q)
H0: well_formed p
H1: well_formed q

free_svars p ⊆ free_svars ψ ∪ free_svars p ∪ free_svars q
abstract (clear; set_solver).
Σ: Signature
Γ: Theory
p, q: Pattern
E: evar
ψ: Pattern
gpi: ProofInfo
wfp: well_formed p = true
wfq: well_formed q = true
wfC: PC_wf {| pcEvar := E; pcPattern := ψ |}
pile: ProofInfoLe (ExGen := list_to_set (evar_fresh_seq (free_evars ψ ∪ free_evars p ∪ free_evars q ∪ {[E]}) (maximal_exists_depth_of_evar_in_pattern E ψ)), SVSubst := list_to_set (svar_fresh_seq (free_svars ψ ∪ free_svars p ∪ free_svars q) (maximal_mu_depth_of_evar_in_pattern E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' (free_evars ψ ∪ free_evars p ∪ free_evars q ∪ {[E]}) (free_svars ψ ∪ free_svars p ∪ free_svars q) E ψ p q wfC wfp wfq)) gpi
Hiff: Γ ⊢i p <---> q using gpi
H: well_formed (p <---> q)
H0: well_formed p
H1: well_formed q

free_svars q ⊆ free_svars ψ ∪ free_svars p ∪ free_svars q
Σ: Signature
Γ: Theory
p, q: Pattern
E: evar
ψ: Pattern
gpi: ProofInfo
wfp: well_formed p = true
wfq: well_formed q = true
wfC: PC_wf {| pcEvar := E; pcPattern := ψ |}
pile: ProofInfoLe (ExGen := list_to_set (evar_fresh_seq (free_evars ψ ∪ free_evars p ∪ free_evars q ∪ {[E]}) (maximal_exists_depth_of_evar_in_pattern E ψ)), SVSubst := list_to_set (svar_fresh_seq (free_svars ψ ∪ free_svars p ∪ free_svars q) (maximal_mu_depth_of_evar_in_pattern E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' (free_evars ψ ∪ free_evars p ∪ free_evars q ∪ {[E]}) (free_svars ψ ∪ free_svars p ∪ free_svars q) E ψ p q wfC wfp wfq)) gpi
Hiff: Γ ⊢i p <---> q using gpi
H: well_formed (p <---> q)
H0: well_formed p
H1: well_formed q
free_svars ψ ⊆ free_svars ψ ∪ free_svars p ∪ free_svars q
Σ: Signature
Γ: Theory
p, q: Pattern
E: evar
ψ: Pattern
gpi: ProofInfo
wfp: well_formed p = true
wfq: well_formed q = true
wfC: PC_wf {| pcEvar := E; pcPattern := ψ |}
pile: ProofInfoLe (ExGen := list_to_set (evar_fresh_seq (free_evars ψ ∪ free_evars p ∪ free_evars q ∪ {[E]}) (maximal_exists_depth_of_evar_in_pattern E ψ)), SVSubst := list_to_set (svar_fresh_seq (free_svars ψ ∪ free_svars p ∪ free_svars q) (maximal_mu_depth_of_evar_in_pattern E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' (free_evars ψ ∪ free_evars p ∪ free_evars q ∪ {[E]}) (free_svars ψ ∪ free_svars p ∪ free_svars q) E ψ p q wfC wfp wfq)) gpi
Hiff: Γ ⊢i p <---> q using gpi
H: well_formed (p <---> q)
H0: well_formed p
H1: well_formed q
ProofInfoLe (ExGen := list_to_set (evar_fresh_seq (free_evars ψ ∪ free_evars p ∪ free_evars q ∪ {[E]}) (maximal_exists_depth_of_evar_in_pattern' 0 E ψ)), SVSubst := list_to_set (svar_fresh_seq (free_svars ψ ∪ free_svars p ∪ free_svars q) (maximal_mu_depth_of_evar_in_pattern' 0 E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' 0 E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' (free_evars ψ ∪ free_evars p ∪ free_evars q ∪ {[E]}) (free_svars ψ ∪ free_svars p ∪ free_svars q) E ψ p q ?wfψ ?wfp ?wfq)) gpi
Σ: Signature
Γ: Theory
p, q: Pattern
E: evar
ψ: Pattern
gpi: ProofInfo
wfp: well_formed p = true
wfq: well_formed q = true
wfC: PC_wf {| pcEvar := E; pcPattern := ψ |}
pile: ProofInfoLe (ExGen := list_to_set (evar_fresh_seq (free_evars ψ ∪ free_evars p ∪ free_evars q ∪ {[E]}) (maximal_exists_depth_of_evar_in_pattern E ψ)), SVSubst := list_to_set (svar_fresh_seq (free_svars ψ ∪ free_svars p ∪ free_svars q) (maximal_mu_depth_of_evar_in_pattern E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' (free_evars ψ ∪ free_evars p ∪ free_evars q ∪ {[E]}) (free_svars ψ ∪ free_svars p ∪ free_svars q) E ψ p q wfC wfp wfq)) gpi
Hiff: Γ ⊢i p <---> q using gpi
H: well_formed (p <---> q)
H0: well_formed p
H1: well_formed q
Γ ⊢i p <---> q using gpi
Σ: Signature
Γ: Theory
p, q: Pattern
E: evar
ψ: Pattern
gpi: ProofInfo
wfp: well_formed p = true
wfq: well_formed q = true
wfC: PC_wf {| pcEvar := E; pcPattern := ψ |}
pile: ProofInfoLe (ExGen := list_to_set (evar_fresh_seq (free_evars ψ ∪ free_evars p ∪ free_evars q ∪ {[E]}) (maximal_exists_depth_of_evar_in_pattern E ψ)), SVSubst := list_to_set (svar_fresh_seq (free_svars ψ ∪ free_svars p ∪ free_svars q) (maximal_mu_depth_of_evar_in_pattern E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' (free_evars ψ ∪ free_evars p ∪ free_evars q ∪ {[E]}) (free_svars ψ ∪ free_svars p ∪ free_svars q) E ψ p q wfC wfp wfq)) gpi
Hiff: Γ ⊢i p <---> q using gpi
H: well_formed (p <---> q)
H0: well_formed p
H1: well_formed q

free_svars q ⊆ free_svars ψ ∪ free_svars p ∪ free_svars q
abstract (clear; set_solver).
Σ: Signature
Γ: Theory
p, q: Pattern
E: evar
ψ: Pattern
gpi: ProofInfo
wfp: well_formed p = true
wfq: well_formed q = true
wfC: PC_wf {| pcEvar := E; pcPattern := ψ |}
pile: ProofInfoLe (ExGen := list_to_set (evar_fresh_seq (free_evars ψ ∪ free_evars p ∪ free_evars q ∪ {[E]}) (maximal_exists_depth_of_evar_in_pattern E ψ)), SVSubst := list_to_set (svar_fresh_seq (free_svars ψ ∪ free_svars p ∪ free_svars q) (maximal_mu_depth_of_evar_in_pattern E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' (free_evars ψ ∪ free_evars p ∪ free_evars q ∪ {[E]}) (free_svars ψ ∪ free_svars p ∪ free_svars q) E ψ p q wfC wfp wfq)) gpi
Hiff: Γ ⊢i p <---> q using gpi
H: well_formed (p <---> q)
H0: well_formed p
H1: well_formed q

free_svars ψ ⊆ free_svars ψ ∪ free_svars p ∪ free_svars q
Σ: Signature
Γ: Theory
p, q: Pattern
E: evar
ψ: Pattern
gpi: ProofInfo
wfp: well_formed p = true
wfq: well_formed q = true
wfC: PC_wf {| pcEvar := E; pcPattern := ψ |}
pile: ProofInfoLe (ExGen := list_to_set (evar_fresh_seq (free_evars ψ ∪ free_evars p ∪ free_evars q ∪ {[E]}) (maximal_exists_depth_of_evar_in_pattern E ψ)), SVSubst := list_to_set (svar_fresh_seq (free_svars ψ ∪ free_svars p ∪ free_svars q) (maximal_mu_depth_of_evar_in_pattern E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' (free_evars ψ ∪ free_evars p ∪ free_evars q ∪ {[E]}) (free_svars ψ ∪ free_svars p ∪ free_svars q) E ψ p q wfC wfp wfq)) gpi
Hiff: Γ ⊢i p <---> q using gpi
H: well_formed (p <---> q)
H0: well_formed p
H1: well_formed q
ProofInfoLe (ExGen := list_to_set (evar_fresh_seq (free_evars ψ ∪ free_evars p ∪ free_evars q ∪ {[E]}) (maximal_exists_depth_of_evar_in_pattern' 0 E ψ)), SVSubst := list_to_set (svar_fresh_seq (free_svars ψ ∪ free_svars p ∪ free_svars q) (maximal_mu_depth_of_evar_in_pattern' 0 E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' 0 E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' (free_evars ψ ∪ free_evars p ∪ free_evars q ∪ {[E]}) (free_svars ψ ∪ free_svars p ∪ free_svars q) E ψ p q ?wfψ ?wfp ?wfq)) gpi
Σ: Signature
Γ: Theory
p, q: Pattern
E: evar
ψ: Pattern
gpi: ProofInfo
wfp: well_formed p = true
wfq: well_formed q = true
wfC: PC_wf {| pcEvar := E; pcPattern := ψ |}
pile: ProofInfoLe (ExGen := list_to_set (evar_fresh_seq (free_evars ψ ∪ free_evars p ∪ free_evars q ∪ {[E]}) (maximal_exists_depth_of_evar_in_pattern E ψ)), SVSubst := list_to_set (svar_fresh_seq (free_svars ψ ∪ free_svars p ∪ free_svars q) (maximal_mu_depth_of_evar_in_pattern E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' (free_evars ψ ∪ free_evars p ∪ free_evars q ∪ {[E]}) (free_svars ψ ∪ free_svars p ∪ free_svars q) E ψ p q wfC wfp wfq)) gpi
Hiff: Γ ⊢i p <---> q using gpi
H: well_formed (p <---> q)
H0: well_formed p
H1: well_formed q
Γ ⊢i p <---> q using gpi
Σ: Signature
Γ: Theory
p, q: Pattern
E: evar
ψ: Pattern
gpi: ProofInfo
wfp: well_formed p = true
wfq: well_formed q = true
wfC: PC_wf {| pcEvar := E; pcPattern := ψ |}
pile: ProofInfoLe (ExGen := list_to_set (evar_fresh_seq (free_evars ψ ∪ free_evars p ∪ free_evars q ∪ {[E]}) (maximal_exists_depth_of_evar_in_pattern E ψ)), SVSubst := list_to_set (svar_fresh_seq (free_svars ψ ∪ free_svars p ∪ free_svars q) (maximal_mu_depth_of_evar_in_pattern E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' (free_evars ψ ∪ free_evars p ∪ free_evars q ∪ {[E]}) (free_svars ψ ∪ free_svars p ∪ free_svars q) E ψ p q wfC wfp wfq)) gpi
Hiff: Γ ⊢i p <---> q using gpi
H: well_formed (p <---> q)
H0: well_formed p
H1: well_formed q

free_svars ψ ⊆ free_svars ψ ∪ free_svars p ∪ free_svars q
abstract (clear; set_solver).
Σ: Signature
Γ: Theory
p, q: Pattern
E: evar
ψ: Pattern
gpi: ProofInfo
wfp: well_formed p = true
wfq: well_formed q = true
wfC: PC_wf {| pcEvar := E; pcPattern := ψ |}
pile: ProofInfoLe (ExGen := list_to_set (evar_fresh_seq (free_evars ψ ∪ free_evars p ∪ free_evars q ∪ {[E]}) (maximal_exists_depth_of_evar_in_pattern E ψ)), SVSubst := list_to_set (svar_fresh_seq (free_svars ψ ∪ free_svars p ∪ free_svars q) (maximal_mu_depth_of_evar_in_pattern E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' (free_evars ψ ∪ free_evars p ∪ free_evars q ∪ {[E]}) (free_svars ψ ∪ free_svars p ∪ free_svars q) E ψ p q wfC wfp wfq)) gpi
Hiff: Γ ⊢i p <---> q using gpi
H: well_formed (p <---> q)
H0: well_formed p
H1: well_formed q

ProofInfoLe (ExGen := list_to_set (evar_fresh_seq (free_evars ψ ∪ free_evars p ∪ free_evars q ∪ {[E]}) (maximal_exists_depth_of_evar_in_pattern' 0 E ψ)), SVSubst := list_to_set (svar_fresh_seq (free_svars ψ ∪ free_svars p ∪ free_svars q) (maximal_mu_depth_of_evar_in_pattern' 0 E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' 0 E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' (free_evars ψ ∪ free_evars p ∪ free_evars q ∪ {[E]}) (free_svars ψ ∪ free_svars p ∪ free_svars q) E ψ p q ?wfψ ?wfp ?wfq)) gpi
Σ: Signature
Γ: Theory
p, q: Pattern
E: evar
ψ: Pattern
gpi: ProofInfo
wfp: well_formed p = true
wfq: well_formed q = true
wfC: PC_wf {| pcEvar := E; pcPattern := ψ |}
pile: ProofInfoLe (ExGen := list_to_set (evar_fresh_seq (free_evars ψ ∪ free_evars p ∪ free_evars q ∪ {[E]}) (maximal_exists_depth_of_evar_in_pattern E ψ)), SVSubst := list_to_set (svar_fresh_seq (free_svars ψ ∪ free_svars p ∪ free_svars q) (maximal_mu_depth_of_evar_in_pattern E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' (free_evars ψ ∪ free_evars p ∪ free_evars q ∪ {[E]}) (free_svars ψ ∪ free_svars p ∪ free_svars q) E ψ p q wfC wfp wfq)) gpi
Hiff: Γ ⊢i p <---> q using gpi
H: well_formed (p <---> q)
H0: well_formed p
H1: well_formed q
Γ ⊢i p <---> q using gpi
Σ: Signature
Γ: Theory
p, q: Pattern
E: evar
ψ: Pattern
gpi: ProofInfo
wfp: well_formed p = true
wfq: well_formed q = true
wfC: PC_wf {| pcEvar := E; pcPattern := ψ |}
pile: ProofInfoLe (ExGen := list_to_set (evar_fresh_seq (free_evars ψ ∪ free_evars p ∪ free_evars q ∪ {[E]}) (maximal_exists_depth_of_evar_in_pattern E ψ)), SVSubst := list_to_set (svar_fresh_seq (free_svars ψ ∪ free_svars p ∪ free_svars q) (maximal_mu_depth_of_evar_in_pattern E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' (free_evars ψ ∪ free_evars p ∪ free_evars q ∪ {[E]}) (free_svars ψ ∪ free_svars p ∪ free_svars q) E ψ p q wfC wfp wfq)) gpi
Hiff: Γ ⊢i p <---> q using gpi
H: well_formed (p <---> q)
H0: well_formed p
H1: well_formed q

ProofInfoLe (ExGen := list_to_set (evar_fresh_seq (free_evars ψ ∪ free_evars p ∪ free_evars q ∪ {[E]}) (maximal_exists_depth_of_evar_in_pattern' 0 E ψ)), SVSubst := list_to_set (svar_fresh_seq (free_svars ψ ∪ free_svars p ∪ free_svars q) (maximal_mu_depth_of_evar_in_pattern' 0 E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' 0 E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' (free_evars ψ ∪ free_evars p ∪ free_evars q ∪ {[E]}) (free_svars ψ ∪ free_svars p ∪ free_svars q) E ψ p q ?wfψ ?wfp ?wfq)) gpi
Σ: Signature
Γ: Theory
p, q: Pattern
E: evar
ψ: Pattern
gpi: ProofInfo
wfp: well_formed p = true
wfq: well_formed q = true
wfC: PC_wf {| pcEvar := E; pcPattern := ψ |}
pile: ProofInfoLe (ExGen := list_to_set (evar_fresh_seq (free_evars ψ ∪ free_evars p ∪ free_evars q ∪ {[E]}) (maximal_exists_depth_of_evar_in_pattern E ψ)), SVSubst := list_to_set (svar_fresh_seq (free_svars ψ ∪ free_svars p ∪ free_svars q) (maximal_mu_depth_of_evar_in_pattern E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' (free_evars ψ ∪ free_evars p ∪ free_evars q ∪ {[E]}) (free_svars ψ ∪ free_svars p ∪ free_svars q) E ψ p q wfC wfp wfq)) gpi
Hiff: Γ ⊢i p <---> q using gpi
H: well_formed (p <---> q)
H0: well_formed p
H1: well_formed q

ProofInfoLe (ExGen := list_to_set (evar_fresh_seq (free_evars ψ ∪ free_evars p ∪ free_evars q ∪ {[E]}) (maximal_exists_depth_of_evar_in_pattern' 0 E ψ)), SVSubst := list_to_set (svar_fresh_seq (free_svars ψ ∪ free_svars p ∪ free_svars q) (maximal_mu_depth_of_evar_in_pattern' 0 E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern' 0 E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' (free_evars ψ ∪ free_evars p ∪ free_evars q ∪ {[E]}) (free_svars ψ ∪ free_svars p ∪ free_svars q) E ψ p q ?wfψ ?wfp ?wfq)) (ExGen := list_to_set (evar_fresh_seq (free_evars ψ ∪ free_evars p ∪ free_evars q ∪ {[E]}) (maximal_exists_depth_of_evar_in_pattern E ψ)), SVSubst := list_to_set (svar_fresh_seq (free_svars ψ ∪ free_svars p ∪ free_svars q) (maximal_mu_depth_of_evar_in_pattern E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' (free_evars ψ ∪ free_evars p ∪ free_evars q ∪ {[E]}) (free_svars ψ ∪ free_svars p ∪ free_svars q) E ψ p q wfC wfp wfq))
apply pile_refl.
Σ: Signature
Γ: Theory
p, q: Pattern
E: evar
ψ: Pattern
gpi: ProofInfo
wfp: well_formed p = true
wfq: well_formed q = true
wfC: PC_wf {| pcEvar := E; pcPattern := ψ |}
pile: ProofInfoLe (ExGen := list_to_set (evar_fresh_seq (free_evars ψ ∪ free_evars p ∪ free_evars q ∪ {[E]}) (maximal_exists_depth_of_evar_in_pattern E ψ)), SVSubst := list_to_set (svar_fresh_seq (free_svars ψ ∪ free_svars p ∪ free_svars q) (maximal_mu_depth_of_evar_in_pattern E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' (free_evars ψ ∪ free_evars p ∪ free_evars q ∪ {[E]}) (free_svars ψ ∪ free_svars p ∪ free_svars q) E ψ p q wfC wfp wfq)) gpi
Hiff: Γ ⊢i p <---> q using gpi
H: well_formed (p <---> q)
H0: well_formed p
H1: well_formed q

Γ ⊢i p <---> q using gpi
Σ: Signature
Γ: Theory
p, q: Pattern
E: evar
ψ: Pattern
gpi: ProofInfo
wfp: well_formed p = true
wfq: well_formed q = true
wfC: PC_wf {| pcEvar := E; pcPattern := ψ |}
pile: ProofInfoLe (ExGen := list_to_set (evar_fresh_seq (free_evars ψ ∪ free_evars p ∪ free_evars q ∪ {[E]}) (maximal_exists_depth_of_evar_in_pattern E ψ)), SVSubst := list_to_set (svar_fresh_seq (free_svars ψ ∪ free_svars p ∪ free_svars q) (maximal_mu_depth_of_evar_in_pattern E ψ)), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern E ψ) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' (free_evars ψ ∪ free_evars p ∪ free_evars q ∪ {[E]}) (free_svars ψ ∪ free_svars p ∪ free_svars q) E ψ p q wfC wfp wfq)) gpi
Hiff: Γ ⊢i p <---> q using gpi
H: well_formed (p <---> q)
H0: well_formed p
H1: well_formed q

Γ ⊢i p <---> q using gpi
exact Hiff. } Defined. End FOL_helpers.
Σ: Signature
Γ: Theory
p, q: Pattern
C: PatternCtx
l: list Pattern
wfp: well_formed p
wfq: well_formed q
wfC: PC_wf C
gpi: ProofInfo
pile: ProofInfoLe (ExGen := list_to_set (evar_fresh_seq (free_evars (pcPattern C) ∪ free_evars p ∪ free_evars q ∪ {[ pcEvar C]}) (maximal_exists_depth_of_evar_in_pattern (pcEvar C) (pcPattern C))), SVSubst := list_to_set (svar_fresh_seq (free_svars (pcPattern C) ∪ free_svars p ∪ free_svars q) (maximal_mu_depth_of_evar_in_pattern (pcEvar C) (pcPattern C))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern (pcEvar C) (pcPattern C)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' (free_evars (pcPattern C) ∪ free_evars p ∪ free_evars q ∪ {[ pcEvar C]}) (free_svars (pcPattern C) ∪ free_svars p ∪ free_svars q) (pcEvar C) (pcPattern C) p q wfC wfp wfq)) gpi

wf l → Γ ⊢i p <---> q using gpi → Γ ⊢i foldr patt_imp (C [p]) l <---> foldr patt_imp (C [q]) l using gpi
Σ: Signature
Γ: Theory
p, q: Pattern
C: PatternCtx
l: list Pattern
wfp: well_formed p
wfq: well_formed q
wfC: PC_wf C
gpi: ProofInfo
pile: ProofInfoLe (ExGen := list_to_set (evar_fresh_seq (free_evars (pcPattern C) ∪ free_evars p ∪ free_evars q ∪ {[ pcEvar C]}) (maximal_exists_depth_of_evar_in_pattern (pcEvar C) (pcPattern C))), SVSubst := list_to_set (svar_fresh_seq (free_svars (pcPattern C) ∪ free_svars p ∪ free_svars q) (maximal_mu_depth_of_evar_in_pattern (pcEvar C) (pcPattern C))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern (pcEvar C) (pcPattern C)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' (free_evars (pcPattern C) ∪ free_evars p ∪ free_evars q ∪ {[ pcEvar C]}) (free_svars (pcPattern C) ∪ free_svars p ∪ free_svars q) (pcEvar C) (pcPattern C) p q wfC wfp wfq)) gpi

wf l → Γ ⊢i p <---> q using gpi → Γ ⊢i foldr patt_imp (C [p]) l <---> foldr patt_imp (C [q]) l using gpi
Σ: Signature
Γ: Theory
p, q: Pattern
C: PatternCtx
l: list Pattern
wfp: well_formed p
wfq: well_formed q
wfC: PC_wf C
gpi: ProofInfo
pile: ProofInfoLe (ExGen := list_to_set (evar_fresh_seq (free_evars (pcPattern C) ∪ free_evars p ∪ free_evars q ∪ {[ pcEvar C]}) (maximal_exists_depth_of_evar_in_pattern (pcEvar C) (pcPattern C))), SVSubst := list_to_set (svar_fresh_seq (free_svars (pcPattern C) ∪ free_svars p ∪ free_svars q) (maximal_mu_depth_of_evar_in_pattern (pcEvar C) (pcPattern C))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern (pcEvar C) (pcPattern C)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' (free_evars (pcPattern C) ∪ free_evars p ∪ free_evars q ∪ {[ pcEvar C]}) (free_svars (pcPattern C) ∪ free_svars p ∪ free_svars q) (pcEvar C) (pcPattern C) p q wfC wfp wfq)) gpi
wfl: wf l
Himp: Γ ⊢i p <---> q using gpi

Γ ⊢i foldr patt_imp (C [p]) l <---> foldr patt_imp (C [q]) l using gpi
Σ: Signature
Γ: Theory
p, q: Pattern
C: PatternCtx
wfp: well_formed p
wfq: well_formed q
wfC: PC_wf C
gpi: ProofInfo
pile: ProofInfoLe (ExGen := list_to_set (evar_fresh_seq (free_evars (pcPattern C) ∪ free_evars p ∪ free_evars q ∪ {[ pcEvar C]}) (maximal_exists_depth_of_evar_in_pattern (pcEvar C) (pcPattern C))), SVSubst := list_to_set (svar_fresh_seq (free_svars (pcPattern C) ∪ free_svars p ∪ free_svars q) (maximal_mu_depth_of_evar_in_pattern (pcEvar C) (pcPattern C))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern (pcEvar C) (pcPattern C)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' (free_evars (pcPattern C) ∪ free_evars p ∪ free_evars q ∪ {[ pcEvar C]}) (free_svars (pcPattern C) ∪ free_svars p ∪ free_svars q) (pcEvar C) (pcPattern C) p q wfC wfp wfq)) gpi
wfl: wf []
Himp: Γ ⊢i p <---> q using gpi

Γ ⊢i (C [p]) <---> (C [q]) using gpi
Σ: Signature
Γ: Theory
p, q: Pattern
C: PatternCtx
a: Pattern
l: list Pattern
wfp: well_formed p
wfq: well_formed q
wfC: PC_wf C
gpi: ProofInfo
pile: ProofInfoLe (ExGen := list_to_set (evar_fresh_seq (free_evars (pcPattern C) ∪ free_evars p ∪ free_evars q ∪ {[ pcEvar C]}) (maximal_exists_depth_of_evar_in_pattern (pcEvar C) (pcPattern C))), SVSubst := list_to_set (svar_fresh_seq (free_svars (pcPattern C) ∪ free_svars p ∪ free_svars q) (maximal_mu_depth_of_evar_in_pattern (pcEvar C) (pcPattern C))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern (pcEvar C) (pcPattern C)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' (free_evars (pcPattern C) ∪ free_evars p ∪ free_evars q ∪ {[ pcEvar C]}) (free_svars (pcPattern C) ∪ free_svars p ∪ free_svars q) (pcEvar C) (pcPattern C) p q wfC wfp wfq)) gpi
wfl: wf (a :: l)
Himp: Γ ⊢i p <---> q using gpi
IHl: wf l → Γ ⊢i foldr patt_imp (C [p]) l <---> foldr patt_imp (C [q]) l using gpi
Γ ⊢i (a ---> foldr patt_imp (C [p]) l) <---> (a ---> foldr patt_imp (C [q]) l) using gpi
Σ: Signature
Γ: Theory
p, q: Pattern
C: PatternCtx
wfp: well_formed p
wfq: well_formed q
wfC: PC_wf C
gpi: ProofInfo
pile: ProofInfoLe (ExGen := list_to_set (evar_fresh_seq (free_evars (pcPattern C) ∪ free_evars p ∪ free_evars q ∪ {[ pcEvar C]}) (maximal_exists_depth_of_evar_in_pattern (pcEvar C) (pcPattern C))), SVSubst := list_to_set (svar_fresh_seq (free_svars (pcPattern C) ∪ free_svars p ∪ free_svars q) (maximal_mu_depth_of_evar_in_pattern (pcEvar C) (pcPattern C))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern (pcEvar C) (pcPattern C)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' (free_evars (pcPattern C) ∪ free_evars p ∪ free_evars q ∪ {[ pcEvar C]}) (free_svars (pcPattern C) ∪ free_svars p ∪ free_svars q) (pcEvar C) (pcPattern C) p q wfC wfp wfq)) gpi
wfl: wf []
Himp: Γ ⊢i p <---> q using gpi

Γ ⊢i (C [p]) <---> (C [q]) using gpi
unshelve(eapply prf_equiv_congruence); assumption.
Σ: Signature
Γ: Theory
p, q: Pattern
C: PatternCtx
a: Pattern
l: list Pattern
wfp: well_formed p
wfq: well_formed q
wfC: PC_wf C
gpi: ProofInfo
pile: ProofInfoLe (ExGen := list_to_set (evar_fresh_seq (free_evars (pcPattern C) ∪ free_evars p ∪ free_evars q ∪ {[ pcEvar C]}) (maximal_exists_depth_of_evar_in_pattern (pcEvar C) (pcPattern C))), SVSubst := list_to_set (svar_fresh_seq (free_svars (pcPattern C) ∪ free_svars p ∪ free_svars q) (maximal_mu_depth_of_evar_in_pattern (pcEvar C) (pcPattern C))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern (pcEvar C) (pcPattern C)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' (free_evars (pcPattern C) ∪ free_evars p ∪ free_evars q ∪ {[ pcEvar C]}) (free_svars (pcPattern C) ∪ free_svars p ∪ free_svars q) (pcEvar C) (pcPattern C) p q wfC wfp wfq)) gpi
wfl: wf (a :: l)
Himp: Γ ⊢i p <---> q using gpi
IHl: wf l → Γ ⊢i foldr patt_imp (C [p]) l <---> foldr patt_imp (C [q]) l using gpi

Γ ⊢i (a ---> foldr patt_imp (C [p]) l) <---> (a ---> foldr patt_imp (C [q]) l) using gpi
Σ: Signature
Γ: Theory
p, q: Pattern
C: PatternCtx
a: Pattern
l: list Pattern
wfp: well_formed p
wfq: well_formed q
wfC: PC_wf C
gpi: ProofInfo
pile: ProofInfoLe (ExGen := list_to_set (evar_fresh_seq (free_evars (pcPattern C) ∪ free_evars p ∪ free_evars q ∪ {[ pcEvar C]}) (maximal_exists_depth_of_evar_in_pattern (pcEvar C) (pcPattern C))), SVSubst := list_to_set (svar_fresh_seq (free_svars (pcPattern C) ∪ free_svars p ∪ free_svars q) (maximal_mu_depth_of_evar_in_pattern (pcEvar C) (pcPattern C))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern (pcEvar C) (pcPattern C)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' (free_evars (pcPattern C) ∪ free_evars p ∪ free_evars q ∪ {[ pcEvar C]}) (free_svars (pcPattern C) ∪ free_svars p ∪ free_svars q) (pcEvar C) (pcPattern C) p q wfC wfp wfq)) gpi
wfl: wf (a :: l)
Himp: Γ ⊢i p <---> q using gpi
IHl: wf l → Γ ⊢i foldr patt_imp (C [p]) l <---> foldr patt_imp (C [q]) l using gpi
wfal: wf (a :: l)

Γ ⊢i (a ---> foldr patt_imp (C [p]) l) <---> (a ---> foldr patt_imp (C [q]) l) using gpi
Σ: Signature
Γ: Theory
p, q: Pattern
C: PatternCtx
a: Pattern
l: list Pattern
wfp: well_formed p
wfq: well_formed q
wfC: PC_wf C
gpi: ProofInfo
pile: ProofInfoLe (ExGen := list_to_set (evar_fresh_seq (free_evars (pcPattern C) ∪ free_evars p ∪ free_evars q ∪ {[ pcEvar C]}) (maximal_exists_depth_of_evar_in_pattern (pcEvar C) (pcPattern C))), SVSubst := list_to_set (svar_fresh_seq (free_svars (pcPattern C) ∪ free_svars p ∪ free_svars q) (maximal_mu_depth_of_evar_in_pattern (pcEvar C) (pcPattern C))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern (pcEvar C) (pcPattern C)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' (free_evars (pcPattern C) ∪ free_evars p ∪ free_evars q ∪ {[ pcEvar C]}) (free_svars (pcPattern C) ∪ free_svars p ∪ free_svars q) (pcEvar C) (pcPattern C) p q wfC wfp wfq)) gpi
wfl: foldr andb true (map well_formed (a :: l))
Himp: Γ ⊢i p <---> q using gpi
IHl: wf l → Γ ⊢i foldr patt_imp (C [p]) l <---> foldr patt_imp (C [q]) l using gpi
wfal: wf (a :: l)

Γ ⊢i (a ---> foldr patt_imp (C [p]) l) <---> (a ---> foldr patt_imp (C [q]) l) using gpi
Σ: Signature
Γ: Theory
p, q: Pattern
C: PatternCtx
a: Pattern
l: list Pattern
wfp: well_formed p
wfq: well_formed q
wfC: PC_wf C
gpi: ProofInfo
pile: ProofInfoLe (ExGen := list_to_set (evar_fresh_seq (free_evars (pcPattern C) ∪ free_evars p ∪ free_evars q ∪ {[ pcEvar C]}) (maximal_exists_depth_of_evar_in_pattern (pcEvar C) (pcPattern C))), SVSubst := list_to_set (svar_fresh_seq (free_svars (pcPattern C) ∪ free_svars p ∪ free_svars q) (maximal_mu_depth_of_evar_in_pattern (pcEvar C) (pcPattern C))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern (pcEvar C) (pcPattern C)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' (free_evars (pcPattern C) ∪ free_evars p ∪ free_evars q ∪ {[ pcEvar C]}) (free_svars (pcPattern C) ∪ free_svars p ∪ free_svars q) (pcEvar C) (pcPattern C) p q wfC wfp wfq)) gpi
wfl: well_formed a && foldr andb true (map well_formed l)
Himp: Γ ⊢i p <---> q using gpi
IHl: wf l → Γ ⊢i foldr patt_imp (C [p]) l <---> foldr patt_imp (C [q]) l using gpi
wfal: wf (a :: l)

Γ ⊢i (a ---> foldr patt_imp (C [p]) l) <---> (a ---> foldr patt_imp (C [q]) l) using gpi
Σ: Signature
Γ: Theory
p, q: Pattern
C: PatternCtx
a: Pattern
l: list Pattern
wfp: well_formed p
wfq: well_formed q
wfC: PC_wf C
gpi: ProofInfo
pile: ProofInfoLe (ExGen := list_to_set (evar_fresh_seq (free_evars (pcPattern C) ∪ free_evars p ∪ free_evars q ∪ {[ pcEvar C]}) (maximal_exists_depth_of_evar_in_pattern (pcEvar C) (pcPattern C))), SVSubst := list_to_set (svar_fresh_seq (free_svars (pcPattern C) ∪ free_svars p ∪ free_svars q) (maximal_mu_depth_of_evar_in_pattern (pcEvar C) (pcPattern C))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern (pcEvar C) (pcPattern C)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' (free_evars (pcPattern C) ∪ free_evars p ∪ free_evars q ∪ {[ pcEvar C]}) (free_svars (pcPattern C) ∪ free_svars p ∪ free_svars q) (pcEvar C) (pcPattern C) p q wfC wfp wfq)) gpi
wfa: well_formed a = true
wfl: foldr andb true (map well_formed l) = true
Himp: Γ ⊢i p <---> q using gpi
IHl: wf l → Γ ⊢i foldr patt_imp (C [p]) l <---> foldr patt_imp (C [q]) l using gpi
wfal: wf (a :: l)

Γ ⊢i (a ---> foldr patt_imp (C [p]) l) <---> (a ---> foldr patt_imp (C [q]) l) using gpi
Σ: Signature
Γ: Theory
p, q: Pattern
C: PatternCtx
a: Pattern
l: list Pattern
wfp: well_formed p
wfq: well_formed q
wfC: PC_wf C
gpi: ProofInfo
pile: ProofInfoLe (ExGen := list_to_set (evar_fresh_seq (free_evars (pcPattern C) ∪ free_evars p ∪ free_evars q ∪ {[ pcEvar C]}) (maximal_exists_depth_of_evar_in_pattern (pcEvar C) (pcPattern C))), SVSubst := list_to_set (svar_fresh_seq (free_svars (pcPattern C) ∪ free_svars p ∪ free_svars q) (maximal_mu_depth_of_evar_in_pattern (pcEvar C) (pcPattern C))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern (pcEvar C) (pcPattern C)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' (free_evars (pcPattern C) ∪ free_evars p ∪ free_evars q ∪ {[ pcEvar C]}) (free_svars (pcPattern C) ∪ free_svars p ∪ free_svars q) (pcEvar C) (pcPattern C) p q wfC wfp wfq)) gpi
wfa: well_formed a = true
wfl: foldr andb true (map well_formed l) = true
Himp: Γ ⊢i p <---> q using gpi
IHl: Γ ⊢i foldr patt_imp (C [p]) l <---> foldr patt_imp (C [q]) l using gpi
wfal: wf (a :: l)

Γ ⊢i (a ---> foldr patt_imp (C [p]) l) <---> (a ---> foldr patt_imp (C [q]) l) using gpi
Σ: Signature
Γ: Theory
p, q: Pattern
C: PatternCtx
a: Pattern
l: list Pattern
wfp: well_formed p
wfq: well_formed q
wfC: PC_wf C
gpi: ProofInfo
pile: ProofInfoLe (ExGen := list_to_set (evar_fresh_seq (free_evars (pcPattern C) ∪ free_evars p ∪ free_evars q ∪ {[ pcEvar C]}) (maximal_exists_depth_of_evar_in_pattern (pcEvar C) (pcPattern C))), SVSubst := list_to_set (svar_fresh_seq (free_svars (pcPattern C) ∪ free_svars p ∪ free_svars q) (maximal_mu_depth_of_evar_in_pattern (pcEvar C) (pcPattern C))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern (pcEvar C) (pcPattern C)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' (free_evars (pcPattern C) ∪ free_evars p ∪ free_evars q ∪ {[ pcEvar C]}) (free_svars (pcPattern C) ∪ free_svars p ∪ free_svars q) (pcEvar C) (pcPattern C) p q wfC wfp wfq)) gpi
wfa: well_formed a = true
wfl: foldr andb true (map well_formed l) = true
Himp: Γ ⊢i p <---> q using gpi
IHl: Γ ⊢i foldr patt_imp (C [p]) l <---> foldr patt_imp (C [q]) l using gpi
wfal: wf (a :: l)
Hwf1: well_formed (foldr patt_imp (C [p]) l <---> foldr patt_imp (C [q]) l)

Γ ⊢i (a ---> foldr patt_imp (C [p]) l) <---> (a ---> foldr patt_imp (C [q]) l) using gpi
Σ: Signature
Γ: Theory
p, q: Pattern
C: PatternCtx
a: Pattern
l: list Pattern
wfp: well_formed p
wfq: well_formed q
wfC: PC_wf C
gpi: ProofInfo
pile: ProofInfoLe (ExGen := list_to_set (evar_fresh_seq (free_evars (pcPattern C) ∪ free_evars p ∪ free_evars q ∪ {[ pcEvar C]}) (maximal_exists_depth_of_evar_in_pattern (pcEvar C) (pcPattern C))), SVSubst := list_to_set (svar_fresh_seq (free_svars (pcPattern C) ∪ free_svars p ∪ free_svars q) (maximal_mu_depth_of_evar_in_pattern (pcEvar C) (pcPattern C))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern (pcEvar C) (pcPattern C)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' (free_evars (pcPattern C) ∪ free_evars p ∪ free_evars q ∪ {[ pcEvar C]}) (free_svars (pcPattern C) ∪ free_svars p ∪ free_svars q) (pcEvar C) (pcPattern C) p q wfC wfp wfq)) gpi
wfa: well_formed a = true
wfl: foldr andb true (map well_formed l) = true
Himp: Γ ⊢i p <---> q using gpi
IHl: Γ ⊢i foldr patt_imp (C [p]) l <---> foldr patt_imp (C [q]) l using gpi
wfal: wf (a :: l)
Hwf1: well_formed (foldr patt_imp (C [p]) l <---> foldr patt_imp (C [q]) l)
Hwf2: well_formed (p <---> q)

Γ ⊢i (a ---> foldr patt_imp (C [p]) l) <---> (a ---> foldr patt_imp (C [q]) l) using gpi
Σ: Signature
Γ: Theory
p, q: Pattern
C: PatternCtx
a: Pattern
l: list Pattern
wfp: well_formed p
wfq: well_formed q
wfC: PC_wf C
gpi: ProofInfo
pile: ProofInfoLe (ExGen := list_to_set (evar_fresh_seq (free_evars (pcPattern C) ∪ free_evars p ∪ free_evars q ∪ {[ pcEvar C]}) (maximal_exists_depth_of_evar_in_pattern (pcEvar C) (pcPattern C))), SVSubst := list_to_set (svar_fresh_seq (free_svars (pcPattern C) ∪ free_svars p ∪ free_svars q) (maximal_mu_depth_of_evar_in_pattern (pcEvar C) (pcPattern C))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern (pcEvar C) (pcPattern C)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' (free_evars (pcPattern C) ∪ free_evars p ∪ free_evars q ∪ {[ pcEvar C]}) (free_svars (pcPattern C) ∪ free_svars p ∪ free_svars q) (pcEvar C) (pcPattern C) p q wfC wfp wfq)) gpi
wfa: well_formed a = true
wfl: foldr andb true (map well_formed l) = true
Himp: Γ ⊢i p <---> q using gpi
IHl: Γ ⊢i foldr patt_imp (C [p]) l <---> foldr patt_imp (C [q]) l using gpi
wfal: wf (a :: l)
Hwf1: well_formed (foldr patt_imp (C [p]) l <---> foldr patt_imp (C [q]) l)
Hwf2: well_formed (p <---> q)

well_formed (C [p])
Σ: Signature
Γ: Theory
p, q: Pattern
C: PatternCtx
a: Pattern
l: list Pattern
wfp: well_formed p
wfq: well_formed q
wfC: PC_wf C
gpi: ProofInfo
pile: ProofInfoLe (ExGen := list_to_set (evar_fresh_seq (free_evars (pcPattern C) ∪ free_evars p ∪ free_evars q ∪ {[ pcEvar C]}) (maximal_exists_depth_of_evar_in_pattern (pcEvar C) (pcPattern C))), SVSubst := list_to_set (svar_fresh_seq (free_svars (pcPattern C) ∪ free_svars p ∪ free_svars q) (maximal_mu_depth_of_evar_in_pattern (pcEvar C) (pcPattern C))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern (pcEvar C) (pcPattern C)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' (free_evars (pcPattern C) ∪ free_evars p ∪ free_evars q ∪ {[ pcEvar C]}) (free_svars (pcPattern C) ∪ free_svars p ∪ free_svars q) (pcEvar C) (pcPattern C) p q wfC wfp wfq)) gpi
wfa: well_formed a = true
wfl: foldr andb true (map well_formed l) = true
Himp: Γ ⊢i p <---> q using gpi
IHl: Γ ⊢i foldr patt_imp (C [p]) l <---> foldr patt_imp (C [q]) l using gpi
wfal: wf (a :: l)
Hwf1: well_formed (foldr patt_imp (C [p]) l <---> foldr patt_imp (C [q]) l)
Hwf2: well_formed (p <---> q)
H: well_formed (C [p])
Γ ⊢i (a ---> foldr patt_imp (C [p]) l) <---> (a ---> foldr patt_imp (C [q]) l) using gpi
Σ: Signature
Γ: Theory
p, q: Pattern
C: PatternCtx
a: Pattern
l: list Pattern
wfp: well_formed p
wfq: well_formed q
wfC: PC_wf C
gpi: ProofInfo
pile: ProofInfoLe (ExGen := list_to_set (evar_fresh_seq (free_evars (pcPattern C) ∪ free_evars p ∪ free_evars q ∪ {[ pcEvar C]}) (maximal_exists_depth_of_evar_in_pattern (pcEvar C) (pcPattern C))), SVSubst := list_to_set (svar_fresh_seq (free_svars (pcPattern C) ∪ free_svars p ∪ free_svars q) (maximal_mu_depth_of_evar_in_pattern (pcEvar C) (pcPattern C))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern (pcEvar C) (pcPattern C)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' (free_evars (pcPattern C) ∪ free_evars p ∪ free_evars q ∪ {[ pcEvar C]}) (free_svars (pcPattern C) ∪ free_svars p ∪ free_svars q) (pcEvar C) (pcPattern C) p q wfC wfp wfq)) gpi
wfa: well_formed a = true
wfl: foldr andb true (map well_formed l) = true
Himp: Γ ⊢i p <---> q using gpi
IHl: Γ ⊢i foldr patt_imp (C [p]) l <---> foldr patt_imp (C [q]) l using gpi
wfal: wf (a :: l)
Hwf1: well_formed (foldr patt_imp (C [p]) l <---> foldr patt_imp (C [q]) l)
Hwf2: well_formed (p <---> q)

well_formed (C [p])
Σ: Signature
Γ: Theory
p, q: Pattern
C: PatternCtx
a: Pattern
l: list Pattern
wfp: well_formed p
wfq: well_formed q
wfC: PC_wf C
gpi: ProofInfo
pile: ProofInfoLe (ExGen := list_to_set (evar_fresh_seq (free_evars (pcPattern C) ∪ free_evars p ∪ free_evars q ∪ {[ pcEvar C]}) (maximal_exists_depth_of_evar_in_pattern (pcEvar C) (pcPattern C))), SVSubst := list_to_set (svar_fresh_seq (free_svars (pcPattern C) ∪ free_svars p ∪ free_svars q) (maximal_mu_depth_of_evar_in_pattern (pcEvar C) (pcPattern C))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern (pcEvar C) (pcPattern C)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' (free_evars (pcPattern C) ∪ free_evars p ∪ free_evars q ∪ {[ pcEvar C]}) (free_svars (pcPattern C) ∪ free_svars p ∪ free_svars q) (pcEvar C) (pcPattern C) p q wfC wfp wfq)) gpi
wfa: well_formed a = true
wfl: foldr andb true (map well_formed l) = true
Himp: Γ ⊢i p <---> q using gpi
IHl: Γ ⊢i foldr patt_imp (C [p]) l <---> foldr patt_imp (C [q]) l using gpi
wfal: wf (a :: l)
Hwf1: well_formed (foldr patt_imp (C [p]) l <---> foldr patt_imp (C [q]) l)
Hwf2: well_formed (p <---> q)

well_formed (pcPattern C)^[[evar:pcEvar C↦p]]
wf_auto2.
Σ: Signature
Γ: Theory
p, q: Pattern
C: PatternCtx
a: Pattern
l: list Pattern
wfp: well_formed p
wfq: well_formed q
wfC: PC_wf C
gpi: ProofInfo
pile: ProofInfoLe (ExGen := list_to_set (evar_fresh_seq (free_evars (pcPattern C) ∪ free_evars p ∪ free_evars q ∪ {[ pcEvar C]}) (maximal_exists_depth_of_evar_in_pattern (pcEvar C) (pcPattern C))), SVSubst := list_to_set (svar_fresh_seq (free_svars (pcPattern C) ∪ free_svars p ∪ free_svars q) (maximal_mu_depth_of_evar_in_pattern (pcEvar C) (pcPattern C))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern (pcEvar C) (pcPattern C)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' (free_evars (pcPattern C) ∪ free_evars p ∪ free_evars q ∪ {[ pcEvar C]}) (free_svars (pcPattern C) ∪ free_svars p ∪ free_svars q) (pcEvar C) (pcPattern C) p q wfC wfp wfq)) gpi
wfa: well_formed a = true
wfl: foldr andb true (map well_formed l) = true
Himp: Γ ⊢i p <---> q using gpi
IHl: Γ ⊢i foldr patt_imp (C [p]) l <---> foldr patt_imp (C [q]) l using gpi
wfal: wf (a :: l)
Hwf1: well_formed (foldr patt_imp (C [p]) l <---> foldr patt_imp (C [q]) l)
Hwf2: well_formed (p <---> q)
H: well_formed (C [p])

Γ ⊢i (a ---> foldr patt_imp (C [p]) l) <---> (a ---> foldr patt_imp (C [q]) l) using gpi
Σ: Signature
Γ: Theory
p, q: Pattern
C: PatternCtx
a: Pattern
l: list Pattern
wfp: well_formed p
wfq: well_formed q
wfC: PC_wf C
gpi: ProofInfo
pile: ProofInfoLe (ExGen := list_to_set (evar_fresh_seq (free_evars (pcPattern C) ∪ free_evars p ∪ free_evars q ∪ {[ pcEvar C]}) (maximal_exists_depth_of_evar_in_pattern (pcEvar C) (pcPattern C))), SVSubst := list_to_set (svar_fresh_seq (free_svars (pcPattern C) ∪ free_svars p ∪ free_svars q) (maximal_mu_depth_of_evar_in_pattern (pcEvar C) (pcPattern C))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern (pcEvar C) (pcPattern C)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' (free_evars (pcPattern C) ∪ free_evars p ∪ free_evars q ∪ {[ pcEvar C]}) (free_svars (pcPattern C) ∪ free_svars p ∪ free_svars q) (pcEvar C) (pcPattern C) p q wfC wfp wfq)) gpi
wfa: well_formed a = true
wfl: foldr andb true (map well_formed l) = true
Himp: Γ ⊢i p <---> q using gpi
IHl: Γ ⊢i foldr patt_imp (C [p]) l <---> foldr patt_imp (C [q]) l using gpi
wfal: wf (a :: l)
Hwf1: well_formed (foldr patt_imp (C [p]) l <---> foldr patt_imp (C [q]) l)
Hwf2: well_formed (p <---> q)
H: well_formed (C [p])

well_formed (C [q])
Σ: Signature
Γ: Theory
p, q: Pattern
C: PatternCtx
a: Pattern
l: list Pattern
wfp: well_formed p
wfq: well_formed q
wfC: PC_wf C
gpi: ProofInfo
pile: ProofInfoLe (ExGen := list_to_set (evar_fresh_seq (free_evars (pcPattern C) ∪ free_evars p ∪ free_evars q ∪ {[ pcEvar C]}) (maximal_exists_depth_of_evar_in_pattern (pcEvar C) (pcPattern C))), SVSubst := list_to_set (svar_fresh_seq (free_svars (pcPattern C) ∪ free_svars p ∪ free_svars q) (maximal_mu_depth_of_evar_in_pattern (pcEvar C) (pcPattern C))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern (pcEvar C) (pcPattern C)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' (free_evars (pcPattern C) ∪ free_evars p ∪ free_evars q ∪ {[ pcEvar C]}) (free_svars (pcPattern C) ∪ free_svars p ∪ free_svars q) (pcEvar C) (pcPattern C) p q wfC wfp wfq)) gpi
wfa: well_formed a = true
wfl: foldr andb true (map well_formed l) = true
Himp: Γ ⊢i p <---> q using gpi
IHl: Γ ⊢i foldr patt_imp (C [p]) l <---> foldr patt_imp (C [q]) l using gpi
wfal: wf (a :: l)
Hwf1: well_formed (foldr patt_imp (C [p]) l <---> foldr patt_imp (C [q]) l)
Hwf2: well_formed (p <---> q)
H: well_formed (C [p])
H0: well_formed (C [q])
Γ ⊢i (a ---> foldr patt_imp (C [p]) l) <---> (a ---> foldr patt_imp (C [q]) l) using gpi
Σ: Signature
Γ: Theory
p, q: Pattern
C: PatternCtx
a: Pattern
l: list Pattern
wfp: well_formed p
wfq: well_formed q
wfC: PC_wf C
gpi: ProofInfo
pile: ProofInfoLe (ExGen := list_to_set (evar_fresh_seq (free_evars (pcPattern C) ∪ free_evars p ∪ free_evars q ∪ {[ pcEvar C]}) (maximal_exists_depth_of_evar_in_pattern (pcEvar C) (pcPattern C))), SVSubst := list_to_set (svar_fresh_seq (free_svars (pcPattern C) ∪ free_svars p ∪ free_svars q) (maximal_mu_depth_of_evar_in_pattern (pcEvar C) (pcPattern C))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern (pcEvar C) (pcPattern C)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' (free_evars (pcPattern C) ∪ free_evars p ∪ free_evars q ∪ {[ pcEvar C]}) (free_svars (pcPattern C) ∪ free_svars p ∪ free_svars q) (pcEvar C) (pcPattern C) p q wfC wfp wfq)) gpi
wfa: well_formed a = true
wfl: foldr andb true (map well_formed l) = true
Himp: Γ ⊢i p <---> q using gpi
IHl: Γ ⊢i foldr patt_imp (C [p]) l <---> foldr patt_imp (C [q]) l using gpi
wfal: wf (a :: l)
Hwf1: well_formed (foldr patt_imp (C [p]) l <---> foldr patt_imp (C [q]) l)
Hwf2: well_formed (p <---> q)
H: well_formed (C [p])

well_formed (C [q])
Σ: Signature
Γ: Theory
p, q: Pattern
C: PatternCtx
a: Pattern
l: list Pattern
wfp: well_formed p
wfq: well_formed q
wfC: PC_wf C
gpi: ProofInfo
pile: ProofInfoLe (ExGen := list_to_set (evar_fresh_seq (free_evars (pcPattern C) ∪ free_evars p ∪ free_evars q ∪ {[ pcEvar C]}) (maximal_exists_depth_of_evar_in_pattern (pcEvar C) (pcPattern C))), SVSubst := list_to_set (svar_fresh_seq (free_svars (pcPattern C) ∪ free_svars p ∪ free_svars q) (maximal_mu_depth_of_evar_in_pattern (pcEvar C) (pcPattern C))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern (pcEvar C) (pcPattern C)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' (free_evars (pcPattern C) ∪ free_evars p ∪ free_evars q ∪ {[ pcEvar C]}) (free_svars (pcPattern C) ∪ free_svars p ∪ free_svars q) (pcEvar C) (pcPattern C) p q wfC wfp wfq)) gpi
wfa: well_formed a = true
wfl: foldr andb true (map well_formed l) = true
Himp: Γ ⊢i p <---> q using gpi
IHl: Γ ⊢i foldr patt_imp (C [p]) l <---> foldr patt_imp (C [q]) l using gpi
wfal: wf (a :: l)
Hwf1: well_formed (foldr patt_imp (C [p]) l <---> foldr patt_imp (C [q]) l)
Hwf2: well_formed (p <---> q)
H: well_formed (C [p])

well_formed (pcPattern C)^[[evar:pcEvar C↦q]]
wf_auto2.
Σ: Signature
Γ: Theory
p, q: Pattern
C: PatternCtx
a: Pattern
l: list Pattern
wfp: well_formed p
wfq: well_formed q
wfC: PC_wf C
gpi: ProofInfo
pile: ProofInfoLe (ExGen := list_to_set (evar_fresh_seq (free_evars (pcPattern C) ∪ free_evars p ∪ free_evars q ∪ {[ pcEvar C]}) (maximal_exists_depth_of_evar_in_pattern (pcEvar C) (pcPattern C))), SVSubst := list_to_set (svar_fresh_seq (free_svars (pcPattern C) ∪ free_svars p ∪ free_svars q) (maximal_mu_depth_of_evar_in_pattern (pcEvar C) (pcPattern C))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern (pcEvar C) (pcPattern C)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' (free_evars (pcPattern C) ∪ free_evars p ∪ free_evars q ∪ {[ pcEvar C]}) (free_svars (pcPattern C) ∪ free_svars p ∪ free_svars q) (pcEvar C) (pcPattern C) p q wfC wfp wfq)) gpi
wfa: well_formed a = true
wfl: foldr andb true (map well_formed l) = true
Himp: Γ ⊢i p <---> q using gpi
IHl: Γ ⊢i foldr patt_imp (C [p]) l <---> foldr patt_imp (C [q]) l using gpi
wfal: wf (a :: l)
Hwf1: well_formed (foldr patt_imp (C [p]) l <---> foldr patt_imp (C [q]) l)
Hwf2: well_formed (p <---> q)
H: well_formed (C [p])
H0: well_formed (C [q])

Γ ⊢i (a ---> foldr patt_imp (C [p]) l) <---> (a ---> foldr patt_imp (C [q]) l) using gpi
Σ: Signature
Γ: Theory
p, q: Pattern
C: PatternCtx
a: Pattern
l: list Pattern
wfp: well_formed p
wfq: well_formed q
wfC: PC_wf C
gpi: ProofInfo
pile: ProofInfoLe (ExGen := list_to_set (evar_fresh_seq (free_evars (pcPattern C) ∪ free_evars p ∪ free_evars q ∪ {[ pcEvar C]}) (maximal_exists_depth_of_evar_in_pattern (pcEvar C) (pcPattern C))), SVSubst := list_to_set (svar_fresh_seq (free_svars (pcPattern C) ∪ free_svars p ∪ free_svars q) (maximal_mu_depth_of_evar_in_pattern (pcEvar C) (pcPattern C))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern (pcEvar C) (pcPattern C)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' (free_evars (pcPattern C) ∪ free_evars p ∪ free_evars q ∪ {[ pcEvar C]}) (free_svars (pcPattern C) ∪ free_svars p ∪ free_svars q) (pcEvar C) (pcPattern C) p q wfC wfp wfq)) gpi
wfa: well_formed a = true
wfl: foldr andb true (map well_formed l) = true
Himp: Γ ⊢i p <---> q using gpi
IHl: Γ ⊢i foldr patt_imp (C [p]) l <---> foldr patt_imp (C [q]) l using gpi
wfal: wf (a :: l)
Hwf1: well_formed (foldr patt_imp (C [p]) l <---> foldr patt_imp (C [q]) l)
Hwf2: well_formed (p <---> q)
H: well_formed (C [p])
H0: well_formed (C [q])

well_formed ((a ---> foldr patt_imp (C [p]) l) <---> (a ---> foldr patt_imp (C [q]) l))
Σ: Signature
Γ: Theory
p, q: Pattern
C: PatternCtx
a: Pattern
l: list Pattern
wfp: well_formed p
wfq: well_formed q
wfC: PC_wf C
gpi: ProofInfo
pile: ProofInfoLe (ExGen := list_to_set (evar_fresh_seq (free_evars (pcPattern C) ∪ free_evars p ∪ free_evars q ∪ {[ pcEvar C]}) (maximal_exists_depth_of_evar_in_pattern (pcEvar C) (pcPattern C))), SVSubst := list_to_set (svar_fresh_seq (free_svars (pcPattern C) ∪ free_svars p ∪ free_svars q) (maximal_mu_depth_of_evar_in_pattern (pcEvar C) (pcPattern C))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern (pcEvar C) (pcPattern C)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' (free_evars (pcPattern C) ∪ free_evars p ∪ free_evars q ∪ {[ pcEvar C]}) (free_svars (pcPattern C) ∪ free_svars p ∪ free_svars q) (pcEvar C) (pcPattern C) p q wfC wfp wfq)) gpi
wfa: well_formed a = true
wfl: foldr andb true (map well_formed l) = true
Himp: Γ ⊢i p <---> q using gpi
IHl: Γ ⊢i foldr patt_imp (C [p]) l <---> foldr patt_imp (C [q]) l using gpi
wfal: wf (a :: l)
Hwf1: well_formed (foldr patt_imp (C [p]) l <---> foldr patt_imp (C [q]) l)
Hwf2: well_formed (p <---> q)
H: well_formed (C [p])
H0: well_formed (C [q])
Γ Ⱶ (a ---> foldr patt_imp (C [p]) l) <---> (a ---> foldr patt_imp (C [q]) l) using gpi
Σ: Signature
Γ: Theory
p, q: Pattern
C: PatternCtx
a: Pattern
l: list Pattern
wfp: well_formed p
wfq: well_formed q
wfC: PC_wf C
gpi: ProofInfo
pile: ProofInfoLe (ExGen := list_to_set (evar_fresh_seq (free_evars (pcPattern C) ∪ free_evars p ∪ free_evars q ∪ {[ pcEvar C]}) (maximal_exists_depth_of_evar_in_pattern (pcEvar C) (pcPattern C))), SVSubst := list_to_set (svar_fresh_seq (free_svars (pcPattern C) ∪ free_svars p ∪ free_svars q) (maximal_mu_depth_of_evar_in_pattern (pcEvar C) (pcPattern C))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern (pcEvar C) (pcPattern C)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' (free_evars (pcPattern C) ∪ free_evars p ∪ free_evars q ∪ {[ pcEvar C]}) (free_svars (pcPattern C) ∪ free_svars p ∪ free_svars q) (pcEvar C) (pcPattern C) p q wfC wfp wfq)) gpi
wfa: well_formed a = true
wfl: foldr andb true (map well_formed l) = true
Himp: Γ ⊢i p <---> q using gpi
IHl: Γ ⊢i foldr patt_imp (C [p]) l <---> foldr patt_imp (C [q]) l using gpi
wfal: wf (a :: l)
Hwf1: well_formed (foldr patt_imp (C [p]) l <---> foldr patt_imp (C [q]) l)
Hwf2: well_formed (p <---> q)
H: well_formed (C [p])
H0: well_formed (C [q])

well_formed ((a ---> foldr patt_imp (C [p]) l) <---> (a ---> foldr patt_imp (C [q]) l))
Σ: Signature
Γ: Theory
p, q: Pattern
C: PatternCtx
a: Pattern
l: list Pattern
wfp: well_formed p
wfq: well_formed q
wfC: PC_wf C
gpi: ProofInfo
pile: ProofInfoLe (ExGen := list_to_set (evar_fresh_seq (free_evars (pcPattern C) ∪ free_evars p ∪ free_evars q ∪ {[ pcEvar C]}) (maximal_exists_depth_of_evar_in_pattern (pcEvar C) (pcPattern C))), SVSubst := list_to_set (svar_fresh_seq (free_svars (pcPattern C) ∪ free_svars p ∪ free_svars q) (maximal_mu_depth_of_evar_in_pattern (pcEvar C) (pcPattern C))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern (pcEvar C) (pcPattern C)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' (free_evars (pcPattern C) ∪ free_evars p ∪ free_evars q ∪ {[ pcEvar C]}) (free_svars (pcPattern C) ∪ free_svars p ∪ free_svars q) (pcEvar C) (pcPattern C) p q wfC wfp wfq)) gpi
wfa: well_formed a = true
wfl: foldr andb true (map well_formed l) = true
Himp: Γ ⊢i p <---> q using gpi
IHl: Γ ⊢i foldr patt_imp (C [p]) l <---> foldr patt_imp (C [q]) l using gpi
wfal: wf (a :: l)
Hwf1: well_formed (foldr patt_imp (C [p]) l <---> foldr patt_imp (C [q]) l)
Hwf2: well_formed (p <---> q)
H: well_formed (C [p])
H0: well_formed (C [q])

well_formed ((a ---> foldr patt_imp (pcPattern C)^[[evar:pcEvar C↦p]] l) <---> (a ---> foldr patt_imp (pcPattern C)^[[evar:pcEvar C↦q]] l))
wf_auto2.
Σ: Signature
Γ: Theory
p, q: Pattern
C: PatternCtx
a: Pattern
l: list Pattern
wfp: well_formed p
wfq: well_formed q
wfC: PC_wf C
gpi: ProofInfo
pile: ProofInfoLe (ExGen := list_to_set (evar_fresh_seq (free_evars (pcPattern C) ∪ free_evars p ∪ free_evars q ∪ {[ pcEvar C]}) (maximal_exists_depth_of_evar_in_pattern (pcEvar C) (pcPattern C))), SVSubst := list_to_set (svar_fresh_seq (free_svars (pcPattern C) ∪ free_svars p ∪ free_svars q) (maximal_mu_depth_of_evar_in_pattern (pcEvar C) (pcPattern C))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern (pcEvar C) (pcPattern C)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' (free_evars (pcPattern C) ∪ free_evars p ∪ free_evars q ∪ {[ pcEvar C]}) (free_svars (pcPattern C) ∪ free_svars p ∪ free_svars q) (pcEvar C) (pcPattern C) p q wfC wfp wfq)) gpi
wfa: well_formed a = true
wfl: foldr andb true (map well_formed l) = true
Himp: Γ ⊢i p <---> q using gpi
IHl: Γ ⊢i foldr patt_imp (C [p]) l <---> foldr patt_imp (C [q]) l using gpi
wfal: wf (a :: l)
Hwf1: well_formed (foldr patt_imp (C [p]) l <---> foldr patt_imp (C [q]) l)
Hwf2: well_formed (p <---> q)
H: well_formed (C [p])
H0: well_formed (C [q])

Γ Ⱶ (a ---> foldr patt_imp (C [p]) l) <---> (a ---> foldr patt_imp (C [q]) l) using gpi
Σ: Signature
Γ: Theory
p, q: Pattern
C: PatternCtx
a: Pattern
l: list Pattern
wfp: well_formed p
wfq: well_formed q
wfC: PC_wf C
gpi: ProofInfo
pile: ProofInfoLe (ExGen := list_to_set (evar_fresh_seq (free_evars (pcPattern C) ∪ free_evars p ∪ free_evars q ∪ {[ pcEvar C]}) (maximal_exists_depth_of_evar_in_pattern (pcEvar C) (pcPattern C))), SVSubst := list_to_set (svar_fresh_seq (free_svars (pcPattern C) ∪ free_svars p ∪ free_svars q) (maximal_mu_depth_of_evar_in_pattern (pcEvar C) (pcPattern C))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern (pcEvar C) (pcPattern C)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' (free_evars (pcPattern C) ∪ free_evars p ∪ free_evars q ∪ {[ pcEvar C]}) (free_svars (pcPattern C) ∪ free_svars p ∪ free_svars q) (pcEvar C) (pcPattern C) p q wfC wfp wfq)) gpi
wfa: well_formed a = true
wfl: foldr andb true (map well_formed l) = true
Himp: Γ ⊢i p <---> q using gpi
IHl: Γ ⊢i foldr patt_imp (C [p]) l <---> foldr patt_imp (C [q]) l using gpi
wfal: wf (a :: l)
Hwf1: well_formed (foldr patt_imp (C [p]) l <---> foldr patt_imp (C [q]) l)
Hwf2: well_formed (p <---> q)
H: well_formed (C [p])
H0: well_formed (C [q])

Γ Ⱶ ((a ---> foldr patt_imp (C [p]) l) ---> a ---> foldr patt_imp (C [q]) l) and ((a ---> foldr patt_imp (C [q]) l) ---> a ---> foldr patt_imp (C [p]) l) using gpi
Σ: Signature
Γ: Theory
p, q: Pattern
C: PatternCtx
a: Pattern
l: list Pattern
wfp: well_formed p
wfq: well_formed q
wfC: PC_wf C
gpi: ProofInfo
pile: ProofInfoLe (ExGen := list_to_set (evar_fresh_seq (free_evars (pcPattern C) ∪ free_evars p ∪ free_evars q ∪ {[ pcEvar C]}) (maximal_exists_depth_of_evar_in_pattern (pcEvar C) (pcPattern C))), SVSubst := list_to_set (svar_fresh_seq (free_svars (pcPattern C) ∪ free_svars p ∪ free_svars q) (maximal_mu_depth_of_evar_in_pattern (pcEvar C) (pcPattern C))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern (pcEvar C) (pcPattern C)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' (free_evars (pcPattern C) ∪ free_evars p ∪ free_evars q ∪ {[ pcEvar C]}) (free_svars (pcPattern C) ∪ free_svars p ∪ free_svars q) (pcEvar C) (pcPattern C) p q wfC wfp wfq)) gpi
wfa: well_formed a = true
wfl: foldr andb true (map well_formed l) = true
Himp: Γ ⊢i p <---> q using gpi
IHl: Γ ⊢i foldr patt_imp (C [p]) l <---> foldr patt_imp (C [q]) l using gpi
wfal: wf (a :: l)
Hwf1: well_formed (foldr patt_imp (C [p]) l <---> foldr patt_imp (C [q]) l)
Hwf2: well_formed (p <---> q)
H: well_formed (C [p])
H0: well_formed (C [q])

Γ Ⱶ (a ---> foldr patt_imp (C [p]) l) ---> a ---> foldr patt_imp (C [q]) l using gpi
Σ: Signature
Γ: Theory
p, q: Pattern
C: PatternCtx
a: Pattern
l: list Pattern
wfp: well_formed p
wfq: well_formed q
wfC: PC_wf C
gpi: ProofInfo
pile: ProofInfoLe (ExGen := list_to_set (evar_fresh_seq (free_evars (pcPattern C) ∪ free_evars p ∪ free_evars q ∪ {[ pcEvar C]}) (maximal_exists_depth_of_evar_in_pattern (pcEvar C) (pcPattern C))), SVSubst := list_to_set (svar_fresh_seq (free_svars (pcPattern C) ∪ free_svars p ∪ free_svars q) (maximal_mu_depth_of_evar_in_pattern (pcEvar C) (pcPattern C))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern (pcEvar C) (pcPattern C)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' (free_evars (pcPattern C) ∪ free_evars p ∪ free_evars q ∪ {[ pcEvar C]}) (free_svars (pcPattern C) ∪ free_svars p ∪ free_svars q) (pcEvar C) (pcPattern C) p q wfC wfp wfq)) gpi
wfa: well_formed a = true
wfl: foldr andb true (map well_formed l) = true
Himp: Γ ⊢i p <---> q using gpi
IHl: Γ ⊢i foldr patt_imp (C [p]) l <---> foldr patt_imp (C [q]) l using gpi
wfal: wf (a :: l)
Hwf1: well_formed (foldr patt_imp (C [p]) l <---> foldr patt_imp (C [q]) l)
Hwf2: well_formed (p <---> q)
H: well_formed (C [p])
H0: well_formed (C [q])
Γ Ⱶ (a ---> foldr patt_imp (C [q]) l) ---> a ---> foldr patt_imp (C [p]) l using gpi
Σ: Signature
Γ: Theory
p, q: Pattern
C: PatternCtx
a: Pattern
l: list Pattern
wfp: well_formed p
wfq: well_formed q
wfC: PC_wf C
gpi: ProofInfo
pile: ProofInfoLe (ExGen := list_to_set (evar_fresh_seq (free_evars (pcPattern C) ∪ free_evars p ∪ free_evars q ∪ {[ pcEvar C]}) (maximal_exists_depth_of_evar_in_pattern (pcEvar C) (pcPattern C))), SVSubst := list_to_set (svar_fresh_seq (free_svars (pcPattern C) ∪ free_svars p ∪ free_svars q) (maximal_mu_depth_of_evar_in_pattern (pcEvar C) (pcPattern C))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern (pcEvar C) (pcPattern C)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' (free_evars (pcPattern C) ∪ free_evars p ∪ free_evars q ∪ {[ pcEvar C]}) (free_svars (pcPattern C) ∪ free_svars p ∪ free_svars q) (pcEvar C) (pcPattern C) p q wfC wfp wfq)) gpi
wfa: well_formed a = true
wfl: foldr andb true (map well_formed l) = true
Himp: Γ ⊢i p <---> q using gpi
IHl: Γ ⊢i foldr patt_imp (C [p]) l <---> foldr patt_imp (C [q]) l using gpi
wfal: wf (a :: l)
Hwf1: well_formed (foldr patt_imp (C [p]) l <---> foldr patt_imp (C [q]) l)
Hwf2: well_formed (p <---> q)
H: well_formed (C [p])
H0: well_formed (C [q])

Γ Ⱶ (a ---> foldr patt_imp (C [p]) l) ---> a ---> foldr patt_imp (C [q]) l using gpi
Σ: Signature
Γ: Theory
p, q: Pattern
C: PatternCtx
a: Pattern
l: list Pattern
wfp: well_formed p
wfq: well_formed q
wfC: PC_wf C
gpi: ProofInfo
pile: ProofInfoLe (ExGen := list_to_set (evar_fresh_seq (free_evars (pcPattern C) ∪ free_evars p ∪ free_evars q ∪ {[ pcEvar C]}) (maximal_exists_depth_of_evar_in_pattern (pcEvar C) (pcPattern C))), SVSubst := list_to_set (svar_fresh_seq (free_svars (pcPattern C) ∪ free_svars p ∪ free_svars q) (maximal_mu_depth_of_evar_in_pattern (pcEvar C) (pcPattern C))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern (pcEvar C) (pcPattern C)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' (free_evars (pcPattern C) ∪ free_evars p ∪ free_evars q ∪ {[ pcEvar C]}) (free_svars (pcPattern C) ∪ free_svars p ∪ free_svars q) (pcEvar C) (pcPattern C) p q wfC wfp wfq)) gpi
wfa: well_formed a = true
wfl: foldr andb true (map well_formed l) = true
Himp: Γ ⊢i p <---> q using gpi
IHl: Γ ⊢i foldr patt_imp (C [p]) l <---> foldr patt_imp (C [q]) l using gpi
wfal: wf (a :: l)
Hwf1: well_formed (foldr patt_imp (C [p]) l <---> foldr patt_imp (C [q]) l)
Hwf2: well_formed (p <---> q)
H: well_formed (C [p])
H0: well_formed (C [q])

Γ Ⱶ "0" ∶ a ---> foldr patt_imp (C [p]) l, -------------------------------------- a ---> foldr patt_imp (C [q]) l using gpi
Σ: Signature
Γ: Theory
p, q: Pattern
C: PatternCtx
a: Pattern
l: list Pattern
wfp: well_formed p
wfq: well_formed q
wfC: PC_wf C
gpi: ProofInfo
pile: ProofInfoLe (ExGen := list_to_set (evar_fresh_seq (free_evars (pcPattern C) ∪ free_evars p ∪ free_evars q ∪ {[ pcEvar C]}) (maximal_exists_depth_of_evar_in_pattern (pcEvar C) (pcPattern C))), SVSubst := list_to_set (svar_fresh_seq (free_svars (pcPattern C) ∪ free_svars p ∪ free_svars q) (maximal_mu_depth_of_evar_in_pattern (pcEvar C) (pcPattern C))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern (pcEvar C) (pcPattern C)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' (free_evars (pcPattern C) ∪ free_evars p ∪ free_evars q ∪ {[ pcEvar C]}) (free_svars (pcPattern C) ∪ free_svars p ∪ free_svars q) (pcEvar C) (pcPattern C) p q wfC wfp wfq)) gpi
wfa: well_formed a = true
wfl: foldr andb true (map well_formed l) = true
Himp: Γ ⊢i p <---> q using gpi
IHl: Γ ⊢i foldr patt_imp (C [p]) l <---> foldr patt_imp (C [q]) l using gpi
wfal: wf (a :: l)
Hwf1: well_formed (foldr patt_imp (C [p]) l <---> foldr patt_imp (C [q]) l)
Hwf2: well_formed (p <---> q)
H: well_formed (C [p])
H0: well_formed (C [q])

Γ Ⱶ "0" ∶ a ---> foldr patt_imp (C [p]) l, "1" ∶ a, -------------------------------------- foldr patt_imp (C [q]) l using gpi
Σ: Signature
Γ: Theory
p, q: Pattern
C: PatternCtx
a: Pattern
l: list Pattern
wfp: well_formed p
wfq: well_formed q
wfC: PC_wf C
gpi: ProofInfo
pile: ProofInfoLe (ExGen := list_to_set (evar_fresh_seq (free_evars (pcPattern C) ∪ free_evars p ∪ free_evars q ∪ {[ pcEvar C]}) (maximal_exists_depth_of_evar_in_pattern (pcEvar C) (pcPattern C))), SVSubst := list_to_set (svar_fresh_seq (free_svars (pcPattern C) ∪ free_svars p ∪ free_svars q) (maximal_mu_depth_of_evar_in_pattern (pcEvar C) (pcPattern C))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern (pcEvar C) (pcPattern C)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' (free_evars (pcPattern C) ∪ free_evars p ∪ free_evars q ∪ {[ pcEvar C]}) (free_svars (pcPattern C) ∪ free_svars p ∪ free_svars q) (pcEvar C) (pcPattern C) p q wfC wfp wfq)) gpi
wfa: well_formed a = true
wfl: foldr andb true (map well_formed l) = true
Himp: Γ ⊢i p <---> q using gpi
IHl: Γ ⊢i foldr patt_imp (C [p]) l <---> foldr patt_imp (C [q]) l using gpi
wfal: wf (a :: l)
Hwf1: well_formed (foldr patt_imp (C [p]) l <---> foldr patt_imp (C [q]) l)
Hwf2: well_formed (p <---> q)
H: well_formed (C [p])
H0: well_formed (C [q])

well_formed (foldr patt_imp (C [p]) l)
Σ: Signature
Γ: Theory
p, q: Pattern
C: PatternCtx
a: Pattern
l: list Pattern
wfp: well_formed p
wfq: well_formed q
wfC: PC_wf C
gpi: ProofInfo
pile: ProofInfoLe (ExGen := list_to_set (evar_fresh_seq (free_evars (pcPattern C) ∪ free_evars p ∪ free_evars q ∪ {[ pcEvar C]}) (maximal_exists_depth_of_evar_in_pattern (pcEvar C) (pcPattern C))), SVSubst := list_to_set (svar_fresh_seq (free_svars (pcPattern C) ∪ free_svars p ∪ free_svars q) (maximal_mu_depth_of_evar_in_pattern (pcEvar C) (pcPattern C))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern (pcEvar C) (pcPattern C)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' (free_evars (pcPattern C) ∪ free_evars p ∪ free_evars q ∪ {[ pcEvar C]}) (free_svars (pcPattern C) ∪ free_svars p ∪ free_svars q) (pcEvar C) (pcPattern C) p q wfC wfp wfq)) gpi
wfa: well_formed a = true
wfl: foldr andb true (map well_formed l) = true
Himp: Γ ⊢i p <---> q using gpi
IHl: Γ ⊢i foldr patt_imp (C [p]) l <---> foldr patt_imp (C [q]) l using gpi
wfal: wf (a :: l)
Hwf1: well_formed (foldr patt_imp (C [p]) l <---> foldr patt_imp (C [q]) l)
Hwf2: well_formed (p <---> q)
H: well_formed (C [p])
H0: well_formed (C [q])
Hwf: well_formed (foldr patt_imp (C [p]) l)
Γ Ⱶ "0" ∶ a ---> foldr patt_imp (C [p]) l, "1" ∶ a, -------------------------------------- foldr patt_imp (C [p]) l using gpi
Σ: Signature
Γ: Theory
p, q: Pattern
C: PatternCtx
a: Pattern
l: list Pattern
wfp: well_formed p
wfq: well_formed q
wfC: PC_wf C
gpi: ProofInfo
pile: ProofInfoLe (ExGen := list_to_set (evar_fresh_seq (free_evars (pcPattern C) ∪ free_evars p ∪ free_evars q ∪ {[ pcEvar C]}) (maximal_exists_depth_of_evar_in_pattern (pcEvar C) (pcPattern C))), SVSubst := list_to_set (svar_fresh_seq (free_svars (pcPattern C) ∪ free_svars p ∪ free_svars q) (maximal_mu_depth_of_evar_in_pattern (pcEvar C) (pcPattern C))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern (pcEvar C) (pcPattern C)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' (free_evars (pcPattern C) ∪ free_evars p ∪ free_evars q ∪ {[ pcEvar C]}) (free_svars (pcPattern C) ∪ free_svars p ∪ free_svars q) (pcEvar C) (pcPattern C) p q wfC wfp wfq)) gpi
wfa: well_formed a = true
wfl: foldr andb true (map well_formed l) = true
Himp: Γ ⊢i p <---> q using gpi
IHl: Γ ⊢i foldr patt_imp (C [p]) l <---> foldr patt_imp (C [q]) l using gpi
wfal: wf (a :: l)
Hwf1: well_formed (foldr patt_imp (C [p]) l <---> foldr patt_imp (C [q]) l)
Hwf2: well_formed (p <---> q)
H: well_formed (C [p])
H0: well_formed (C [q])
Hwf: well_formed (foldr patt_imp (C [p]) l)
Γ Ⱶ "0" ∶ a ---> foldr patt_imp (C [p]) l, "1" ∶ a, "2" ∶ foldr patt_imp (C [p]) l, -------------------------------------- foldr patt_imp (C [q]) l using gpi
Σ: Signature
Γ: Theory
p, q: Pattern
C: PatternCtx
a: Pattern
l: list Pattern
wfp: well_formed p
wfq: well_formed q
wfC: PC_wf C
gpi: ProofInfo
pile: ProofInfoLe (ExGen := list_to_set (evar_fresh_seq (free_evars (pcPattern C) ∪ free_evars p ∪ free_evars q ∪ {[ pcEvar C]}) (maximal_exists_depth_of_evar_in_pattern (pcEvar C) (pcPattern C))), SVSubst := list_to_set (svar_fresh_seq (free_svars (pcPattern C) ∪ free_svars p ∪ free_svars q) (maximal_mu_depth_of_evar_in_pattern (pcEvar C) (pcPattern C))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern (pcEvar C) (pcPattern C)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' (free_evars (pcPattern C) ∪ free_evars p ∪ free_evars q ∪ {[ pcEvar C]}) (free_svars (pcPattern C) ∪ free_svars p ∪ free_svars q) (pcEvar C) (pcPattern C) p q wfC wfp wfq)) gpi
wfa: well_formed a = true
wfl: foldr andb true (map well_formed l) = true
Himp: Γ ⊢i p <---> q using gpi
IHl: Γ ⊢i foldr patt_imp (C [p]) l <---> foldr patt_imp (C [q]) l using gpi
wfal: wf (a :: l)
Hwf1: well_formed (foldr patt_imp (C [p]) l <---> foldr patt_imp (C [q]) l)
Hwf2: well_formed (p <---> q)
H: well_formed (C [p])
H0: well_formed (C [q])

well_formed (foldr patt_imp (C [p]) l)
wf_auto2.
Σ: Signature
Γ: Theory
p, q: Pattern
C: PatternCtx
a: Pattern
l: list Pattern
wfp: well_formed p
wfq: well_formed q
wfC: PC_wf C
gpi: ProofInfo
pile: ProofInfoLe (ExGen := list_to_set (evar_fresh_seq (free_evars (pcPattern C) ∪ free_evars p ∪ free_evars q ∪ {[ pcEvar C]}) (maximal_exists_depth_of_evar_in_pattern (pcEvar C) (pcPattern C))), SVSubst := list_to_set (svar_fresh_seq (free_svars (pcPattern C) ∪ free_svars p ∪ free_svars q) (maximal_mu_depth_of_evar_in_pattern (pcEvar C) (pcPattern C))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern (pcEvar C) (pcPattern C)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' (free_evars (pcPattern C) ∪ free_evars p ∪ free_evars q ∪ {[ pcEvar C]}) (free_svars (pcPattern C) ∪ free_svars p ∪ free_svars q) (pcEvar C) (pcPattern C) p q wfC wfp wfq)) gpi
wfa: well_formed a = true
wfl: foldr andb true (map well_formed l) = true
Himp: Γ ⊢i p <---> q using gpi
IHl: Γ ⊢i foldr patt_imp (C [p]) l <---> foldr patt_imp (C [q]) l using gpi
wfal: wf (a :: l)
Hwf1: well_formed (foldr patt_imp (C [p]) l <---> foldr patt_imp (C [q]) l)
Hwf2: well_formed (p <---> q)
H: well_formed (C [p])
H0: well_formed (C [q])
Hwf: well_formed (foldr patt_imp (C [p]) l)

Γ Ⱶ "0" ∶ a ---> foldr patt_imp (C [p]) l, "1" ∶ a, -------------------------------------- foldr patt_imp (C [p]) l using gpi
Σ: Signature
Γ: Theory
p, q: Pattern
C: PatternCtx
a: Pattern
l: list Pattern
wfp: well_formed p
wfq: well_formed q
wfC: PC_wf C
gpi: ProofInfo
pile: ProofInfoLe (ExGen := list_to_set (evar_fresh_seq (free_evars (pcPattern C) ∪ free_evars p ∪ free_evars q ∪ {[ pcEvar C]}) (maximal_exists_depth_of_evar_in_pattern (pcEvar C) (pcPattern C))), SVSubst := list_to_set (svar_fresh_seq (free_svars (pcPattern C) ∪ free_svars p ∪ free_svars q) (maximal_mu_depth_of_evar_in_pattern (pcEvar C) (pcPattern C))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern (pcEvar C) (pcPattern C)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' (free_evars (pcPattern C) ∪ free_evars p ∪ free_evars q ∪ {[ pcEvar C]}) (free_svars (pcPattern C) ∪ free_svars p ∪ free_svars q) (pcEvar C) (pcPattern C) p q wfC wfp wfq)) gpi
wfa: well_formed a = true
wfl: foldr andb true (map well_formed l) = true
Himp: Γ ⊢i p <---> q using gpi
IHl: Γ ⊢i foldr patt_imp (C [p]) l <---> foldr patt_imp (C [q]) l using gpi
wfal: wf (a :: l)
Hwf1: well_formed (foldr patt_imp (C [p]) l <---> foldr patt_imp (C [q]) l)
Hwf2: well_formed (p <---> q)
H: well_formed (C [p])
H0: well_formed (C [q])
Hwf: well_formed (foldr patt_imp (C [p]) l)
Γ Ⱶ "0" ∶ a ---> foldr patt_imp (C [p]) l, "1" ∶ a, "2" ∶ foldr patt_imp (C [p]) l, -------------------------------------- foldr patt_imp (C [q]) l using gpi
Σ: Signature
Γ: Theory
p, q: Pattern
C: PatternCtx
a: Pattern
l: list Pattern
wfp: well_formed p
wfq: well_formed q
wfC: PC_wf C
gpi: ProofInfo
pile: ProofInfoLe (ExGen := list_to_set (evar_fresh_seq (free_evars (pcPattern C) ∪ free_evars p ∪ free_evars q ∪ {[ pcEvar C]}) (maximal_exists_depth_of_evar_in_pattern (pcEvar C) (pcPattern C))), SVSubst := list_to_set (svar_fresh_seq (free_svars (pcPattern C) ∪ free_svars p ∪ free_svars q) (maximal_mu_depth_of_evar_in_pattern (pcEvar C) (pcPattern C))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern (pcEvar C) (pcPattern C)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' (free_evars (pcPattern C) ∪ free_evars p ∪ free_evars q ∪ {[ pcEvar C]}) (free_svars (pcPattern C) ∪ free_svars p ∪ free_svars q) (pcEvar C) (pcPattern C) p q wfC wfp wfq)) gpi
wfa: well_formed a = true
wfl: foldr andb true (map well_formed l) = true
Himp: Γ ⊢i p <---> q using gpi
IHl: Γ ⊢i foldr patt_imp (C [p]) l <---> foldr patt_imp (C [q]) l using gpi
wfal: wf (a :: l)
Hwf1: well_formed (foldr patt_imp (C [p]) l <---> foldr patt_imp (C [q]) l)
Hwf2: well_formed (p <---> q)
H: well_formed (C [p])
H0: well_formed (C [q])
Hwf: well_formed (foldr patt_imp (C [p]) l)

Γ Ⱶ "0" ∶ a ---> foldr patt_imp (C [p]) l, "1" ∶ a, -------------------------------------- foldr patt_imp (C [p]) l using gpi
Σ: Signature
Γ: Theory
p, q: Pattern
C: PatternCtx
a: Pattern
l: list Pattern
wfp: well_formed p
wfq: well_formed q
wfC: PC_wf C
gpi: ProofInfo
pile: ProofInfoLe (ExGen := list_to_set (evar_fresh_seq (free_evars (pcPattern C) ∪ free_evars p ∪ free_evars q ∪ {[ pcEvar C]}) (maximal_exists_depth_of_evar_in_pattern (pcEvar C) (pcPattern C))), SVSubst := list_to_set (svar_fresh_seq (free_svars (pcPattern C) ∪ free_svars p ∪ free_svars q) (maximal_mu_depth_of_evar_in_pattern (pcEvar C) (pcPattern C))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern (pcEvar C) (pcPattern C)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' (free_evars (pcPattern C) ∪ free_evars p ∪ free_evars q ∪ {[ pcEvar C]}) (free_svars (pcPattern C) ∪ free_svars p ∪ free_svars q) (pcEvar C) (pcPattern C) p q wfC wfp wfq)) gpi
wfa: well_formed a = true
wfl: foldr andb true (map well_formed l) = true
Himp: Γ ⊢i p <---> q using gpi
IHl: Γ ⊢i foldr patt_imp (C [p]) l <---> foldr patt_imp (C [q]) l using gpi
wfal: wf (a :: l)
Hwf1: well_formed (foldr patt_imp (C [p]) l <---> foldr patt_imp (C [q]) l)
Hwf2: well_formed (p <---> q)
H: well_formed (C [p])
H0: well_formed (C [q])
Hwf: well_formed (foldr patt_imp (C [p]) l)

Γ Ⱶ "0" ∶ a ---> foldr patt_imp (C [p]) l, "1" ∶ a, -------------------------------------- a using gpi
mlExactn 1.
Σ: Signature
Γ: Theory
p, q: Pattern
C: PatternCtx
a: Pattern
l: list Pattern
wfp: well_formed p
wfq: well_formed q
wfC: PC_wf C
gpi: ProofInfo
pile: ProofInfoLe (ExGen := list_to_set (evar_fresh_seq (free_evars (pcPattern C) ∪ free_evars p ∪ free_evars q ∪ {[ pcEvar C]}) (maximal_exists_depth_of_evar_in_pattern (pcEvar C) (pcPattern C))), SVSubst := list_to_set (svar_fresh_seq (free_svars (pcPattern C) ∪ free_svars p ∪ free_svars q) (maximal_mu_depth_of_evar_in_pattern (pcEvar C) (pcPattern C))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern (pcEvar C) (pcPattern C)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' (free_evars (pcPattern C) ∪ free_evars p ∪ free_evars q ∪ {[ pcEvar C]}) (free_svars (pcPattern C) ∪ free_svars p ∪ free_svars q) (pcEvar C) (pcPattern C) p q wfC wfp wfq)) gpi
wfa: well_formed a = true
wfl: foldr andb true (map well_formed l) = true
Himp: Γ ⊢i p <---> q using gpi
IHl: Γ ⊢i foldr patt_imp (C [p]) l <---> foldr patt_imp (C [q]) l using gpi
wfal: wf (a :: l)
Hwf1: well_formed (foldr patt_imp (C [p]) l <---> foldr patt_imp (C [q]) l)
Hwf2: well_formed (p <---> q)
H: well_formed (C [p])
H0: well_formed (C [q])
Hwf: well_formed (foldr patt_imp (C [p]) l)

Γ Ⱶ "0" ∶ a ---> foldr patt_imp (C [p]) l, "1" ∶ a, "2" ∶ foldr patt_imp (C [p]) l, -------------------------------------- foldr patt_imp (C [q]) l using gpi
Σ: Signature
Γ: Theory
p, q: Pattern
C: PatternCtx
a: Pattern
l: list Pattern
wfp: well_formed p
wfq: well_formed q
wfC: PC_wf C
gpi: ProofInfo
pile: ProofInfoLe (ExGen := list_to_set (evar_fresh_seq (free_evars (pcPattern C) ∪ free_evars p ∪ free_evars q ∪ {[ pcEvar C]}) (maximal_exists_depth_of_evar_in_pattern (pcEvar C) (pcPattern C))), SVSubst := list_to_set (svar_fresh_seq (free_svars (pcPattern C) ∪ free_svars p ∪ free_svars q) (maximal_mu_depth_of_evar_in_pattern (pcEvar C) (pcPattern C))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern (pcEvar C) (pcPattern C)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' (free_evars (pcPattern C) ∪ free_evars p ∪ free_evars q ∪ {[ pcEvar C]}) (free_svars (pcPattern C) ∪ free_svars p ∪ free_svars q) (pcEvar C) (pcPattern C) p q wfC wfp wfq)) gpi
wfa: well_formed a = true
wfl: foldr andb true (map well_formed l) = true
Himp: Γ ⊢i p <---> q using gpi
IHl: Γ ⊢i foldr patt_imp (C [p]) l ---> foldr patt_imp (C [q]) l using gpi
wfal: wf (a :: l)
Hwf1: well_formed (foldr patt_imp (C [p]) l <---> foldr patt_imp (C [q]) l)
Hwf2: well_formed (p <---> q)
H: well_formed (C [p])
H0: well_formed (C [q])
Hwf: well_formed (foldr patt_imp (C [p]) l)

Γ Ⱶ "0" ∶ a ---> foldr patt_imp (C [p]) l, "1" ∶ a, "2" ∶ foldr patt_imp (C [p]) l, -------------------------------------- foldr patt_imp (C [q]) l using gpi
Σ: Signature
Γ: Theory
p, q: Pattern
C: PatternCtx
a: Pattern
l: list Pattern
wfp: well_formed p
wfq: well_formed q
wfC: PC_wf C
gpi: ProofInfo
pile: ProofInfoLe (ExGen := list_to_set (evar_fresh_seq (free_evars (pcPattern C) ∪ free_evars p ∪ free_evars q ∪ {[ pcEvar C]}) (maximal_exists_depth_of_evar_in_pattern (pcEvar C) (pcPattern C))), SVSubst := list_to_set (svar_fresh_seq (free_svars (pcPattern C) ∪ free_svars p ∪ free_svars q) (maximal_mu_depth_of_evar_in_pattern (pcEvar C) (pcPattern C))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern (pcEvar C) (pcPattern C)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' (free_evars (pcPattern C) ∪ free_evars p ∪ free_evars q ∪ {[ pcEvar C]}) (free_svars (pcPattern C) ∪ free_svars p ∪ free_svars q) (pcEvar C) (pcPattern C) p q wfC wfp wfq)) gpi
wfa: well_formed a = true
wfl: foldr andb true (map well_formed l) = true
Himp: Γ ⊢i p <---> q using gpi
IHl: Γ ⊢i foldr patt_imp (C [p]) l <---> foldr patt_imp (C [q]) l using gpi
wfal: wf (a :: l)
Hwf1: well_formed (foldr patt_imp (C [p]) l <---> foldr patt_imp (C [q]) l)
Hwf2: well_formed (p <---> q)
H: well_formed (C [p])
H0: well_formed (C [q])
Hwf: well_formed (foldr patt_imp (C [p]) l)
well_formed (foldr patt_imp (C [p]) l)
Σ: Signature
Γ: Theory
p, q: Pattern
C: PatternCtx
a: Pattern
l: list Pattern
wfp: well_formed p
wfq: well_formed q
wfC: PC_wf C
gpi: ProofInfo
pile: ProofInfoLe (ExGen := list_to_set (evar_fresh_seq (free_evars (pcPattern C) ∪ free_evars p ∪ free_evars q ∪ {[ pcEvar C]}) (maximal_exists_depth_of_evar_in_pattern (pcEvar C) (pcPattern C))), SVSubst := list_to_set (svar_fresh_seq (free_svars (pcPattern C) ∪ free_svars p ∪ free_svars q) (maximal_mu_depth_of_evar_in_pattern (pcEvar C) (pcPattern C))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern (pcEvar C) (pcPattern C)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' (free_evars (pcPattern C) ∪ free_evars p ∪ free_evars q ∪ {[ pcEvar C]}) (free_svars (pcPattern C) ∪ free_svars p ∪ free_svars q) (pcEvar C) (pcPattern C) p q wfC wfp wfq)) gpi
wfa: well_formed a = true
wfl: foldr andb true (map well_formed l) = true
Himp: Γ ⊢i p <---> q using gpi
IHl: Γ ⊢i foldr patt_imp (C [p]) l <---> foldr patt_imp (C [q]) l using gpi
wfal: wf (a :: l)
Hwf1: well_formed (foldr patt_imp (C [p]) l <---> foldr patt_imp (C [q]) l)
Hwf2: well_formed (p <---> q)
H: well_formed (C [p])
H0: well_formed (C [q])
Hwf: well_formed (foldr patt_imp (C [p]) l)
well_formed (foldr patt_imp (C [q]) l)
Σ: Signature
Γ: Theory
p, q: Pattern
C: PatternCtx
a: Pattern
l: list Pattern
wfp: well_formed p
wfq: well_formed q
wfC: PC_wf C
gpi: ProofInfo
pile: ProofInfoLe (ExGen := list_to_set (evar_fresh_seq (free_evars (pcPattern C) ∪ free_evars p ∪ free_evars q ∪ {[ pcEvar C]}) (maximal_exists_depth_of_evar_in_pattern (pcEvar C) (pcPattern C))), SVSubst := list_to_set (svar_fresh_seq (free_svars (pcPattern C) ∪ free_svars p ∪ free_svars q) (maximal_mu_depth_of_evar_in_pattern (pcEvar C) (pcPattern C))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern (pcEvar C) (pcPattern C)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' (free_evars (pcPattern C) ∪ free_evars p ∪ free_evars q ∪ {[ pcEvar C]}) (free_svars (pcPattern C) ∪ free_svars p ∪ free_svars q) (pcEvar C) (pcPattern C) p q wfC wfp wfq)) gpi
wfa: well_formed a = true
wfl: foldr andb true (map well_formed l) = true
Himp: Γ ⊢i p <---> q using gpi
IHl: Γ ⊢i foldr patt_imp (C [p]) l ---> foldr patt_imp (C [q]) l using gpi
wfal: wf (a :: l)
Hwf1: well_formed (foldr patt_imp (C [p]) l <---> foldr patt_imp (C [q]) l)
Hwf2: well_formed (p <---> q)
H: well_formed (C [p])
H0: well_formed (C [q])
Hwf: well_formed (foldr patt_imp (C [p]) l)

Γ Ⱶ "0" ∶ a ---> foldr patt_imp (C [p]) l, "1" ∶ a, "2" ∶ foldr patt_imp (C [p]) l, -------------------------------------- foldr patt_imp (C [q]) l using gpi
Σ: Signature
Γ: Theory
p, q: Pattern
C: PatternCtx
a: Pattern
l: list Pattern
wfp: well_formed p
wfq: well_formed q
wfC: PC_wf C
gpi: ProofInfo
pile: ProofInfoLe (ExGen := list_to_set (evar_fresh_seq (free_evars (pcPattern C) ∪ free_evars p ∪ free_evars q ∪ {[ pcEvar C]}) (maximal_exists_depth_of_evar_in_pattern (pcEvar C) (pcPattern C))), SVSubst := list_to_set (svar_fresh_seq (free_svars (pcPattern C) ∪ free_svars p ∪ free_svars q) (maximal_mu_depth_of_evar_in_pattern (pcEvar C) (pcPattern C))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern (pcEvar C) (pcPattern C)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' (free_evars (pcPattern C) ∪ free_evars p ∪ free_evars q ∪ {[ pcEvar C]}) (free_svars (pcPattern C) ∪ free_svars p ∪ free_svars q) (pcEvar C) (pcPattern C) p q wfC wfp wfq)) gpi
wfa: well_formed a = true
wfl: foldr andb true (map well_formed l) = true
Himp: Γ ⊢i p <---> q using gpi
IHl: Γ ⊢i foldr patt_imp (C [p]) l ---> foldr patt_imp (C [q]) l using gpi
wfal: wf (a :: l)
Hwf1: well_formed (foldr patt_imp (C [p]) l <---> foldr patt_imp (C [q]) l)
Hwf2: well_formed (p <---> q)
H: well_formed (C [p])
H0: well_formed (C [q])
Hwf: well_formed (foldr patt_imp (C [p]) l)

Γ Ⱶ "0" ∶ a ---> foldr patt_imp (C [p]) l, "1" ∶ a, "2" ∶ foldr patt_imp (C [p]) l, -------------------------------------- foldr patt_imp (C [p]) l using gpi
mlExactn 2.
Σ: Signature
Γ: Theory
p, q: Pattern
C: PatternCtx
a: Pattern
l: list Pattern
wfp: well_formed p
wfq: well_formed q
wfC: PC_wf C
gpi: ProofInfo
pile: ProofInfoLe (ExGen := list_to_set (evar_fresh_seq (free_evars (pcPattern C) ∪ free_evars p ∪ free_evars q ∪ {[ pcEvar C]}) (maximal_exists_depth_of_evar_in_pattern (pcEvar C) (pcPattern C))), SVSubst := list_to_set (svar_fresh_seq (free_svars (pcPattern C) ∪ free_svars p ∪ free_svars q) (maximal_mu_depth_of_evar_in_pattern (pcEvar C) (pcPattern C))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern (pcEvar C) (pcPattern C)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' (free_evars (pcPattern C) ∪ free_evars p ∪ free_evars q ∪ {[ pcEvar C]}) (free_svars (pcPattern C) ∪ free_svars p ∪ free_svars q) (pcEvar C) (pcPattern C) p q wfC wfp wfq)) gpi
wfa: well_formed a = true
wfl: foldr andb true (map well_formed l) = true
Himp: Γ ⊢i p <---> q using gpi
IHl: Γ ⊢i foldr patt_imp (C [p]) l <---> foldr patt_imp (C [q]) l using gpi
wfal: wf (a :: l)
Hwf1: well_formed (foldr patt_imp (C [p]) l <---> foldr patt_imp (C [q]) l)
Hwf2: well_formed (p <---> q)
H: well_formed (C [p])
H0: well_formed (C [q])

Γ Ⱶ (a ---> foldr patt_imp (C [q]) l) ---> a ---> foldr patt_imp (C [p]) l using gpi
Σ: Signature
Γ: Theory
p, q: Pattern
C: PatternCtx
a: Pattern
l: list Pattern
wfp: well_formed p
wfq: well_formed q
wfC: PC_wf C
gpi: ProofInfo
pile: ProofInfoLe (ExGen := list_to_set (evar_fresh_seq (free_evars (pcPattern C) ∪ free_evars p ∪ free_evars q ∪ {[ pcEvar C]}) (maximal_exists_depth_of_evar_in_pattern (pcEvar C) (pcPattern C))), SVSubst := list_to_set (svar_fresh_seq (free_svars (pcPattern C) ∪ free_svars p ∪ free_svars q) (maximal_mu_depth_of_evar_in_pattern (pcEvar C) (pcPattern C))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern (pcEvar C) (pcPattern C)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' (free_evars (pcPattern C) ∪ free_evars p ∪ free_evars q ∪ {[ pcEvar C]}) (free_svars (pcPattern C) ∪ free_svars p ∪ free_svars q) (pcEvar C) (pcPattern C) p q wfC wfp wfq)) gpi
wfa: well_formed a = true
wfl: foldr andb true (map well_formed l) = true
Himp: Γ ⊢i p <---> q using gpi
IHl: Γ ⊢i foldr patt_imp (C [p]) l <---> foldr patt_imp (C [q]) l using gpi
wfal: wf (a :: l)
Hwf1: well_formed (foldr patt_imp (C [p]) l <---> foldr patt_imp (C [q]) l)
Hwf2: well_formed (p <---> q)
H: well_formed (C [p])
H0: well_formed (C [q])

Γ Ⱶ "0" ∶ a ---> foldr patt_imp (C [q]) l, -------------------------------------- a ---> foldr patt_imp (C [p]) l using gpi
Σ: Signature
Γ: Theory
p, q: Pattern
C: PatternCtx
a: Pattern
l: list Pattern
wfp: well_formed p
wfq: well_formed q
wfC: PC_wf C
gpi: ProofInfo
pile: ProofInfoLe (ExGen := list_to_set (evar_fresh_seq (free_evars (pcPattern C) ∪ free_evars p ∪ free_evars q ∪ {[ pcEvar C]}) (maximal_exists_depth_of_evar_in_pattern (pcEvar C) (pcPattern C))), SVSubst := list_to_set (svar_fresh_seq (free_svars (pcPattern C) ∪ free_svars p ∪ free_svars q) (maximal_mu_depth_of_evar_in_pattern (pcEvar C) (pcPattern C))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern (pcEvar C) (pcPattern C)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' (free_evars (pcPattern C) ∪ free_evars p ∪ free_evars q ∪ {[ pcEvar C]}) (free_svars (pcPattern C) ∪ free_svars p ∪ free_svars q) (pcEvar C) (pcPattern C) p q wfC wfp wfq)) gpi
wfa: well_formed a = true
wfl: foldr andb true (map well_formed l) = true
Himp: Γ ⊢i p <---> q using gpi
IHl: Γ ⊢i foldr patt_imp (C [p]) l <---> foldr patt_imp (C [q]) l using gpi
wfal: wf (a :: l)
Hwf1: well_formed (foldr patt_imp (C [p]) l <---> foldr patt_imp (C [q]) l)
Hwf2: well_formed (p <---> q)
H: well_formed (C [p])
H0: well_formed (C [q])

Γ Ⱶ "0" ∶ a ---> foldr patt_imp (C [q]) l, "1" ∶ a, -------------------------------------- foldr patt_imp (C [p]) l using gpi
Σ: Signature
Γ: Theory
p, q: Pattern
C: PatternCtx
a: Pattern
l: list Pattern
wfp: well_formed p
wfq: well_formed q
wfC: PC_wf C
gpi: ProofInfo
pile: ProofInfoLe (ExGen := list_to_set (evar_fresh_seq (free_evars (pcPattern C) ∪ free_evars p ∪ free_evars q ∪ {[ pcEvar C]}) (maximal_exists_depth_of_evar_in_pattern (pcEvar C) (pcPattern C))), SVSubst := list_to_set (svar_fresh_seq (free_svars (pcPattern C) ∪ free_svars p ∪ free_svars q) (maximal_mu_depth_of_evar_in_pattern (pcEvar C) (pcPattern C))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern (pcEvar C) (pcPattern C)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' (free_evars (pcPattern C) ∪ free_evars p ∪ free_evars q ∪ {[ pcEvar C]}) (free_svars (pcPattern C) ∪ free_svars p ∪ free_svars q) (pcEvar C) (pcPattern C) p q wfC wfp wfq)) gpi
wfa: well_formed a = true
wfl: foldr andb true (map well_formed l) = true
Himp: Γ ⊢i p <---> q using gpi
IHl: Γ ⊢i foldr patt_imp (C [p]) l <---> foldr patt_imp (C [q]) l using gpi
wfal: wf (a :: l)
Hwf1: well_formed (foldr patt_imp (C [p]) l <---> foldr patt_imp (C [q]) l)
Hwf2: well_formed (p <---> q)
H: well_formed (C [p])
H0: well_formed (C [q])

well_formed (foldr patt_imp (C [q]) l)
Σ: Signature
Γ: Theory
p, q: Pattern
C: PatternCtx
a: Pattern
l: list Pattern
wfp: well_formed p
wfq: well_formed q
wfC: PC_wf C
gpi: ProofInfo
pile: ProofInfoLe (ExGen := list_to_set (evar_fresh_seq (free_evars (pcPattern C) ∪ free_evars p ∪ free_evars q ∪ {[ pcEvar C]}) (maximal_exists_depth_of_evar_in_pattern (pcEvar C) (pcPattern C))), SVSubst := list_to_set (svar_fresh_seq (free_svars (pcPattern C) ∪ free_svars p ∪ free_svars q) (maximal_mu_depth_of_evar_in_pattern (pcEvar C) (pcPattern C))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern (pcEvar C) (pcPattern C)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' (free_evars (pcPattern C) ∪ free_evars p ∪ free_evars q ∪ {[ pcEvar C]}) (free_svars (pcPattern C) ∪ free_svars p ∪ free_svars q) (pcEvar C) (pcPattern C) p q wfC wfp wfq)) gpi
wfa: well_formed a = true
wfl: foldr andb true (map well_formed l) = true
Himp: Γ ⊢i p <---> q using gpi
IHl: Γ ⊢i foldr patt_imp (C [p]) l <---> foldr patt_imp (C [q]) l using gpi
wfal: wf (a :: l)
Hwf1: well_formed (foldr patt_imp (C [p]) l <---> foldr patt_imp (C [q]) l)
Hwf2: well_formed (p <---> q)
H: well_formed (C [p])
H0: well_formed (C [q])
Hwf: well_formed (foldr patt_imp (C [q]) l)
Γ Ⱶ "0" ∶ a ---> foldr patt_imp (C [q]) l, "1" ∶ a, -------------------------------------- foldr patt_imp (C [q]) l using gpi
Σ: Signature
Γ: Theory
p, q: Pattern
C: PatternCtx
a: Pattern
l: list Pattern
wfp: well_formed p
wfq: well_formed q
wfC: PC_wf C
gpi: ProofInfo
pile: ProofInfoLe (ExGen := list_to_set (evar_fresh_seq (free_evars (pcPattern C) ∪ free_evars p ∪ free_evars q ∪ {[ pcEvar C]}) (maximal_exists_depth_of_evar_in_pattern (pcEvar C) (pcPattern C))), SVSubst := list_to_set (svar_fresh_seq (free_svars (pcPattern C) ∪ free_svars p ∪ free_svars q) (maximal_mu_depth_of_evar_in_pattern (pcEvar C) (pcPattern C))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern (pcEvar C) (pcPattern C)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' (free_evars (pcPattern C) ∪ free_evars p ∪ free_evars q ∪ {[ pcEvar C]}) (free_svars (pcPattern C) ∪ free_svars p ∪ free_svars q) (pcEvar C) (pcPattern C) p q wfC wfp wfq)) gpi
wfa: well_formed a = true
wfl: foldr andb true (map well_formed l) = true
Himp: Γ ⊢i p <---> q using gpi
IHl: Γ ⊢i foldr patt_imp (C [p]) l <---> foldr patt_imp (C [q]) l using gpi
wfal: wf (a :: l)
Hwf1: well_formed (foldr patt_imp (C [p]) l <---> foldr patt_imp (C [q]) l)
Hwf2: well_formed (p <---> q)
H: well_formed (C [p])
H0: well_formed (C [q])
Hwf: well_formed (foldr patt_imp (C [q]) l)
Γ Ⱶ "0" ∶ a ---> foldr patt_imp (C [q]) l, "1" ∶ a, "2" ∶ foldr patt_imp (C [q]) l, -------------------------------------- foldr patt_imp (C [p]) l using gpi
Σ: Signature
Γ: Theory
p, q: Pattern
C: PatternCtx
a: Pattern
l: list Pattern
wfp: well_formed p
wfq: well_formed q
wfC: PC_wf C
gpi: ProofInfo
pile: ProofInfoLe (ExGen := list_to_set (evar_fresh_seq (free_evars (pcPattern C) ∪ free_evars p ∪ free_evars q ∪ {[ pcEvar C]}) (maximal_exists_depth_of_evar_in_pattern (pcEvar C) (pcPattern C))), SVSubst := list_to_set (svar_fresh_seq (free_svars (pcPattern C) ∪ free_svars p ∪ free_svars q) (maximal_mu_depth_of_evar_in_pattern (pcEvar C) (pcPattern C))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern (pcEvar C) (pcPattern C)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' (free_evars (pcPattern C) ∪ free_evars p ∪ free_evars q ∪ {[ pcEvar C]}) (free_svars (pcPattern C) ∪ free_svars p ∪ free_svars q) (pcEvar C) (pcPattern C) p q wfC wfp wfq)) gpi
wfa: well_formed a = true
wfl: foldr andb true (map well_formed l) = true
Himp: Γ ⊢i p <---> q using gpi
IHl: Γ ⊢i foldr patt_imp (C [p]) l <---> foldr patt_imp (C [q]) l using gpi
wfal: wf (a :: l)
Hwf1: well_formed (foldr patt_imp (C [p]) l <---> foldr patt_imp (C [q]) l)
Hwf2: well_formed (p <---> q)
H: well_formed (C [p])
H0: well_formed (C [q])

well_formed (foldr patt_imp (C [q]) l)
wf_auto2.
Σ: Signature
Γ: Theory
p, q: Pattern
C: PatternCtx
a: Pattern
l: list Pattern
wfp: well_formed p
wfq: well_formed q
wfC: PC_wf C
gpi: ProofInfo
pile: ProofInfoLe (ExGen := list_to_set (evar_fresh_seq (free_evars (pcPattern C) ∪ free_evars p ∪ free_evars q ∪ {[ pcEvar C]}) (maximal_exists_depth_of_evar_in_pattern (pcEvar C) (pcPattern C))), SVSubst := list_to_set (svar_fresh_seq (free_svars (pcPattern C) ∪ free_svars p ∪ free_svars q) (maximal_mu_depth_of_evar_in_pattern (pcEvar C) (pcPattern C))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern (pcEvar C) (pcPattern C)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' (free_evars (pcPattern C) ∪ free_evars p ∪ free_evars q ∪ {[ pcEvar C]}) (free_svars (pcPattern C) ∪ free_svars p ∪ free_svars q) (pcEvar C) (pcPattern C) p q wfC wfp wfq)) gpi
wfa: well_formed a = true
wfl: foldr andb true (map well_formed l) = true
Himp: Γ ⊢i p <---> q using gpi
IHl: Γ ⊢i foldr patt_imp (C [p]) l <---> foldr patt_imp (C [q]) l using gpi
wfal: wf (a :: l)
Hwf1: well_formed (foldr patt_imp (C [p]) l <---> foldr patt_imp (C [q]) l)
Hwf2: well_formed (p <---> q)
H: well_formed (C [p])
H0: well_formed (C [q])
Hwf: well_formed (foldr patt_imp (C [q]) l)

Γ Ⱶ "0" ∶ a ---> foldr patt_imp (C [q]) l, "1" ∶ a, -------------------------------------- foldr patt_imp (C [q]) l using gpi
Σ: Signature
Γ: Theory
p, q: Pattern
C: PatternCtx
a: Pattern
l: list Pattern
wfp: well_formed p
wfq: well_formed q
wfC: PC_wf C
gpi: ProofInfo
pile: ProofInfoLe (ExGen := list_to_set (evar_fresh_seq (free_evars (pcPattern C) ∪ free_evars p ∪ free_evars q ∪ {[ pcEvar C]}) (maximal_exists_depth_of_evar_in_pattern (pcEvar C) (pcPattern C))), SVSubst := list_to_set (svar_fresh_seq (free_svars (pcPattern C) ∪ free_svars p ∪ free_svars q) (maximal_mu_depth_of_evar_in_pattern (pcEvar C) (pcPattern C))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern (pcEvar C) (pcPattern C)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' (free_evars (pcPattern C) ∪ free_evars p ∪ free_evars q ∪ {[ pcEvar C]}) (free_svars (pcPattern C) ∪ free_svars p ∪ free_svars q) (pcEvar C) (pcPattern C) p q wfC wfp wfq)) gpi
wfa: well_formed a = true
wfl: foldr andb true (map well_formed l) = true
Himp: Γ ⊢i p <---> q using gpi
IHl: Γ ⊢i foldr patt_imp (C [p]) l <---> foldr patt_imp (C [q]) l using gpi
wfal: wf (a :: l)
Hwf1: well_formed (foldr patt_imp (C [p]) l <---> foldr patt_imp (C [q]) l)
Hwf2: well_formed (p <---> q)
H: well_formed (C [p])
H0: well_formed (C [q])
Hwf: well_formed (foldr patt_imp (C [q]) l)
Γ Ⱶ "0" ∶ a ---> foldr patt_imp (C [q]) l, "1" ∶ a, "2" ∶ foldr patt_imp (C [q]) l, -------------------------------------- foldr patt_imp (C [p]) l using gpi
Σ: Signature
Γ: Theory
p, q: Pattern
C: PatternCtx
a: Pattern
l: list Pattern
wfp: well_formed p
wfq: well_formed q
wfC: PC_wf C
gpi: ProofInfo
pile: ProofInfoLe (ExGen := list_to_set (evar_fresh_seq (free_evars (pcPattern C) ∪ free_evars p ∪ free_evars q ∪ {[ pcEvar C]}) (maximal_exists_depth_of_evar_in_pattern (pcEvar C) (pcPattern C))), SVSubst := list_to_set (svar_fresh_seq (free_svars (pcPattern C) ∪ free_svars p ∪ free_svars q) (maximal_mu_depth_of_evar_in_pattern (pcEvar C) (pcPattern C))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern (pcEvar C) (pcPattern C)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' (free_evars (pcPattern C) ∪ free_evars p ∪ free_evars q ∪ {[ pcEvar C]}) (free_svars (pcPattern C) ∪ free_svars p ∪ free_svars q) (pcEvar C) (pcPattern C) p q wfC wfp wfq)) gpi
wfa: well_formed a = true
wfl: foldr andb true (map well_formed l) = true
Himp: Γ ⊢i p <---> q using gpi
IHl: Γ ⊢i foldr patt_imp (C [p]) l <---> foldr patt_imp (C [q]) l using gpi
wfal: wf (a :: l)
Hwf1: well_formed (foldr patt_imp (C [p]) l <---> foldr patt_imp (C [q]) l)
Hwf2: well_formed (p <---> q)
H: well_formed (C [p])
H0: well_formed (C [q])
Hwf: well_formed (foldr patt_imp (C [q]) l)

Γ Ⱶ "0" ∶ a ---> foldr patt_imp (C [q]) l, "1" ∶ a, -------------------------------------- foldr patt_imp (C [q]) l using gpi
Σ: Signature
Γ: Theory
p, q: Pattern
C: PatternCtx
a: Pattern
l: list Pattern
wfp: well_formed p
wfq: well_formed q
wfC: PC_wf C
gpi: ProofInfo
pile: ProofInfoLe (ExGen := list_to_set (evar_fresh_seq (free_evars (pcPattern C) ∪ free_evars p ∪ free_evars q ∪ {[ pcEvar C]}) (maximal_exists_depth_of_evar_in_pattern (pcEvar C) (pcPattern C))), SVSubst := list_to_set (svar_fresh_seq (free_svars (pcPattern C) ∪ free_svars p ∪ free_svars q) (maximal_mu_depth_of_evar_in_pattern (pcEvar C) (pcPattern C))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern (pcEvar C) (pcPattern C)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' (free_evars (pcPattern C) ∪ free_evars p ∪ free_evars q ∪ {[ pcEvar C]}) (free_svars (pcPattern C) ∪ free_svars p ∪ free_svars q) (pcEvar C) (pcPattern C) p q wfC wfp wfq)) gpi
wfa: well_formed a = true
wfl: foldr andb true (map well_formed l) = true
Himp: Γ ⊢i p <---> q using gpi
IHl: Γ ⊢i foldr patt_imp (C [p]) l <---> foldr patt_imp (C [q]) l using gpi
wfal: wf (a :: l)
Hwf1: well_formed (foldr patt_imp (C [p]) l <---> foldr patt_imp (C [q]) l)
Hwf2: well_formed (p <---> q)
H: well_formed (C [p])
H0: well_formed (C [q])
Hwf: well_formed (foldr patt_imp (C [q]) l)

Γ Ⱶ "0" ∶ a ---> foldr patt_imp (C [q]) l, "1" ∶ a, -------------------------------------- a using gpi
mlExactn 1.
Σ: Signature
Γ: Theory
p, q: Pattern
C: PatternCtx
a: Pattern
l: list Pattern
wfp: well_formed p
wfq: well_formed q
wfC: PC_wf C
gpi: ProofInfo
pile: ProofInfoLe (ExGen := list_to_set (evar_fresh_seq (free_evars (pcPattern C) ∪ free_evars p ∪ free_evars q ∪ {[ pcEvar C]}) (maximal_exists_depth_of_evar_in_pattern (pcEvar C) (pcPattern C))), SVSubst := list_to_set (svar_fresh_seq (free_svars (pcPattern C) ∪ free_svars p ∪ free_svars q) (maximal_mu_depth_of_evar_in_pattern (pcEvar C) (pcPattern C))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern (pcEvar C) (pcPattern C)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' (free_evars (pcPattern C) ∪ free_evars p ∪ free_evars q ∪ {[ pcEvar C]}) (free_svars (pcPattern C) ∪ free_svars p ∪ free_svars q) (pcEvar C) (pcPattern C) p q wfC wfp wfq)) gpi
wfa: well_formed a = true
wfl: foldr andb true (map well_formed l) = true
Himp: Γ ⊢i p <---> q using gpi
IHl: Γ ⊢i foldr patt_imp (C [p]) l <---> foldr patt_imp (C [q]) l using gpi
wfal: wf (a :: l)
Hwf1: well_formed (foldr patt_imp (C [p]) l <---> foldr patt_imp (C [q]) l)
Hwf2: well_formed (p <---> q)
H: well_formed (C [p])
H0: well_formed (C [q])
Hwf: well_formed (foldr patt_imp (C [q]) l)

Γ Ⱶ "0" ∶ a ---> foldr patt_imp (C [q]) l, "1" ∶ a, "2" ∶ foldr patt_imp (C [q]) l, -------------------------------------- foldr patt_imp (C [p]) l using gpi
Σ: Signature
Γ: Theory
p, q: Pattern
C: PatternCtx
a: Pattern
l: list Pattern
wfp: well_formed p
wfq: well_formed q
wfC: PC_wf C
gpi: ProofInfo
pile: ProofInfoLe (ExGen := list_to_set (evar_fresh_seq (free_evars (pcPattern C) ∪ free_evars p ∪ free_evars q ∪ {[ pcEvar C]}) (maximal_exists_depth_of_evar_in_pattern (pcEvar C) (pcPattern C))), SVSubst := list_to_set (svar_fresh_seq (free_svars (pcPattern C) ∪ free_svars p ∪ free_svars q) (maximal_mu_depth_of_evar_in_pattern (pcEvar C) (pcPattern C))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern (pcEvar C) (pcPattern C)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' (free_evars (pcPattern C) ∪ free_evars p ∪ free_evars q ∪ {[ pcEvar C]}) (free_svars (pcPattern C) ∪ free_svars p ∪ free_svars q) (pcEvar C) (pcPattern C) p q wfC wfp wfq)) gpi
wfa: well_formed a = true
wfl: foldr andb true (map well_formed l) = true
Himp: Γ ⊢i p <---> q using gpi
IHl: Γ ⊢i foldr patt_imp (C [q]) l ---> foldr patt_imp (C [p]) l using gpi
wfal: wf (a :: l)
Hwf1: well_formed (foldr patt_imp (C [p]) l <---> foldr patt_imp (C [q]) l)
Hwf2: well_formed (p <---> q)
H: well_formed (C [p])
H0: well_formed (C [q])
Hwf: well_formed (foldr patt_imp (C [q]) l)

Γ Ⱶ "0" ∶ a ---> foldr patt_imp (C [q]) l, "1" ∶ a, "2" ∶ foldr patt_imp (C [q]) l, -------------------------------------- foldr patt_imp (C [p]) l using gpi
Σ: Signature
Γ: Theory
p, q: Pattern
C: PatternCtx
a: Pattern
l: list Pattern
wfp: well_formed p
wfq: well_formed q
wfC: PC_wf C
gpi: ProofInfo
pile: ProofInfoLe (ExGen := list_to_set (evar_fresh_seq (free_evars (pcPattern C) ∪ free_evars p ∪ free_evars q ∪ {[ pcEvar C]}) (maximal_exists_depth_of_evar_in_pattern (pcEvar C) (pcPattern C))), SVSubst := list_to_set (svar_fresh_seq (free_svars (pcPattern C) ∪ free_svars p ∪ free_svars q) (maximal_mu_depth_of_evar_in_pattern (pcEvar C) (pcPattern C))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern (pcEvar C) (pcPattern C)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' (free_evars (pcPattern C) ∪ free_evars p ∪ free_evars q ∪ {[ pcEvar C]}) (free_svars (pcPattern C) ∪ free_svars p ∪ free_svars q) (pcEvar C) (pcPattern C) p q wfC wfp wfq)) gpi
wfa: well_formed a = true
wfl: foldr andb true (map well_formed l) = true
Himp: Γ ⊢i p <---> q using gpi
IHl: Γ ⊢i foldr patt_imp (C [p]) l <---> foldr patt_imp (C [q]) l using gpi
wfal: wf (a :: l)
Hwf1: well_formed (foldr patt_imp (C [p]) l <---> foldr patt_imp (C [q]) l)
Hwf2: well_formed (p <---> q)
H: well_formed (C [p])
H0: well_formed (C [q])
Hwf: well_formed (foldr patt_imp (C [q]) l)
well_formed (foldr patt_imp (C [p]) l)
Σ: Signature
Γ: Theory
p, q: Pattern
C: PatternCtx
a: Pattern
l: list Pattern
wfp: well_formed p
wfq: well_formed q
wfC: PC_wf C
gpi: ProofInfo
pile: ProofInfoLe (ExGen := list_to_set (evar_fresh_seq (free_evars (pcPattern C) ∪ free_evars p ∪ free_evars q ∪ {[ pcEvar C]}) (maximal_exists_depth_of_evar_in_pattern (pcEvar C) (pcPattern C))), SVSubst := list_to_set (svar_fresh_seq (free_svars (pcPattern C) ∪ free_svars p ∪ free_svars q) (maximal_mu_depth_of_evar_in_pattern (pcEvar C) (pcPattern C))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern (pcEvar C) (pcPattern C)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' (free_evars (pcPattern C) ∪ free_evars p ∪ free_evars q ∪ {[ pcEvar C]}) (free_svars (pcPattern C) ∪ free_svars p ∪ free_svars q) (pcEvar C) (pcPattern C) p q wfC wfp wfq)) gpi
wfa: well_formed a = true
wfl: foldr andb true (map well_formed l) = true
Himp: Γ ⊢i p <---> q using gpi
IHl: Γ ⊢i foldr patt_imp (C [p]) l <---> foldr patt_imp (C [q]) l using gpi
wfal: wf (a :: l)
Hwf1: well_formed (foldr patt_imp (C [p]) l <---> foldr patt_imp (C [q]) l)
Hwf2: well_formed (p <---> q)
H: well_formed (C [p])
H0: well_formed (C [q])
Hwf: well_formed (foldr patt_imp (C [q]) l)
well_formed (foldr patt_imp (C [q]) l)
Σ: Signature
Γ: Theory
p, q: Pattern
C: PatternCtx
a: Pattern
l: list Pattern
wfp: well_formed p
wfq: well_formed q
wfC: PC_wf C
gpi: ProofInfo
pile: ProofInfoLe (ExGen := list_to_set (evar_fresh_seq (free_evars (pcPattern C) ∪ free_evars p ∪ free_evars q ∪ {[ pcEvar C]}) (maximal_exists_depth_of_evar_in_pattern (pcEvar C) (pcPattern C))), SVSubst := list_to_set (svar_fresh_seq (free_svars (pcPattern C) ∪ free_svars p ∪ free_svars q) (maximal_mu_depth_of_evar_in_pattern (pcEvar C) (pcPattern C))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern (pcEvar C) (pcPattern C)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' (free_evars (pcPattern C) ∪ free_evars p ∪ free_evars q ∪ {[ pcEvar C]}) (free_svars (pcPattern C) ∪ free_svars p ∪ free_svars q) (pcEvar C) (pcPattern C) p q wfC wfp wfq)) gpi
wfa: well_formed a = true
wfl: foldr andb true (map well_formed l) = true
Himp: Γ ⊢i p <---> q using gpi
IHl: Γ ⊢i foldr patt_imp (C [q]) l ---> foldr patt_imp (C [p]) l using gpi
wfal: wf (a :: l)
Hwf1: well_formed (foldr patt_imp (C [p]) l <---> foldr patt_imp (C [q]) l)
Hwf2: well_formed (p <---> q)
H: well_formed (C [p])
H0: well_formed (C [q])
Hwf: well_formed (foldr patt_imp (C [q]) l)

Γ Ⱶ "0" ∶ a ---> foldr patt_imp (C [q]) l, "1" ∶ a, "2" ∶ foldr patt_imp (C [q]) l, -------------------------------------- foldr patt_imp (C [p]) l using gpi
Σ: Signature
Γ: Theory
p, q: Pattern
C: PatternCtx
a: Pattern
l: list Pattern
wfp: well_formed p
wfq: well_formed q
wfC: PC_wf C
gpi: ProofInfo
pile: ProofInfoLe (ExGen := list_to_set (evar_fresh_seq (free_evars (pcPattern C) ∪ free_evars p ∪ free_evars q ∪ {[ pcEvar C]}) (maximal_exists_depth_of_evar_in_pattern (pcEvar C) (pcPattern C))), SVSubst := list_to_set (svar_fresh_seq (free_svars (pcPattern C) ∪ free_svars p ∪ free_svars q) (maximal_mu_depth_of_evar_in_pattern (pcEvar C) (pcPattern C))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern (pcEvar C) (pcPattern C)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' (free_evars (pcPattern C) ∪ free_evars p ∪ free_evars q ∪ {[ pcEvar C]}) (free_svars (pcPattern C) ∪ free_svars p ∪ free_svars q) (pcEvar C) (pcPattern C) p q wfC wfp wfq)) gpi
wfa: well_formed a = true
wfl: foldr andb true (map well_formed l) = true
Himp: Γ ⊢i p <---> q using gpi
IHl: Γ ⊢i foldr patt_imp (C [q]) l ---> foldr patt_imp (C [p]) l using gpi
wfal: wf (a :: l)
Hwf1: well_formed (foldr patt_imp (C [p]) l <---> foldr patt_imp (C [q]) l)
Hwf2: well_formed (p <---> q)
H: well_formed (C [p])
H0: well_formed (C [q])
Hwf: well_formed (foldr patt_imp (C [q]) l)

Γ Ⱶ "0" ∶ a ---> foldr patt_imp (C [q]) l, "1" ∶ a, "2" ∶ foldr patt_imp (C [q]) l, -------------------------------------- foldr patt_imp (C [q]) l using gpi
mlExactn 2. Defined.
Σ: Signature
Γ: Theory
p, q: Pattern
i: ProofInfo

Γ ⊢i p <---> q using i → well_formed p
Σ: Signature
Γ: Theory
p, q: Pattern
i: ProofInfo

Γ ⊢i p <---> q using i → well_formed p
Σ: Signature
Γ: Theory
p, q: Pattern
i: ProofInfo
H: Γ ⊢i p <---> q using i

well_formed p
Σ: Signature
Γ: Theory
p, q: Pattern
i: ProofInfo
H: Γ ⊢i p <---> q using i
H': ML_proof_system Γ (p <---> q)

well_formed p
Σ: Signature
Γ: Theory
p, q: Pattern
i: ProofInfo
H: Γ ⊢i p <---> q using i
H': well_formed (p <---> q)

well_formed p
wf_auto2. Qed.
Σ: Signature
Γ: Theory
p, q: Pattern
i: ProofInfo

Γ ⊢i p <---> q using i → well_formed q
Σ: Signature
Γ: Theory
p, q: Pattern
i: ProofInfo

Γ ⊢i p <---> q using i → well_formed q
Σ: Signature
Γ: Theory
p, q: Pattern
i: ProofInfo
H: Γ ⊢i p <---> q using i

well_formed q
Σ: Signature
Γ: Theory
p, q: Pattern
i: ProofInfo
H: Γ ⊢i p <---> q using i
H': ML_proof_system Γ (p <---> q)

well_formed q
Σ: Signature
Γ: Theory
p, q: Pattern
i: ProofInfo
H: Γ ⊢i p <---> q using i
H': well_formed (p <---> q)

well_formed q
wf_auto2. Qed.
Σ: Signature
Γ: Theory
p, q: Pattern
C: PatternCtx
l: hypotheses
gpi: ProofInfo
wfC: PC_wf C
pf: Γ ⊢i p <---> q using gpi

Γ Ⱶ l-------------------------------------- C [q] using gpi → ProofInfoLe (ExGen := list_to_set (evar_fresh_seq (free_evars (pcPattern C) ∪ free_evars p ∪ free_evars q ∪ {[pcEvar C]}) (maximal_exists_depth_of_evar_in_pattern (pcEvar C) (pcPattern C))), SVSubst := list_to_set (svar_fresh_seq (free_svars (pcPattern C) ∪ free_svars p ∪ free_svars q) (maximal_mu_depth_of_evar_in_pattern (pcEvar C) (pcPattern C))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern (pcEvar C) (pcPattern C)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' (free_evars (pcPattern C) ∪ free_evars p ∪ free_evars q ∪ {[pcEvar C]}) (free_svars (pcPattern C) ∪ free_svars p ∪ free_svars q) (pcEvar C) (pcPattern C) p q wfC (extract_wfp Γ p q gpi pf) (extract_wfq Γ p q gpi pf))) gpi → Γ Ⱶ l-------------------------------------- C [p] using gpi
Σ: Signature
Γ: Theory
p, q: Pattern
C: PatternCtx
l: hypotheses
gpi: ProofInfo
wfC: PC_wf C
pf: Γ ⊢i p <---> q using gpi

Γ Ⱶ l-------------------------------------- C [q] using gpi → ProofInfoLe (ExGen := list_to_set (evar_fresh_seq (free_evars (pcPattern C) ∪ free_evars p ∪ free_evars q ∪ {[pcEvar C]}) (maximal_exists_depth_of_evar_in_pattern (pcEvar C) (pcPattern C))), SVSubst := list_to_set (svar_fresh_seq (free_svars (pcPattern C) ∪ free_svars p ∪ free_svars q) (maximal_mu_depth_of_evar_in_pattern (pcEvar C) (pcPattern C))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern (pcEvar C) (pcPattern C)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' (free_evars (pcPattern C) ∪ free_evars p ∪ free_evars q ∪ {[pcEvar C]}) (free_svars (pcPattern C) ∪ free_svars p ∪ free_svars q) (pcEvar C) (pcPattern C) p q wfC (extract_wfp Γ p q gpi pf) (extract_wfq Γ p q gpi pf))) gpi → Γ Ⱶ l-------------------------------------- C [p] using gpi
Σ: Signature
Γ: Theory
p, q: Pattern
C: PatternCtx
l: hypotheses
gpi: ProofInfo
wfC: PC_wf C
Hpiffq: Γ ⊢i p <---> q using gpi

Γ Ⱶ l-------------------------------------- C [q] using gpi → ProofInfoLe (ExGen := list_to_set (evar_fresh_seq (free_evars (pcPattern C) ∪ free_evars p ∪ free_evars q ∪ {[pcEvar C]}) (maximal_exists_depth_of_evar_in_pattern (pcEvar C) (pcPattern C))), SVSubst := list_to_set (svar_fresh_seq (free_svars (pcPattern C) ∪ free_svars p ∪ free_svars q) (maximal_mu_depth_of_evar_in_pattern (pcEvar C) (pcPattern C))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern (pcEvar C) (pcPattern C)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' (free_evars (pcPattern C) ∪ free_evars p ∪ free_evars q ∪ {[pcEvar C]}) (free_svars (pcPattern C) ∪ free_svars p ∪ free_svars q) (pcEvar C) (pcPattern C) p q wfC (extract_wfp Γ p q gpi Hpiffq) (extract_wfq Γ p q gpi Hpiffq))) gpi → Γ Ⱶ l-------------------------------------- C [p] using gpi
Σ: Signature
Γ: Theory
p, q: Pattern
C: PatternCtx
l: hypotheses
gpi: ProofInfo
wfC: PC_wf C
Hpiffq: Γ ⊢i p <---> q using gpi
H: Γ Ⱶ l-------------------------------------- C [q] using gpi
pile: ProofInfoLe (ExGen := list_to_set (evar_fresh_seq (free_evars (pcPattern C) ∪ free_evars p ∪ free_evars q ∪ {[ pcEvar C]}) (maximal_exists_depth_of_evar_in_pattern (pcEvar C) (pcPattern C))), SVSubst := list_to_set (svar_fresh_seq (free_svars (pcPattern C) ∪ free_svars p ∪ free_svars q) (maximal_mu_depth_of_evar_in_pattern (pcEvar C) (pcPattern C))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern (pcEvar C) (pcPattern C)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' (free_evars (pcPattern C) ∪ free_evars p ∪ free_evars q ∪ {[ pcEvar C]}) (free_svars (pcPattern C) ∪ free_svars p ∪ free_svars q) (pcEvar C) (pcPattern C) p q wfC (extract_wfp Γ p q gpi Hpiffq) (extract_wfq Γ p q gpi Hpiffq))) gpi

Γ Ⱶ l-------------------------------------- C [p] using gpi
Σ: Signature
Γ: Theory
p, q: Pattern
C: PatternCtx
l: hypotheses
gpi: ProofInfo
wfC: PC_wf C
Hpiffq: Γ ⊢i p <---> q using gpi
H: well_formed (mlConclusion (Γ Ⱶ l-------------------------------------- C [q] using gpi )) → wf (patterns_of (mlHypotheses (Γ Ⱶ l-------------------------------------- C [q] using gpi ))) → mlTheory (Γ Ⱶ l-------------------------------------- C [q] using gpi ) ⊢i foldr patt_imp (mlConclusion (Γ Ⱶ l-------------------------------------- C [q] using gpi )) (patterns_of (mlHypotheses (Γ Ⱶ l-------------------------------------- C [q] using gpi ))) using mlInfo (Γ Ⱶ l-------------------------------------- C [q] using gpi )
pile: ProofInfoLe (ExGen := list_to_set (evar_fresh_seq (free_evars (pcPattern C) ∪ free_evars p ∪ free_evars q ∪ {[ pcEvar C]}) (maximal_exists_depth_of_evar_in_pattern (pcEvar C) (pcPattern C))), SVSubst := list_to_set (svar_fresh_seq (free_svars (pcPattern C) ∪ free_svars p ∪ free_svars q) (maximal_mu_depth_of_evar_in_pattern (pcEvar C) (pcPattern C))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern (pcEvar C) (pcPattern C)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' (free_evars (pcPattern C) ∪ free_evars p ∪ free_evars q ∪ {[ pcEvar C]}) (free_svars (pcPattern C) ∪ free_svars p ∪ free_svars q) (pcEvar C) (pcPattern C) p q wfC (extract_wfp Γ p q gpi Hpiffq) (extract_wfq Γ p q gpi Hpiffq))) gpi

well_formed (mlConclusion (Γ Ⱶ l-------------------------------------- C [p] using gpi )) → wf (patterns_of (mlHypotheses (Γ Ⱶ l-------------------------------------- C [p] using gpi ))) → mlTheory (Γ Ⱶ l-------------------------------------- C [p] using gpi ) ⊢i foldr patt_imp (mlConclusion (Γ Ⱶ l-------------------------------------- C [p] using gpi )) (patterns_of (mlHypotheses (Γ Ⱶ l-------------------------------------- C [p] using gpi ))) using mlInfo (Γ Ⱶ l-------------------------------------- C [p] using gpi )
Σ: Signature
Γ: Theory
p, q: Pattern
C: PatternCtx
l: hypotheses
gpi: ProofInfo
wfC: PC_wf C
Hpiffq: Γ ⊢i p <---> q using gpi
H: well_formed (C [q]) → wf (patterns_of l) → Γ ⊢i foldr patt_imp (C [q]) (patterns_of l) using gpi
pile: ProofInfoLe (ExGen := list_to_set (evar_fresh_seq (free_evars (pcPattern C) ∪ free_evars p ∪ free_evars q ∪ {[ pcEvar C]}) (maximal_exists_depth_of_evar_in_pattern (pcEvar C) (pcPattern C))), SVSubst := list_to_set (svar_fresh_seq (free_svars (pcPattern C) ∪ free_svars p ∪ free_svars q) (maximal_mu_depth_of_evar_in_pattern (pcEvar C) (pcPattern C))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern (pcEvar C) (pcPattern C)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' (free_evars (pcPattern C) ∪ free_evars p ∪ free_evars q ∪ {[ pcEvar C]}) (free_svars (pcPattern C) ∪ free_svars p ∪ free_svars q) (pcEvar C) (pcPattern C) p q wfC (extract_wfp Γ p q gpi Hpiffq) (extract_wfq Γ p q gpi Hpiffq))) gpi

well_formed (C [p]) → wf (patterns_of l) → Γ ⊢i foldr patt_imp (C [p]) (patterns_of l) using gpi
Σ: Signature
Γ: Theory
p, q: Pattern
C: PatternCtx
l: hypotheses
gpi: ProofInfo
wfC: PC_wf C
Hpiffq: Γ ⊢i p <---> q using gpi
H: well_formed (C [q]) → wf (patterns_of l) → Γ ⊢i foldr patt_imp (C [q]) (patterns_of l) using gpi
pile: ProofInfoLe (ExGen := list_to_set (evar_fresh_seq (free_evars (pcPattern C) ∪ free_evars p ∪ free_evars q ∪ {[ pcEvar C]}) (maximal_exists_depth_of_evar_in_pattern (pcEvar C) (pcPattern C))), SVSubst := list_to_set (svar_fresh_seq (free_svars (pcPattern C) ∪ free_svars p ∪ free_svars q) (maximal_mu_depth_of_evar_in_pattern (pcEvar C) (pcPattern C))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern (pcEvar C) (pcPattern C)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' (free_evars (pcPattern C) ∪ free_evars p ∪ free_evars q ∪ {[ pcEvar C]}) (free_svars (pcPattern C) ∪ free_svars p ∪ free_svars q) (pcEvar C) (pcPattern C) p q wfC (extract_wfp Γ p q gpi Hpiffq) (extract_wfq Γ p q gpi Hpiffq))) gpi
wfcp: well_formed (C [p])
wfl: wf (patterns_of l)

Γ ⊢i foldr patt_imp (C [p]) (patterns_of l) using gpi
Σ: Signature
Γ: Theory
p, q: Pattern
C: PatternCtx
l: hypotheses
gpi: ProofInfo
wfC: PC_wf C
Hpiffq: Γ ⊢i p <---> q using gpi
H: well_formed (C [q]) → wf (patterns_of l) → Γ ⊢i foldr patt_imp (C [q]) (patterns_of l) using gpi
pile: ProofInfoLe (ExGen := list_to_set (evar_fresh_seq (free_evars (pcPattern C) ∪ free_evars p ∪ free_evars q ∪ {[ pcEvar C]}) (maximal_exists_depth_of_evar_in_pattern (pcEvar C) (pcPattern C))), SVSubst := list_to_set (svar_fresh_seq (free_svars (pcPattern C) ∪ free_svars p ∪ free_svars q) (maximal_mu_depth_of_evar_in_pattern (pcEvar C) (pcPattern C))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern (pcEvar C) (pcPattern C)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' (free_evars (pcPattern C) ∪ free_evars p ∪ free_evars q ∪ {[ pcEvar C]}) (free_svars (pcPattern C) ∪ free_svars p ∪ free_svars q) (pcEvar C) (pcPattern C) p q wfC (extract_wfp Γ p q gpi Hpiffq) (extract_wfq Γ p q gpi Hpiffq))) gpi
wfcp: well_formed (C [p])
wfl: wf (patterns_of l)

well_formed (C [q])
Σ: Signature
Γ: Theory
p, q: Pattern
C: PatternCtx
l: hypotheses
gpi: ProofInfo
wfC: PC_wf C
Hpiffq: Γ ⊢i p <---> q using gpi
H: well_formed (C [q]) → wf (patterns_of l) → Γ ⊢i foldr patt_imp (C [q]) (patterns_of l) using gpi
pile: ProofInfoLe (ExGen := list_to_set (evar_fresh_seq (free_evars (pcPattern C) ∪ free_evars p ∪ free_evars q ∪ {[ pcEvar C]}) (maximal_exists_depth_of_evar_in_pattern (pcEvar C) (pcPattern C))), SVSubst := list_to_set (svar_fresh_seq (free_svars (pcPattern C) ∪ free_svars p ∪ free_svars q) (maximal_mu_depth_of_evar_in_pattern (pcEvar C) (pcPattern C))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern (pcEvar C) (pcPattern C)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' (free_evars (pcPattern C) ∪ free_evars p ∪ free_evars q ∪ {[ pcEvar C]}) (free_svars (pcPattern C) ∪ free_svars p ∪ free_svars q) (pcEvar C) (pcPattern C) p q wfC (extract_wfp Γ p q gpi Hpiffq) (extract_wfq Γ p q gpi Hpiffq))) gpi
wfcp: well_formed (C [p])
wfl: wf (patterns_of l)
wf (patterns_of l)
Σ: Signature
Γ: Theory
p, q: Pattern
C: PatternCtx
l: hypotheses
gpi: ProofInfo
wfC: PC_wf C
Hpiffq: Γ ⊢i p <---> q using gpi
H: Γ ⊢i foldr patt_imp (C [q]) (patterns_of l) using gpi
pile: ProofInfoLe (ExGen := list_to_set (evar_fresh_seq (free_evars (pcPattern C) ∪ free_evars p ∪ free_evars q ∪ {[ pcEvar C]}) (maximal_exists_depth_of_evar_in_pattern (pcEvar C) (pcPattern C))), SVSubst := list_to_set (svar_fresh_seq (free_svars (pcPattern C) ∪ free_svars p ∪ free_svars q) (maximal_mu_depth_of_evar_in_pattern (pcEvar C) (pcPattern C))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern (pcEvar C) (pcPattern C)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' (free_evars (pcPattern C) ∪ free_evars p ∪ free_evars q ∪ {[ pcEvar C]}) (free_svars (pcPattern C) ∪ free_svars p ∪ free_svars q) (pcEvar C) (pcPattern C) p q wfC (extract_wfp Γ p q gpi Hpiffq) (extract_wfq Γ p q gpi Hpiffq))) gpi
wfcp: well_formed (C [p])
wfl: wf (patterns_of l)
Γ ⊢i foldr patt_imp (C [p]) (patterns_of l) using gpi
Σ: Signature
Γ: Theory
p, q: Pattern
C: PatternCtx
l: hypotheses
gpi: ProofInfo
wfC: PC_wf C
Hpiffq: Γ ⊢i p <---> q using gpi
H: well_formed (C [q]) → wf (patterns_of l) → Γ ⊢i foldr patt_imp (C [q]) (patterns_of l) using gpi
pile: ProofInfoLe (ExGen := list_to_set (evar_fresh_seq (free_evars (pcPattern C) ∪ free_evars p ∪ free_evars q ∪ {[ pcEvar C]}) (maximal_exists_depth_of_evar_in_pattern (pcEvar C) (pcPattern C))), SVSubst := list_to_set (svar_fresh_seq (free_svars (pcPattern C) ∪ free_svars p ∪ free_svars q) (maximal_mu_depth_of_evar_in_pattern (pcEvar C) (pcPattern C))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern (pcEvar C) (pcPattern C)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' (free_evars (pcPattern C) ∪ free_evars p ∪ free_evars q ∪ {[ pcEvar C]}) (free_svars (pcPattern C) ∪ free_svars p ∪ free_svars q) (pcEvar C) (pcPattern C) p q wfC (extract_wfp Γ p q gpi Hpiffq) (extract_wfq Γ p q gpi Hpiffq))) gpi
wfcp: well_formed (C [p])
wfl: wf (patterns_of l)

well_formed (C [q])
abstract ( pose proof (Hwfiff := proved_impl_wf _ _ (proj1_sig Hpiffq)); unfold emplace; apply well_formed_free_evar_subst_0;[wf_auto2|]; fold (PC_wf C); eapply wf_emplaced_impl_wf_context; apply wfcp ).
Σ: Signature
Γ: Theory
p, q: Pattern
C: PatternCtx
l: hypotheses
gpi: ProofInfo
wfC: PC_wf C
Hpiffq: Γ ⊢i p <---> q using gpi
H: well_formed (C [q]) → wf (patterns_of l) → Γ ⊢i foldr patt_imp (C [q]) (patterns_of l) using gpi
pile: ProofInfoLe (ExGen := list_to_set (evar_fresh_seq (free_evars (pcPattern C) ∪ free_evars p ∪ free_evars q ∪ {[ pcEvar C]}) (maximal_exists_depth_of_evar_in_pattern (pcEvar C) (pcPattern C))), SVSubst := list_to_set (svar_fresh_seq (free_svars (pcPattern C) ∪ free_svars p ∪ free_svars q) (maximal_mu_depth_of_evar_in_pattern (pcEvar C) (pcPattern C))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern (pcEvar C) (pcPattern C)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' (free_evars (pcPattern C) ∪ free_evars p ∪ free_evars q ∪ {[ pcEvar C]}) (free_svars (pcPattern C) ∪ free_svars p ∪ free_svars q) (pcEvar C) (pcPattern C) p q wfC (extract_wfp Γ p q gpi Hpiffq) (extract_wfq Γ p q gpi Hpiffq))) gpi
wfcp: well_formed (C [p])
wfl: wf (patterns_of l)

wf (patterns_of l)
Σ: Signature
Γ: Theory
p, q: Pattern
C: PatternCtx
l: hypotheses
gpi: ProofInfo
wfC: PC_wf C
Hpiffq: Γ ⊢i p <---> q using gpi
H: Γ ⊢i foldr patt_imp (C [q]) (patterns_of l) using gpi
pile: ProofInfoLe (ExGen := list_to_set (evar_fresh_seq (free_evars (pcPattern C) ∪ free_evars p ∪ free_evars q ∪ {[ pcEvar C]}) (maximal_exists_depth_of_evar_in_pattern (pcEvar C) (pcPattern C))), SVSubst := list_to_set (svar_fresh_seq (free_svars (pcPattern C) ∪ free_svars p ∪ free_svars q) (maximal_mu_depth_of_evar_in_pattern (pcEvar C) (pcPattern C))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern (pcEvar C) (pcPattern C)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' (free_evars (pcPattern C) ∪ free_evars p ∪ free_evars q ∪ {[ pcEvar C]}) (free_svars (pcPattern C) ∪ free_svars p ∪ free_svars q) (pcEvar C) (pcPattern C) p q wfC (extract_wfp Γ p q gpi Hpiffq) (extract_wfq Γ p q gpi Hpiffq))) gpi
wfcp: well_formed (C [p])
wfl: wf (patterns_of l)
Γ ⊢i foldr patt_imp (C [p]) (patterns_of l) using gpi
Σ: Signature
Γ: Theory
p, q: Pattern
C: PatternCtx
l: hypotheses
gpi: ProofInfo
wfC: PC_wf C
Hpiffq: Γ ⊢i p <---> q using gpi
H: well_formed (C [q]) → wf (patterns_of l) → Γ ⊢i foldr patt_imp (C [q]) (patterns_of l) using gpi
pile: ProofInfoLe (ExGen := list_to_set (evar_fresh_seq (free_evars (pcPattern C) ∪ free_evars p ∪ free_evars q ∪ {[ pcEvar C]}) (maximal_exists_depth_of_evar_in_pattern (pcEvar C) (pcPattern C))), SVSubst := list_to_set (svar_fresh_seq (free_svars (pcPattern C) ∪ free_svars p ∪ free_svars q) (maximal_mu_depth_of_evar_in_pattern (pcEvar C) (pcPattern C))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern (pcEvar C) (pcPattern C)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' (free_evars (pcPattern C) ∪ free_evars p ∪ free_evars q ∪ {[ pcEvar C]}) (free_svars (pcPattern C) ∪ free_svars p ∪ free_svars q) (pcEvar C) (pcPattern C) p q wfC (extract_wfp Γ p q gpi Hpiffq) (extract_wfq Γ p q gpi Hpiffq))) gpi
wfcp: well_formed (C [p])
wfl: wf (patterns_of l)

wf (patterns_of l)
exact wfl.
Σ: Signature
Γ: Theory
p, q: Pattern
C: PatternCtx
l: hypotheses
gpi: ProofInfo
wfC: PC_wf C
Hpiffq: Γ ⊢i p <---> q using gpi
H: Γ ⊢i foldr patt_imp (C [q]) (patterns_of l) using gpi
pile: ProofInfoLe (ExGen := list_to_set (evar_fresh_seq (free_evars (pcPattern C) ∪ free_evars p ∪ free_evars q ∪ {[ pcEvar C]}) (maximal_exists_depth_of_evar_in_pattern (pcEvar C) (pcPattern C))), SVSubst := list_to_set (svar_fresh_seq (free_svars (pcPattern C) ∪ free_svars p ∪ free_svars q) (maximal_mu_depth_of_evar_in_pattern (pcEvar C) (pcPattern C))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern (pcEvar C) (pcPattern C)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' (free_evars (pcPattern C) ∪ free_evars p ∪ free_evars q ∪ {[ pcEvar C]}) (free_svars (pcPattern C) ∪ free_svars p ∪ free_svars q) (pcEvar C) (pcPattern C) p q wfC (extract_wfp Γ p q gpi Hpiffq) (extract_wfq Γ p q gpi Hpiffq))) gpi
wfcp: well_formed (C [p])
wfl: wf (patterns_of l)

Γ ⊢i foldr patt_imp (C [p]) (patterns_of l) using gpi
Σ: Signature
Γ: Theory
p, q: Pattern
C: PatternCtx
l: hypotheses
gpi: ProofInfo
wfC: PC_wf C
Hpiffq: Γ ⊢i p <---> q using gpi
H: Γ ⊢i foldr patt_imp (C [q]) (patterns_of l) using gpi
pile: ProofInfoLe (ExGen := list_to_set (evar_fresh_seq (free_evars (pcPattern C) ∪ free_evars p ∪ free_evars q ∪ {[ pcEvar C]}) (maximal_exists_depth_of_evar_in_pattern (pcEvar C) (pcPattern C))), SVSubst := list_to_set (svar_fresh_seq (free_svars (pcPattern C) ∪ free_svars p ∪ free_svars q) (maximal_mu_depth_of_evar_in_pattern (pcEvar C) (pcPattern C))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern (pcEvar C) (pcPattern C)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' (free_evars (pcPattern C) ∪ free_evars p ∪ free_evars q ∪ {[ pcEvar C]}) (free_svars (pcPattern C) ∪ free_svars p ∪ free_svars q) (pcEvar C) (pcPattern C) p q wfC (extract_wfp Γ p q gpi Hpiffq) (extract_wfq Γ p q gpi Hpiffq))) gpi
wfcp: well_formed (C [p])
wfl: wf (patterns_of l)

Γ ⊢i ?ϕ₁ using gpi
Σ: Signature
Γ: Theory
p, q: Pattern
C: PatternCtx
l: hypotheses
gpi: ProofInfo
wfC: PC_wf C
Hpiffq: Γ ⊢i p <---> q using gpi
H: Γ ⊢i foldr patt_imp (C [q]) (patterns_of l) using gpi
pile: ProofInfoLe (ExGen := list_to_set (evar_fresh_seq (free_evars (pcPattern C) ∪ free_evars p ∪ free_evars q ∪ {[ pcEvar C]}) (maximal_exists_depth_of_evar_in_pattern (pcEvar C) (pcPattern C))), SVSubst := list_to_set (svar_fresh_seq (free_svars (pcPattern C) ∪ free_svars p ∪ free_svars q) (maximal_mu_depth_of_evar_in_pattern (pcEvar C) (pcPattern C))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern (pcEvar C) (pcPattern C)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' (free_evars (pcPattern C) ∪ free_evars p ∪ free_evars q ∪ {[ pcEvar C]}) (free_svars (pcPattern C) ∪ free_svars p ∪ free_svars q) (pcEvar C) (pcPattern C) p q wfC (extract_wfp Γ p q gpi Hpiffq) (extract_wfq Γ p q gpi Hpiffq))) gpi
wfcp: well_formed (C [p])
wfl: wf (patterns_of l)
Γ ⊢i ?ϕ₁ ---> foldr patt_imp (C [p]) (patterns_of l) using gpi
Σ: Signature
Γ: Theory
p, q: Pattern
C: PatternCtx
l: hypotheses
gpi: ProofInfo
wfC: PC_wf C
Hpiffq: Γ ⊢i p <---> q using gpi
H: Γ ⊢i foldr patt_imp (C [q]) (patterns_of l) using gpi
pile: ProofInfoLe (ExGen := list_to_set (evar_fresh_seq (free_evars (pcPattern C) ∪ free_evars p ∪ free_evars q ∪ {[ pcEvar C]}) (maximal_exists_depth_of_evar_in_pattern (pcEvar C) (pcPattern C))), SVSubst := list_to_set (svar_fresh_seq (free_svars (pcPattern C) ∪ free_svars p ∪ free_svars q) (maximal_mu_depth_of_evar_in_pattern (pcEvar C) (pcPattern C))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern (pcEvar C) (pcPattern C)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' (free_evars (pcPattern C) ∪ free_evars p ∪ free_evars q ∪ {[ pcEvar C]}) (free_svars (pcPattern C) ∪ free_svars p ∪ free_svars q) (pcEvar C) (pcPattern C) p q wfC (extract_wfp Γ p q gpi Hpiffq) (extract_wfq Γ p q gpi Hpiffq))) gpi
wfcp: well_formed (C [p])
wfl: wf (patterns_of l)

Γ ⊢i ?ϕ₁ using gpi
Σ: Signature
Γ: Theory
p, q: Pattern
C: PatternCtx
l: hypotheses
gpi: ProofInfo
wfC: PC_wf C
Hpiffq: Γ ⊢i p <---> q using gpi
H: Γ ⊢i foldr patt_imp (C [q]) (patterns_of l) using gpi
pile: ProofInfoLe (ExGen := list_to_set (evar_fresh_seq (free_evars (pcPattern C) ∪ free_evars p ∪ free_evars q ∪ {[ pcEvar C]}) (maximal_exists_depth_of_evar_in_pattern (pcEvar C) (pcPattern C))), SVSubst := list_to_set (svar_fresh_seq (free_svars (pcPattern C) ∪ free_svars p ∪ free_svars q) (maximal_mu_depth_of_evar_in_pattern (pcEvar C) (pcPattern C))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern (pcEvar C) (pcPattern C)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' (free_evars (pcPattern C) ∪ free_evars p ∪ free_evars q ∪ {[ pcEvar C]}) (free_svars (pcPattern C) ∪ free_svars p ∪ free_svars q) (pcEvar C) (pcPattern C) p q wfC (extract_wfp Γ p q gpi Hpiffq) (extract_wfq Γ p q gpi Hpiffq))) gpi
wfcp: well_formed (C [p])
wfl: wf (patterns_of l)
well_formed (foldr patt_imp (C [p]) (patterns_of l))
Σ: Signature
Γ: Theory
p, q: Pattern
C: PatternCtx
l: hypotheses
gpi: ProofInfo
wfC: PC_wf C
Hpiffq: Γ ⊢i p <---> q using gpi
H: Γ ⊢i foldr patt_imp (C [q]) (patterns_of l) using gpi
pile: ProofInfoLe (ExGen := list_to_set (evar_fresh_seq (free_evars (pcPattern C) ∪ free_evars p ∪ free_evars q ∪ {[ pcEvar C]}) (maximal_exists_depth_of_evar_in_pattern (pcEvar C) (pcPattern C))), SVSubst := list_to_set (svar_fresh_seq (free_svars (pcPattern C) ∪ free_svars p ∪ free_svars q) (maximal_mu_depth_of_evar_in_pattern (pcEvar C) (pcPattern C))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern (pcEvar C) (pcPattern C)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' (free_evars (pcPattern C) ∪ free_evars p ∪ free_evars q ∪ {[ pcEvar C]}) (free_svars (pcPattern C) ∪ free_svars p ∪ free_svars q) (pcEvar C) (pcPattern C) p q wfC (extract_wfp Γ p q gpi Hpiffq) (extract_wfq Γ p q gpi Hpiffq))) gpi
wfcp: well_formed (C [p])
wfl: wf (patterns_of l)
well_formed ?ϕ₁
Σ: Signature
Γ: Theory
p, q: Pattern
C: PatternCtx
l: hypotheses
gpi: ProofInfo
wfC: PC_wf C
Hpiffq: Γ ⊢i p <---> q using gpi
H: Γ ⊢i foldr patt_imp (C [q]) (patterns_of l) using gpi
pile: ProofInfoLe (ExGen := list_to_set (evar_fresh_seq (free_evars (pcPattern C) ∪ free_evars p ∪ free_evars q ∪ {[ pcEvar C]}) (maximal_exists_depth_of_evar_in_pattern (pcEvar C) (pcPattern C))), SVSubst := list_to_set (svar_fresh_seq (free_svars (pcPattern C) ∪ free_svars p ∪ free_svars q) (maximal_mu_depth_of_evar_in_pattern (pcEvar C) (pcPattern C))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern (pcEvar C) (pcPattern C)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' (free_evars (pcPattern C) ∪ free_evars p ∪ free_evars q ∪ {[ pcEvar C]}) (free_svars (pcPattern C) ∪ free_svars p ∪ free_svars q) (pcEvar C) (pcPattern C) p q wfC (extract_wfp Γ p q gpi Hpiffq) (extract_wfq Γ p q gpi Hpiffq))) gpi
wfcp: well_formed (C [p])
wfl: wf (patterns_of l)
Γ ⊢i foldr patt_imp (C [p]) (patterns_of l) <---> ?ϕ₁ using gpi
Σ: Signature
Γ: Theory
p, q: Pattern
C: PatternCtx
l: hypotheses
gpi: ProofInfo
wfC: PC_wf C
Hpiffq: Γ ⊢i p <---> q using gpi
H: Γ ⊢i foldr patt_imp (C [q]) (patterns_of l) using gpi
pile: ProofInfoLe (ExGen := list_to_set (evar_fresh_seq (free_evars (pcPattern C) ∪ free_evars p ∪ free_evars q ∪ {[ pcEvar C]}) (maximal_exists_depth_of_evar_in_pattern (pcEvar C) (pcPattern C))), SVSubst := list_to_set (svar_fresh_seq (free_svars (pcPattern C) ∪ free_svars p ∪ free_svars q) (maximal_mu_depth_of_evar_in_pattern (pcEvar C) (pcPattern C))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern (pcEvar C) (pcPattern C)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' (free_evars (pcPattern C) ∪ free_evars p ∪ free_evars q ∪ {[ pcEvar C]}) (free_svars (pcPattern C) ∪ free_svars p ∪ free_svars q) (pcEvar C) (pcPattern C) p q wfC (extract_wfp Γ p q gpi Hpiffq) (extract_wfq Γ p q gpi Hpiffq))) gpi
wfcp: well_formed (C [p])
wfl: wf (patterns_of l)

Γ ⊢i ?ϕ₁ using gpi
Σ: Signature
Γ: Theory
p, q: Pattern
C: PatternCtx
l: hypotheses
gpi: ProofInfo
wfC: PC_wf C
Hpiffq: Γ ⊢i p <---> q using gpi
H: Γ ⊢i foldr patt_imp (C [q]) (patterns_of l) using gpi
pile: ProofInfoLe (ExGen := list_to_set (evar_fresh_seq (free_evars (pcPattern C) ∪ free_evars p ∪ free_evars q ∪ {[ pcEvar C]}) (maximal_exists_depth_of_evar_in_pattern (pcEvar C) (pcPattern C))), SVSubst := list_to_set (svar_fresh_seq (free_svars (pcPattern C) ∪ free_svars p ∪ free_svars q) (maximal_mu_depth_of_evar_in_pattern (pcEvar C) (pcPattern C))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern (pcEvar C) (pcPattern C)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' (free_evars (pcPattern C) ∪ free_evars p ∪ free_evars q ∪ {[ pcEvar C]}) (free_svars (pcPattern C) ∪ free_svars p ∪ free_svars q) (pcEvar C) (pcPattern C) p q wfC (extract_wfp Γ p q gpi Hpiffq) (extract_wfq Γ p q gpi Hpiffq))) gpi
wfcp: well_formed (C [p])
wfl: wf (patterns_of l)
well_formed ?ϕ₁
Σ: Signature
Γ: Theory
p, q: Pattern
C: PatternCtx
l: hypotheses
gpi: ProofInfo
wfC: PC_wf C
Hpiffq: Γ ⊢i p <---> q using gpi
H: Γ ⊢i foldr patt_imp (C [q]) (patterns_of l) using gpi
pile: ProofInfoLe (ExGen := list_to_set (evar_fresh_seq (free_evars (pcPattern C) ∪ free_evars p ∪ free_evars q ∪ {[ pcEvar C]}) (maximal_exists_depth_of_evar_in_pattern (pcEvar C) (pcPattern C))), SVSubst := list_to_set (svar_fresh_seq (free_svars (pcPattern C) ∪ free_svars p ∪ free_svars q) (maximal_mu_depth_of_evar_in_pattern (pcEvar C) (pcPattern C))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern (pcEvar C) (pcPattern C)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' (free_evars (pcPattern C) ∪ free_evars p ∪ free_evars q ∪ {[ pcEvar C]}) (free_svars (pcPattern C) ∪ free_svars p ∪ free_svars q) (pcEvar C) (pcPattern C) p q wfC (extract_wfp Γ p q gpi Hpiffq) (extract_wfq Γ p q gpi Hpiffq))) gpi
wfcp: well_formed (C [p])
wfl: wf (patterns_of l)
Γ ⊢i foldr patt_imp (C [p]) (patterns_of l) <---> ?ϕ₁ using gpi
Σ: Signature
Γ: Theory
p, q: Pattern
C: PatternCtx
l: hypotheses
gpi: ProofInfo
wfC: PC_wf C
Hpiffq: Γ ⊢i p <---> q using gpi
H: Γ ⊢i foldr patt_imp (C [q]) (patterns_of l) using gpi
pile: ProofInfoLe (ExGen := list_to_set (evar_fresh_seq (free_evars (pcPattern C) ∪ free_evars p ∪ free_evars q ∪ {[ pcEvar C]}) (maximal_exists_depth_of_evar_in_pattern (pcEvar C) (pcPattern C))), SVSubst := list_to_set (svar_fresh_seq (free_svars (pcPattern C) ∪ free_svars p ∪ free_svars q) (maximal_mu_depth_of_evar_in_pattern (pcEvar C) (pcPattern C))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern (pcEvar C) (pcPattern C)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' (free_evars (pcPattern C) ∪ free_evars p ∪ free_evars q ∪ {[ pcEvar C]}) (free_svars (pcPattern C) ∪ free_svars p ∪ free_svars q) (pcEvar C) (pcPattern C) p q wfC (extract_wfp Γ p q gpi Hpiffq) (extract_wfq Γ p q gpi Hpiffq))) gpi
wfcp: well_formed (C [p])
wfl: wf (patterns_of l)

Γ ⊢i foldr patt_imp (C [?q]) (patterns_of l) using gpi
Σ: Signature
Γ: Theory
p, q: Pattern
C: PatternCtx
l: hypotheses
gpi: ProofInfo
wfC: PC_wf C
Hpiffq: Γ ⊢i p <---> q using gpi
H: Γ ⊢i foldr patt_imp (C [q]) (patterns_of l) using gpi
pile: ProofInfoLe (ExGen := list_to_set (evar_fresh_seq (free_evars (pcPattern C) ∪ free_evars p ∪ free_evars q ∪ {[ pcEvar C]}) (maximal_exists_depth_of_evar_in_pattern (pcEvar C) (pcPattern C))), SVSubst := list_to_set (svar_fresh_seq (free_svars (pcPattern C) ∪ free_svars p ∪ free_svars q) (maximal_mu_depth_of_evar_in_pattern (pcEvar C) (pcPattern C))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern (pcEvar C) (pcPattern C)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' (free_evars (pcPattern C) ∪ free_evars p ∪ free_evars q ∪ {[ pcEvar C]}) (free_svars (pcPattern C) ∪ free_svars p ∪ free_svars q) (pcEvar C) (pcPattern C) p q wfC (extract_wfp Γ p q gpi Hpiffq) (extract_wfq Γ p q gpi Hpiffq))) gpi
wfcp: well_formed (C [p])
wfl: wf (patterns_of l)
well_formed (foldr patt_imp (C [?q]) (patterns_of l))
Σ: Signature
Γ: Theory
p, q: Pattern
C: PatternCtx
l: hypotheses
gpi: ProofInfo
wfC: PC_wf C
Hpiffq: Γ ⊢i p <---> q using gpi
H: Γ ⊢i foldr patt_imp (C [q]) (patterns_of l) using gpi
pile: ProofInfoLe (ExGen := list_to_set (evar_fresh_seq (free_evars (pcPattern C) ∪ free_evars p ∪ free_evars q ∪ {[ pcEvar C]}) (maximal_exists_depth_of_evar_in_pattern (pcEvar C) (pcPattern C))), SVSubst := list_to_set (svar_fresh_seq (free_svars (pcPattern C) ∪ free_svars p ∪ free_svars q) (maximal_mu_depth_of_evar_in_pattern (pcEvar C) (pcPattern C))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern (pcEvar C) (pcPattern C)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' (free_evars (pcPattern C) ∪ free_evars p ∪ free_evars q ∪ {[ pcEvar C]}) (free_svars (pcPattern C) ∪ free_svars p ∪ free_svars q) (pcEvar C) (pcPattern C) p q wfC (extract_wfp Γ p q gpi Hpiffq) (extract_wfq Γ p q gpi Hpiffq))) gpi
wfcp: well_formed (C [p])
wfl: wf (patterns_of l)
ProofInfoLe (ExGen := list_to_set (evar_fresh_seq (free_evars (pcPattern C) ∪ free_evars p ∪ free_evars ?q ∪ {[ pcEvar C]}) (maximal_exists_depth_of_evar_in_pattern (pcEvar C) (pcPattern C))), SVSubst := list_to_set (svar_fresh_seq (free_svars (pcPattern C) ∪ free_svars p ∪ free_svars ?q) (maximal_mu_depth_of_evar_in_pattern (pcEvar C) (pcPattern C))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern (pcEvar C) (pcPattern C)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' (free_evars (pcPattern C) ∪ free_evars p ∪ free_evars ?q ∪ {[ pcEvar C]}) (free_svars (pcPattern C) ∪ free_svars p ∪ free_svars ?q) (pcEvar C) (pcPattern C) p ?q ?wfC ?wfp ?wfq)) gpi
Σ: Signature
Γ: Theory
p, q: Pattern
C: PatternCtx
l: hypotheses
gpi: ProofInfo
wfC: PC_wf C
Hpiffq: Γ ⊢i p <---> q using gpi
H: Γ ⊢i foldr patt_imp (C [q]) (patterns_of l) using gpi
pile: ProofInfoLe (ExGen := list_to_set (evar_fresh_seq (free_evars (pcPattern C) ∪ free_evars p ∪ free_evars q ∪ {[ pcEvar C]}) (maximal_exists_depth_of_evar_in_pattern (pcEvar C) (pcPattern C))), SVSubst := list_to_set (svar_fresh_seq (free_svars (pcPattern C) ∪ free_svars p ∪ free_svars q) (maximal_mu_depth_of_evar_in_pattern (pcEvar C) (pcPattern C))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern (pcEvar C) (pcPattern C)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' (free_evars (pcPattern C) ∪ free_evars p ∪ free_evars q ∪ {[ pcEvar C]}) (free_svars (pcPattern C) ∪ free_svars p ∪ free_svars q) (pcEvar C) (pcPattern C) p q wfC (extract_wfp Γ p q gpi Hpiffq) (extract_wfq Γ p q gpi Hpiffq))) gpi
wfcp: well_formed (C [p])
wfl: wf (patterns_of l)
wf (patterns_of l)
Σ: Signature
Γ: Theory
p, q: Pattern
C: PatternCtx
l: hypotheses
gpi: ProofInfo
wfC: PC_wf C
Hpiffq: Γ ⊢i p <---> q using gpi
H: Γ ⊢i foldr patt_imp (C [q]) (patterns_of l) using gpi
pile: ProofInfoLe (ExGen := list_to_set (evar_fresh_seq (free_evars (pcPattern C) ∪ free_evars p ∪ free_evars q ∪ {[ pcEvar C]}) (maximal_exists_depth_of_evar_in_pattern (pcEvar C) (pcPattern C))), SVSubst := list_to_set (svar_fresh_seq (free_svars (pcPattern C) ∪ free_svars p ∪ free_svars q) (maximal_mu_depth_of_evar_in_pattern (pcEvar C) (pcPattern C))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern (pcEvar C) (pcPattern C)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' (free_evars (pcPattern C) ∪ free_evars p ∪ free_evars q ∪ {[ pcEvar C]}) (free_svars (pcPattern C) ∪ free_svars p ∪ free_svars q) (pcEvar C) (pcPattern C) p q wfC (extract_wfp Γ p q gpi Hpiffq) (extract_wfq Γ p q gpi Hpiffq))) gpi
wfcp: well_formed (C [p])
wfl: wf (patterns_of l)
Γ ⊢i p <---> ?q using gpi
Σ: Signature
Γ: Theory
p, q: Pattern
C: PatternCtx
l: hypotheses
gpi: ProofInfo
wfC: PC_wf C
Hpiffq: Γ ⊢i p <---> q using gpi
H: Γ ⊢i foldr patt_imp (C [q]) (patterns_of l) using gpi
pile: ProofInfoLe (ExGen := list_to_set (evar_fresh_seq (free_evars (pcPattern C) ∪ free_evars p ∪ free_evars q ∪ {[ pcEvar C]}) (maximal_exists_depth_of_evar_in_pattern (pcEvar C) (pcPattern C))), SVSubst := list_to_set (svar_fresh_seq (free_svars (pcPattern C) ∪ free_svars p ∪ free_svars q) (maximal_mu_depth_of_evar_in_pattern (pcEvar C) (pcPattern C))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern (pcEvar C) (pcPattern C)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' (free_evars (pcPattern C) ∪ free_evars p ∪ free_evars q ∪ {[ pcEvar C]}) (free_svars (pcPattern C) ∪ free_svars p ∪ free_svars q) (pcEvar C) (pcPattern C) p q wfC (extract_wfp Γ p q gpi Hpiffq) (extract_wfq Γ p q gpi Hpiffq))) gpi
wfcp: well_formed (C [p])
wfl: wf (patterns_of l)

Γ ⊢i foldr patt_imp (C [q]) (patterns_of l) using gpi
Σ: Signature
Γ: Theory
p, q: Pattern
C: PatternCtx
l: hypotheses
gpi: ProofInfo
wfC: PC_wf C
Hpiffq: Γ ⊢i p <---> q using gpi
H: Γ ⊢i foldr patt_imp (C [q]) (patterns_of l) using gpi
pile: ProofInfoLe (ExGen := list_to_set (evar_fresh_seq (free_evars (pcPattern C) ∪ free_evars p ∪ free_evars q ∪ {[ pcEvar C]}) (maximal_exists_depth_of_evar_in_pattern (pcEvar C) (pcPattern C))), SVSubst := list_to_set (svar_fresh_seq (free_svars (pcPattern C) ∪ free_svars p ∪ free_svars q) (maximal_mu_depth_of_evar_in_pattern (pcEvar C) (pcPattern C))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern (pcEvar C) (pcPattern C)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' (free_evars (pcPattern C) ∪ free_evars p ∪ free_evars q ∪ {[ pcEvar C]}) (free_svars (pcPattern C) ∪ free_svars p ∪ free_svars q) (pcEvar C) (pcPattern C) p q wfC (extract_wfp Γ p q gpi Hpiffq) (extract_wfq Γ p q gpi Hpiffq))) gpi
wfcp: well_formed (C [p])
wfl: wf (patterns_of l)
well_formed (foldr patt_imp (C [q]) (patterns_of l))
Σ: Signature
Γ: Theory
p, q: Pattern
C: PatternCtx
l: hypotheses
gpi: ProofInfo
wfC: PC_wf C
Hpiffq: Γ ⊢i p <---> q using gpi
H: Γ ⊢i foldr patt_imp (C [q]) (patterns_of l) using gpi
pile: ProofInfoLe (ExGen := list_to_set (evar_fresh_seq (free_evars (pcPattern C) ∪ free_evars p ∪ free_evars q ∪ {[ pcEvar C]}) (maximal_exists_depth_of_evar_in_pattern (pcEvar C) (pcPattern C))), SVSubst := list_to_set (svar_fresh_seq (free_svars (pcPattern C) ∪ free_svars p ∪ free_svars q) (maximal_mu_depth_of_evar_in_pattern (pcEvar C) (pcPattern C))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern (pcEvar C) (pcPattern C)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' (free_evars (pcPattern C) ∪ free_evars p ∪ free_evars q ∪ {[ pcEvar C]}) (free_svars (pcPattern C) ∪ free_svars p ∪ free_svars q) (pcEvar C) (pcPattern C) p q wfC (extract_wfp Γ p q gpi Hpiffq) (extract_wfq Γ p q gpi Hpiffq))) gpi
wfcp: well_formed (C [p])
wfl: wf (patterns_of l)
ProofInfoLe (ExGen := list_to_set (evar_fresh_seq (free_evars (pcPattern C) ∪ free_evars p ∪ free_evars q ∪ {[ pcEvar C]}) (maximal_exists_depth_of_evar_in_pattern (pcEvar C) (pcPattern C))), SVSubst := list_to_set (svar_fresh_seq (free_svars (pcPattern C) ∪ free_svars p ∪ free_svars q) (maximal_mu_depth_of_evar_in_pattern (pcEvar C) (pcPattern C))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern (pcEvar C) (pcPattern C)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' (free_evars (pcPattern C) ∪ free_evars p ∪ free_evars q ∪ {[ pcEvar C]}) (free_svars (pcPattern C) ∪ free_svars p ∪ free_svars q) (pcEvar C) (pcPattern C) p q ?wfC ?wfp ?wfq)) gpi
Σ: Signature
Γ: Theory
p, q: Pattern
C: PatternCtx
l: hypotheses
gpi: ProofInfo
wfC: PC_wf C
Hpiffq: Γ ⊢i p <---> q using gpi
H: Γ ⊢i foldr patt_imp (C [q]) (patterns_of l) using gpi
pile: ProofInfoLe (ExGen := list_to_set (evar_fresh_seq (free_evars (pcPattern C) ∪ free_evars p ∪ free_evars q ∪ {[ pcEvar C]}) (maximal_exists_depth_of_evar_in_pattern (pcEvar C) (pcPattern C))), SVSubst := list_to_set (svar_fresh_seq (free_svars (pcPattern C) ∪ free_svars p ∪ free_svars q) (maximal_mu_depth_of_evar_in_pattern (pcEvar C) (pcPattern C))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern (pcEvar C) (pcPattern C)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' (free_evars (pcPattern C) ∪ free_evars p ∪ free_evars q ∪ {[ pcEvar C]}) (free_svars (pcPattern C) ∪ free_svars p ∪ free_svars q) (pcEvar C) (pcPattern C) p q wfC (extract_wfp Γ p q gpi Hpiffq) (extract_wfq Γ p q gpi Hpiffq))) gpi
wfcp: well_formed (C [p])
wfl: wf (patterns_of l)
wf (patterns_of l)
Σ: Signature
Γ: Theory
p, q: Pattern
C: PatternCtx
l: hypotheses
gpi: ProofInfo
wfC: PC_wf C
Hpiffq: Γ ⊢i p <---> q using gpi
H: Γ ⊢i foldr patt_imp (C [q]) (patterns_of l) using gpi
pile: ProofInfoLe (ExGen := list_to_set (evar_fresh_seq (free_evars (pcPattern C) ∪ free_evars p ∪ free_evars q ∪ {[ pcEvar C]}) (maximal_exists_depth_of_evar_in_pattern (pcEvar C) (pcPattern C))), SVSubst := list_to_set (svar_fresh_seq (free_svars (pcPattern C) ∪ free_svars p ∪ free_svars q) (maximal_mu_depth_of_evar_in_pattern (pcEvar C) (pcPattern C))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern (pcEvar C) (pcPattern C)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' (free_evars (pcPattern C) ∪ free_evars p ∪ free_evars q ∪ {[ pcEvar C]}) (free_svars (pcPattern C) ∪ free_svars p ∪ free_svars q) (pcEvar C) (pcPattern C) p q wfC (extract_wfp Γ p q gpi Hpiffq) (extract_wfq Γ p q gpi Hpiffq))) gpi
wfcp: well_formed (C [p])
wfl: wf (patterns_of l)

Γ ⊢i foldr patt_imp (C [q]) (patterns_of l) using gpi
Σ: Signature
Γ: Theory
p, q: Pattern
C: PatternCtx
l: hypotheses
gpi: ProofInfo
wfC: PC_wf C
Hpiffq: Γ ⊢i p <---> q using gpi
H: Γ ⊢i foldr patt_imp (C [q]) (patterns_of l) using gpi
pile: ProofInfoLe (ExGen := list_to_set (evar_fresh_seq (free_evars (pcPattern C) ∪ free_evars p ∪ free_evars q ∪ {[ pcEvar C]}) (maximal_exists_depth_of_evar_in_pattern (pcEvar C) (pcPattern C))), SVSubst := list_to_set (svar_fresh_seq (free_svars (pcPattern C) ∪ free_svars p ∪ free_svars q) (maximal_mu_depth_of_evar_in_pattern (pcEvar C) (pcPattern C))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern (pcEvar C) (pcPattern C)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' (free_evars (pcPattern C) ∪ free_evars p ∪ free_evars q ∪ {[ pcEvar C]}) (free_svars (pcPattern C) ∪ free_svars p ∪ free_svars q) (pcEvar C) (pcPattern C) p q wfC (extract_wfp Γ p q gpi Hpiffq) (extract_wfq Γ p q gpi Hpiffq))) gpi
wfcp: well_formed (C [p])
wfl: wf (patterns_of l)
well_formed (foldr patt_imp (C [q]) (patterns_of l))
Σ: Signature
Γ: Theory
p, q: Pattern
C: PatternCtx
l: hypotheses
gpi: ProofInfo
wfC: PC_wf C
Hpiffq: Γ ⊢i p <---> q using gpi
H: Γ ⊢i foldr patt_imp (C [q]) (patterns_of l) using gpi
pile: ProofInfoLe (ExGen := list_to_set (evar_fresh_seq (free_evars (pcPattern C) ∪ free_evars p ∪ free_evars q ∪ {[ pcEvar C]}) (maximal_exists_depth_of_evar_in_pattern (pcEvar C) (pcPattern C))), SVSubst := list_to_set (svar_fresh_seq (free_svars (pcPattern C) ∪ free_svars p ∪ free_svars q) (maximal_mu_depth_of_evar_in_pattern (pcEvar C) (pcPattern C))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern (pcEvar C) (pcPattern C)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' (free_evars (pcPattern C) ∪ free_evars p ∪ free_evars q ∪ {[ pcEvar C]}) (free_svars (pcPattern C) ∪ free_svars p ∪ free_svars q) (pcEvar C) (pcPattern C) p q wfC (extract_wfp Γ p q gpi Hpiffq) (extract_wfq Γ p q gpi Hpiffq))) gpi
wfcp: well_formed (C [p])
wfl: wf (patterns_of l)
ProofInfoLe (ExGen := list_to_set (evar_fresh_seq (free_evars (pcPattern C) ∪ free_evars p ∪ free_evars q ∪ {[ pcEvar C]}) (maximal_exists_depth_of_evar_in_pattern (pcEvar C) (pcPattern C))), SVSubst := list_to_set (svar_fresh_seq (free_svars (pcPattern C) ∪ free_svars p ∪ free_svars q) (maximal_mu_depth_of_evar_in_pattern (pcEvar C) (pcPattern C))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern (pcEvar C) (pcPattern C)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' (free_evars (pcPattern C) ∪ free_evars p ∪ free_evars q ∪ {[ pcEvar C]}) (free_svars (pcPattern C) ∪ free_svars p ∪ free_svars q) (pcEvar C) (pcPattern C) p q ?wfC ?wfp ?wfq)) gpi
Σ: Signature
Γ: Theory
p, q: Pattern
C: PatternCtx
l: hypotheses
gpi: ProofInfo
wfC: PC_wf C
Hpiffq: Γ ⊢i p <---> q using gpi
H: Γ ⊢i foldr patt_imp (C [q]) (patterns_of l) using gpi
pile: ProofInfoLe (ExGen := list_to_set (evar_fresh_seq (free_evars (pcPattern C) ∪ free_evars p ∪ free_evars q ∪ {[ pcEvar C]}) (maximal_exists_depth_of_evar_in_pattern (pcEvar C) (pcPattern C))), SVSubst := list_to_set (svar_fresh_seq (free_svars (pcPattern C) ∪ free_svars p ∪ free_svars q) (maximal_mu_depth_of_evar_in_pattern (pcEvar C) (pcPattern C))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern (pcEvar C) (pcPattern C)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' (free_evars (pcPattern C) ∪ free_evars p ∪ free_evars q ∪ {[ pcEvar C]}) (free_svars (pcPattern C) ∪ free_svars p ∪ free_svars q) (pcEvar C) (pcPattern C) p q wfC (extract_wfp Γ p q gpi Hpiffq) (extract_wfq Γ p q gpi Hpiffq))) gpi
wfcp: well_formed (C [p])
wfl: wf (patterns_of l)

well_formed (foldr patt_imp (C [q]) (patterns_of l))
Σ: Signature
Γ: Theory
p, q: Pattern
C: PatternCtx
l: hypotheses
gpi: ProofInfo
wfC: PC_wf C
Hpiffq: Γ ⊢i p <---> q using gpi
H: Γ ⊢i foldr patt_imp (C [q]) (patterns_of l) using gpi
pile: ProofInfoLe (ExGen := list_to_set (evar_fresh_seq (free_evars (pcPattern C) ∪ free_evars p ∪ free_evars q ∪ {[ pcEvar C]}) (maximal_exists_depth_of_evar_in_pattern (pcEvar C) (pcPattern C))), SVSubst := list_to_set (svar_fresh_seq (free_svars (pcPattern C) ∪ free_svars p ∪ free_svars q) (maximal_mu_depth_of_evar_in_pattern (pcEvar C) (pcPattern C))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern (pcEvar C) (pcPattern C)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' (free_evars (pcPattern C) ∪ free_evars p ∪ free_evars q ∪ {[ pcEvar C]}) (free_svars (pcPattern C) ∪ free_svars p ∪ free_svars q) (pcEvar C) (pcPattern C) p q wfC (extract_wfp Γ p q gpi Hpiffq) (extract_wfq Γ p q gpi Hpiffq))) gpi
wfcp: well_formed (C [p])
wfl: wf (patterns_of l)
ProofInfoLe (ExGen := list_to_set (evar_fresh_seq (free_evars (pcPattern C) ∪ free_evars p ∪ free_evars q ∪ {[ pcEvar C]}) (maximal_exists_depth_of_evar_in_pattern (pcEvar C) (pcPattern C))), SVSubst := list_to_set (svar_fresh_seq (free_svars (pcPattern C) ∪ free_svars p ∪ free_svars q) (maximal_mu_depth_of_evar_in_pattern (pcEvar C) (pcPattern C))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern (pcEvar C) (pcPattern C)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' (free_evars (pcPattern C) ∪ free_evars p ∪ free_evars q ∪ {[ pcEvar C]}) (free_svars (pcPattern C) ∪ free_svars p ∪ free_svars q) (pcEvar C) (pcPattern C) p q ?wfC ?wfp ?wfq)) gpi
Σ: Signature
Γ: Theory
p, q: Pattern
C: PatternCtx
l: hypotheses
gpi: ProofInfo
wfC: PC_wf C
Hpiffq: Γ ⊢i p <---> q using gpi
H: Γ ⊢i foldr patt_imp (C [q]) (patterns_of l) using gpi
pile: ProofInfoLe (ExGen := list_to_set (evar_fresh_seq (free_evars (pcPattern C) ∪ free_evars p ∪ free_evars q ∪ {[ pcEvar C]}) (maximal_exists_depth_of_evar_in_pattern (pcEvar C) (pcPattern C))), SVSubst := list_to_set (svar_fresh_seq (free_svars (pcPattern C) ∪ free_svars p ∪ free_svars q) (maximal_mu_depth_of_evar_in_pattern (pcEvar C) (pcPattern C))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern (pcEvar C) (pcPattern C)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' (free_evars (pcPattern C) ∪ free_evars p ∪ free_evars q ∪ {[ pcEvar C]}) (free_svars (pcPattern C) ∪ free_svars p ∪ free_svars q) (pcEvar C) (pcPattern C) p q wfC (extract_wfp Γ p q gpi Hpiffq) (extract_wfq Γ p q gpi Hpiffq))) gpi
wfcp: well_formed (C [p])
wfl: wf (patterns_of l)

well_formed (foldr patt_imp (C [q]) (patterns_of l))
Σ: Signature
Γ: Theory
p, q: Pattern
C: PatternCtx
l: hypotheses
gpi: ProofInfo
wfC: PC_wf C
Hpiffq: Γ ⊢i p <---> q using gpi
H: Γ ⊢i foldr patt_imp (C [q]) (patterns_of l) using gpi
pile: ProofInfoLe (ExGen := list_to_set (evar_fresh_seq (free_evars (pcPattern C) ∪ free_evars p ∪ free_evars q ∪ {[ pcEvar C]}) (maximal_exists_depth_of_evar_in_pattern (pcEvar C) (pcPattern C))), SVSubst := list_to_set (svar_fresh_seq (free_svars (pcPattern C) ∪ free_svars p ∪ free_svars q) (maximal_mu_depth_of_evar_in_pattern (pcEvar C) (pcPattern C))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern (pcEvar C) (pcPattern C)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' (free_evars (pcPattern C) ∪ free_evars p ∪ free_evars q ∪ {[ pcEvar C]}) (free_svars (pcPattern C) ∪ free_svars p ∪ free_svars q) (pcEvar C) (pcPattern C) p q wfC (extract_wfp Γ p q gpi Hpiffq) (extract_wfq Γ p q gpi Hpiffq))) gpi
wfcp: well_formed (C [p])
wfl: wf (patterns_of l)
H0: well_formed (foldr patt_imp (C [q]) (patterns_of l))

well_formed (foldr patt_imp (C [q]) (patterns_of l))
wf_auto2.
Σ: Signature
Γ: Theory
p, q: Pattern
C: PatternCtx
l: hypotheses
gpi: ProofInfo
wfC: PC_wf C
Hpiffq: Γ ⊢i p <---> q using gpi
H: Γ ⊢i foldr patt_imp (C [q]) (patterns_of l) using gpi
pile: ProofInfoLe (ExGen := list_to_set (evar_fresh_seq (free_evars (pcPattern C) ∪ free_evars p ∪ free_evars q ∪ {[ pcEvar C]}) (maximal_exists_depth_of_evar_in_pattern (pcEvar C) (pcPattern C))), SVSubst := list_to_set (svar_fresh_seq (free_svars (pcPattern C) ∪ free_svars p ∪ free_svars q) (maximal_mu_depth_of_evar_in_pattern (pcEvar C) (pcPattern C))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern (pcEvar C) (pcPattern C)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' (free_evars (pcPattern C) ∪ free_evars p ∪ free_evars q ∪ {[ pcEvar C]}) (free_svars (pcPattern C) ∪ free_svars p ∪ free_svars q) (pcEvar C) (pcPattern C) p q wfC (extract_wfp Γ p q gpi Hpiffq) (extract_wfq Γ p q gpi Hpiffq))) gpi
wfcp: well_formed (C [p])
wfl: wf (patterns_of l)

ProofInfoLe (ExGen := list_to_set (evar_fresh_seq (free_evars (pcPattern C) ∪ free_evars p ∪ free_evars q ∪ {[pcEvar C]}) (maximal_exists_depth_of_evar_in_pattern (pcEvar C) (pcPattern C))), SVSubst := list_to_set (svar_fresh_seq (free_svars (pcPattern C) ∪ free_svars p ∪ free_svars q) (maximal_mu_depth_of_evar_in_pattern (pcEvar C) (pcPattern C))), KT := if decide (0 = maximal_mu_depth_of_evar_in_pattern (pcEvar C) (pcPattern C)) then false else true, FP := gset_to_coGset (frames_on_the_way_to_hole' (free_evars (pcPattern C) ∪ free_evars p ∪ free_evars q ∪ {[pcEvar C]}) (free_svars (pcPattern C) ∪ free_svars p ∪ free_svars q) (pcEvar C) (pcPattern C) p q ?wfC ?wfp ?wfq)) gpi
exact pile. Defined. Ltac2 mutable ml_debug_rewrite := false. (* Calls [cont] for every subpattern [a] of pattern [phi], giving the match context as an argument *) Ltac2 for_each_match := fun (a : constr) (phi : constr) (cont : Pattern.context -> unit) => try ( if ml_debug_rewrite then Message.print ( Message.concat (Message.of_string "Trying to match ") (Message.of_constr a) ) else (); match! phi with | context ctx [ ?x ] => if ml_debug_rewrite then Message.print ( Message.concat (Message.of_string " against ") (Message.of_constr x) ) else (); (if Constr.equal x a then if ml_debug_rewrite then Message.print (Message.of_string "Success.") else () ; cont ctx else ()); fail (* backtrack *) end ); (). (* Calls [cont] for [n]th subpatern [a] of pattern [phi]. *) Ltac2 for_nth_match := fun (n : int) (a : constr) (phi : constr) (cont : Pattern.context -> unit) => if ml_debug_rewrite then Message.print (Message.of_string "for_nth_match") else () ; let curr : int ref := {contents := 0} in let found : bool ref := {contents := false} in for_each_match a phi (fun ctx => if (found.(contents)) then () else curr.(contents) := Int.add 1 (curr.(contents)) ; if (Int.equal (curr.(contents)) n) then cont ctx else () ) . Local Ltac reduce_free_evar_subst_step_2 star := lazymatch goal with | [ |- context ctx [?p^[[evar: star ↦ ?q]] ] ] => progress rewrite -> (@free_evar_subst_no_occurrence _ star p q) by ( apply count_evar_occurrences_0; subst star; eapply evar_is_fresh_in_richer'; [|apply set_evar_fresh_is_fresh']; simpl; clear; set_solver ) end. Local Ltac reduce_free_evar_subst_2 star := (* unfold free_evar_subst; *) repeat (reduce_free_evar_subst_step_2 star). Local Tactic Notation "solve_fresh_contradictions_2'" constr(star) constr(x) constr(h) := let hcontra := fresh "Hcontra" in assert (hcontra: x <> star) by (subst star; unfold fresh_evar,evar_fresh_s; try clear h; simpl; solve_fresh_neq); rewrite -> h in hcontra; contradiction. Local Ltac solve_fresh_contradictions_2 star := unfold fresh_evar; simpl; match goal with | h: ?x = star |- _ => let hprime := fresh "hprime" in pose proof (hprime := eq_sym h); solve_fresh_contradictions_2' star x hprime | h: star = ?x |- _ => solve_fresh_contradictions_2' star x h end. Local Ltac clear_obvious_equalities_2 := repeat ( match goal with | [ h: ?x = ?x |- _ ] => clear h end ). Ltac simplify_emplace_2 star := unfold emplace; simpl; (* unfold free_evar_subst; *) simpl; repeat break_match_goal; clear_obvious_equalities_2; try contradiction; try (solve_fresh_contradictions_2 star); (* repeat (rewrite nest_ex_aux_0); *) reduce_free_evar_subst_2 star. (* Returns [n]th matching logic context [C] (of type [PatternCtx]) such that [emplace C a = phi]. *) Ltac simplify_pile_side_condition_helper star := subst star; unfold fresh_evar,evar_fresh_s; eapply evar_is_fresh_in_richer'; [|apply set_evar_fresh_is_fresh']; clear; simpl; set_solver. Ltac simplify_pile_side_condition star := try apply pile_any; cbn; simplify_emplace_2 star; repeat (rewrite (mmdoeip_notin, medoeip_notin); [(simplify_pile_side_condition_helper star)|]); simpl; repeat ( lazymatch goal with | [H: context [maximal_mu_depth_of_evar_in_pattern' _ _ _] |- _ ] => rewrite mmdoeip_notin in H; [(simplify_pile_side_condition_helper star)|] | [H: context [maximal_exists_depth_of_evar_in_pattern' _ _ _] |- _ ] => rewrite medoeip_notin in H; [(simplify_pile_side_condition_helper star)|] end ); simpl in *; try lia; try apply pile_any. Ltac2 Type HeatResult := { star_ident : ident ; star_eq : ident ; pc : constr ; ctx : Pattern.context ; ctx_pat : constr ; equality : ident ; }. Ltac2 heat := fun (n : int) (a : constr) (phi : constr) : HeatResult => let found : (Pattern.context option) ref := { contents := None } in for_nth_match n a phi (fun ctx => found.(contents) := Some ctx; () ); match found.(contents) with | None => Control.backtrack_tactic_failure "Cannot heat" | Some ctx => ( let fr := constr:(fresh_evar $phi) in let star_ident := Fresh.in_goal ident:(star) in let star_eq := Fresh.in_goal ident:(star_eq) in (*set ($star_ident := $fr);*) remember $fr as $star_ident eqn:star_eq; let star_hyp := Control.hyp star_ident in let ctxpat := Pattern.instantiate ctx constr:(patt_free_evar $star_hyp) in let pc := constr:((@Build_PatternCtx _ $star_hyp $ctxpat)) in let heq1 := Fresh.in_goal ident:(heq1) in assert(heq1 : ($phi = (@emplace _ $pc $a))) > [ abstract( (ltac1:(star |- simplify_emplace_2 star) (Ltac1.of_ident star_ident); reflexivity )) | () ]; { star_ident := star_ident; star_eq := star_eq; pc := pc; ctx := ctx; ctx_pat := ctxpat; equality := heq1 } ) end . Ltac2 mlRewrite (hiff : constr) (atn : int) := let thiff := Constr.type hiff in (* we have to unfold [derives] otherwise this might not match *) lazy_match! (eval unfold ProofSystem.derives in $thiff) with | _ ⊢i (?a <---> ?a') using _ => unfold AnyReasoning; lazy_match! goal with | [ |- of_MLGoal (@mkMLGoal ?sgm ?g ?l ?p ( ?gpi))] => let hr : HeatResult := heat atn a p in if ml_debug_rewrite then Message.print (Message.of_constr (hr.(ctx_pat))) else () ; let heq := Control.hyp (hr.(equality)) in let pc := (hr.(pc)) in eapply (@cast_proof_ml_goal _ $g) > [ rewrite $heq; reflexivity | ()]; Std.clear [hr.(equality)]; let wfC := Fresh.in_goal ident:(wfC) in assert (wfC : PC_wf $pc = true) > [ ltac1:(unfold PC_wf; simpl; wf_auto2); Control.shelve () | ()] ; let wfCpf := Control.hyp wfC in apply (@MLGoal_rewriteIff $sgm $g _ _ $pc $l $gpi $wfCpf $hiff) > [ (lazy_match! goal with | [ |- of_MLGoal (@mkMLGoal ?sgm ?g ?l ?p _)] => let heq2 := Fresh.in_goal ident:(heq2) in let plugged := Pattern.instantiate (hr.(ctx)) a' in assert(heq2: ($p = $plugged)) > [ abstract (ltac1:(star |- simplify_emplace_2 star) (Ltac1.of_ident (hr.(star_ident))); reflexivity ) | () ]; let heq2_pf := Control.hyp heq2 in eapply (@cast_proof_ml_goal _ $g) > [ rewrite $heq2_pf; reflexivity | ()]; Std.clear [wfC; heq2 ; (hr.(star_ident)); (hr.(star_eq))] end) | (ltac1:(star |- simplify_pile_side_condition star) (Ltac1.of_ident (hr.(star_ident)))) ] end end. Ltac2 rec constr_to_int (x : constr) : int := match! x with | 0 => 0 | (S ?x') => Int.add 1 (constr_to_int x') end. Tactic Notation "mlRewrite" constr(Hiff) "at" constr(atn) := (let ff := ltac2:(hiff atn |- mlRewrite (Option.get (Ltac1.to_constr(hiff))) (constr_to_int (Option.get (Ltac1.to_constr(atn)))) ) in ff Hiff atn).
Σ: Signature
Γ: Theory
A, B: Pattern
i: ProofInfo

Γ ⊢i A <---> B using i → Γ ⊢i B <---> A using i
Σ: Signature
Γ: Theory
A, B: Pattern
i: ProofInfo

Γ ⊢i A <---> B using i → Γ ⊢i B <---> A using i
Σ: Signature
Γ: Theory
A, B: Pattern
i: ProofInfo
H: Γ ⊢i A <---> B using i

Γ ⊢i B <---> A using i
Σ: Signature
Γ: Theory
A, B: Pattern
i: ProofInfo
H: Γ ⊢i A <---> B using i
wfp: well_formed (A <---> B)

Γ ⊢i B <---> A using i
Σ: Signature
Γ: Theory
A, B: Pattern
i: ProofInfo
H: Γ ⊢i A <---> B using i
wfp: well_formed (A <---> B)
H0: well_formed A

Γ ⊢i B <---> A using i
Σ: Signature
Γ: Theory
A, B: Pattern
i: ProofInfo
H: Γ ⊢i A <---> B using i
wfp: well_formed (A <---> B)
H0: well_formed A
H1: well_formed B

Γ ⊢i B <---> A using i
apply pf_iff_equiv_sym; assumption. Defined. Tactic Notation "mlRewrite" "->" constr(Hiff) "at" constr(atn) := mlRewrite Hiff at atn. Tactic Notation "mlRewrite" "<-" constr(Hiff) "at" constr(atn) := mlRewrite (@pf_iff_equiv_sym_nowf _ _ _ _ _ Hiff) at atn.
Σ: Signature
Γ: Theory
a, a', b: Pattern
x: evar

well_formed a → well_formed a' → well_formed b → Γ ⊢ a <---> a' → Γ ⊢i (a $ a $ b $ a ---> patt_free_evar x) <---> (a $ a' $ b $ a' ---> patt_free_evar x) using AnyReasoning
Σ: Signature
Γ: Theory
a, a', b: Pattern
x: evar

well_formed a → well_formed a' → well_formed b → Γ ⊢ a <---> a' → Γ ⊢i (a $ a $ b $ a ---> patt_free_evar x) <---> (a $ a' $ b $ a' ---> patt_free_evar x) using AnyReasoning
Σ: Signature
Γ: Theory
a, a', b: Pattern
x: evar
wfa: well_formed a
wfa': well_formed a'
wfb: well_formed b
Hiff: Γ ⊢ a <---> a'

Γ ⊢i (a $ a $ b $ a ---> patt_free_evar x) <---> (a $ a' $ b $ a' ---> patt_free_evar x) using AnyReasoning
Σ: Signature
Γ: Theory
a, a', b: Pattern
x: evar
wfa: well_formed a
wfa': well_formed a'
wfb: well_formed b
Hiff: Γ ⊢ a <---> a'

well_formed ((a $ a $ b $ a ---> patt_free_evar x) <---> (a $ a' $ b $ a' ---> patt_free_evar x))
Σ: Signature
Γ: Theory
a, a', b: Pattern
x: evar
wfa: well_formed a
wfa': well_formed a'
wfb: well_formed b
Hiff: Γ ⊢ a <---> a'
Γ Ⱶ (a $ a $ b $ a ---> patt_free_evar x) <---> (a $ a' $ b $ a' ---> patt_free_evar x)
Σ: Signature
Γ: Theory
a, a', b: Pattern
x: evar
wfa: well_formed a
wfa': well_formed a'
wfb: well_formed b
Hiff: Γ ⊢ a <---> a'

well_formed ((a $ a $ b $ a ---> patt_free_evar x) <---> (a $ a' $ b $ a' ---> patt_free_evar x))
abstract(wf_auto2).
Σ: Signature
Γ: Theory
a, a', b: Pattern
x: evar
wfa: well_formed a
wfa': well_formed a'
wfb: well_formed b
Hiff: Γ ⊢ a <---> a'

Γ Ⱶ (a $ a $ b $ a ---> patt_free_evar x) <---> (a $ a' $ b $ a' ---> patt_free_evar x)
Σ: Signature
Γ: Theory
a, a', b: Pattern
x: evar
wfa: well_formed a
wfa': well_formed a'
wfb: well_formed b
Hiff: Γ ⊢ a <---> a'

Γ Ⱶ (a $ a' $ b $ a ---> patt_free_evar x) <---> (a $ a' $ b $ a' ---> patt_free_evar x) using (ExGen := ⊤, SVSubst := ⊤, KT := true, FP := ⊤)
Σ: Signature
Γ: Theory
a, a', b: Pattern
x: evar
wfa: well_formed a
wfa': well_formed a'
wfb: well_formed b
Hiff: Γ ⊢ a <---> a'

Γ Ⱶ (a $ a' $ b $ a ---> patt_free_evar x) <---> (a $ a' $ b $ a ---> patt_free_evar x) using (ExGen := ⊤, SVSubst := ⊤, KT := true, FP := ⊤)
Σ: Signature
Γ: Theory
a, a', b: Pattern
x: evar
wfa: well_formed a
wfa': well_formed a'
wfb: well_formed b
Hiff: Γ ⊢ a <---> a'

Γ ⊢i (a $ a' $ b $ a ---> patt_free_evar x) <---> (a $ a' $ b $ a ---> patt_free_evar x) using (ExGen := ⊤, SVSubst := ⊤, KT := true, FP := ⊤)
Σ: Signature
Γ: Theory
a, a', b: Pattern
x: evar
wfa: well_formed a
wfa': well_formed a'
wfb: well_formed b
Hiff: Γ ⊢ a <---> a'

Γ ⊢i (a $ a' $ b $ a ---> patt_free_evar x) <---> (a $ a' $ b $ a ---> patt_free_evar x) using BasicReasoning
Σ: Signature
Γ: Theory
a, a', b: Pattern
x: evar
wfa: well_formed a
wfa': well_formed a'
wfb: well_formed b
Hiff: Γ ⊢ a <---> a'

well_formed (a $ a' $ b $ a ---> patt_free_evar x)
abstract(wf_auto2). Defined. (* TODO: de-duplicate the code *) #[local] Ltac convertToNNF_rewrite_pat Ctx p i := lazymatch p with | (! ! ?x) => let H' := fresh "H" in pose proof (@not_not_eq _ Ctx x ltac:(wf_auto2)) as H'; apply (@useBasicReasoning _ _ _ i) in H'; repeat (mlRewrite H' at 1); try clear H'; convertToNNF_rewrite_pat Ctx x i | patt_not (patt_and ?x ?y) => let H' := fresh "H" in pose proof (@deMorgan_nand _ Ctx x y ltac:(wf_auto2) ltac:(wf_auto2)) as H'; apply (@useBasicReasoning _ _ _ i) in H'; repeat (mlRewrite H' at 1); try clear H'; convertToNNF_rewrite_pat Ctx (!x or !y) i | patt_not (patt_or ?x ?y) => let H' := fresh "H" in pose proof (@deMorgan_nor _ Ctx x y ltac:(wf_auto2) ltac:(wf_auto2)) as H'; apply (@useBasicReasoning _ _ _ i) in H'; repeat (mlRewrite H' at 1); try clear H'; convertToNNF_rewrite_pat Ctx (!x and !y) i | patt_not (?x ---> ?y) => let H' := fresh "H" in pose proof (@nimpl_eq_and _ Ctx x y ltac:(wf_auto2) ltac:(wf_auto2)) as H'; apply (@useBasicReasoning _ _ _ i) in H'; repeat (mlRewrite H' at 1); try clear H'; convertToNNF_rewrite_pat Ctx (x and !y) i | (?x ---> ?y) => let H' := fresh "H" in pose proof (@impl_eq_or _ Ctx x y ltac:(wf_auto2) ltac:(wf_auto2)) as H'; apply (@useBasicReasoning _ _ _ i) in H'; repeat (mlRewrite H' at 1); try clear H'; convertToNNF_rewrite_pat Ctx (!x or y) i | patt_and ?x ?y => convertToNNF_rewrite_pat Ctx x i; convertToNNF_rewrite_pat Ctx y i | patt_or ?x ?y => convertToNNF_rewrite_pat Ctx x i; convertToNNF_rewrite_pat Ctx y i | _ => idtac end. #[local] Ltac toNNF := repeat mlRevertLast; match goal with | [ |- @of_MLGoal ?Sgm (@mkMLGoal ?Sgm ?Ctx ?ll ?g ?i) ] => mlApplyMetaRaw (@useBasicReasoning _ _ _ i (@not_not_elim Sgm Ctx g ltac:(wf_auto2))); convertToNNF_rewrite_pat Ctx (!g) i end.
Σ: Signature
Γ: Theory
a, b: Pattern

well_formed a → well_formed b → Γ ⊢i b and (a or b) and ! b and (a or a) and a ---> ⊥ using BasicReasoning
Σ: Signature
Γ: Theory
a, b: Pattern

well_formed a → well_formed b → Γ ⊢i b and (a or b) and ! b and (a or a) and a ---> ⊥ using BasicReasoning
Σ: Signature
Γ: Theory
a, b: Pattern
wfa: well_formed a
wfb: well_formed b

Γ ⊢i b and (a or b) and ! b and (a or a) and a ---> ⊥ using BasicReasoning
Σ: Signature
Γ: Theory
a, b: Pattern
wfa: well_formed a
wfb: well_formed b

well_formed (b and (a or b) and ! b and (a or a) and a ---> ⊥)
Σ: Signature
Γ: Theory
a, b: Pattern
wfa: well_formed a
wfb: well_formed b
Γ Ⱶ b and (a or b) and ! b and (a or a) and a ---> ⊥ using BasicReasoning
Σ: Signature
Γ: Theory
a, b: Pattern
wfa: well_formed a
wfb: well_formed b

well_formed (b and (a or b) and ! b and (a or a) and a ---> ⊥)
wf_auto2.
Σ: Signature
Γ: Theory
a, b: Pattern
wfa: well_formed a
wfb: well_formed b

Γ Ⱶ b and (a or b) and ! b and (a or a) and a ---> ⊥ using BasicReasoning
Σ: Signature
Γ: Theory
a, b: Pattern
wfa: well_formed a
wfb: well_formed b

Γ Ⱶ ! ((b and (a or b) and ! b and (a or a) and a) and ! ⊥) using BasicReasoning
Σ: Signature
Γ: Theory
a, b: Pattern
wfa: well_formed a
wfb: well_formed b
H: Γ ⊢i ! (b and (a or b) and ! b and (a or a) and a ---> ⊥) <---> (b and (a or b) and ! b and (a or a) and a) and ! ⊥ using BasicReasoning
star: evar
star_eq: star = fresh_evar (! ! (b and (a or b) and ! b and (a or a) and a ---> ⊥))
wfC: PC_wf {| pcEvar := star; pcPattern := ! patt_free_evar star |} = true
e0: 0 = 0
ProofInfoLe (ExGen := ∅, SVSubst := ∅, KT := false, FP := gset_to_coGset (frames_on_the_way_to_hole' ({[star]} ∪ ∅ ∪ (free_evars b ∪ ∅ ∪ ∅ ∪ (free_evars a ∪ ∅ ∪ free_evars b ∪ ∅ ∪ ∅ ∪ (free_evars b ∪ ∅ ∪ ∅ ∪ ∅ ∪ (... ∪ ... ∪ ∅ ∪ ∅) ∪ ∅ ∪ ∅) ∪ ∅ ∪ ∅) ∪ ∅ ∪ ∅ ∪ ∅) ∪ (free_evars b ∪ ∅ ∪ ∅ ∪ (free_evars a ∪ ∅ ∪ free_evars b ∪ ∅ ∪ ∅ ∪ (... ∪ ∅ ∪ ∅ ∪ ∅ ∪ (... ∪ ∅ ∪ ∅) ∪ ∅ ∪ ∅) ∪ ∅ ∪ ∅) ∪ ∅ ∪ ∅ ∪ ∅ ∪ (∅ ∪ ∅ ∪ ∅) ∪ ∅) ∪ {[star]}) (∅ ∪ ∅ ∪ (free_svars b ∪ ∅ ∪ ∅ ∪ (free_svars a ∪ ∅ ∪ free_svars b ∪ ∅ ∪ ∅ ∪ (free_svars b ∪ ∅ ∪ ∅ ∪ ∅ ∪ (... ∪ ∅ ∪ (...) ∪ ∅ ∪ ∅) ∪ ∅ ∪ ∅) ∪ ∅ ∪ ∅) ∪ ∅ ∪ ∅ ∪ ∅) ∪ (free_svars b ∪ ∅ ∪ ∅ ∪ (free_svars a ∪ ∅ ∪ free_svars b ∪ ∅ ∪ ∅ ∪ (free_svars b ∪ ∅ ∪ ∅ ∪ ∅ ∪ (... ∪ ... ∪ ∅ ∪ ∅) ∪ ∅ ∪ ∅) ∪ ∅ ∪ ∅) ∪ ∅ ∪ ∅ ∪ ∅ ∪ (∅ ∪ ∅ ∪ ∅) ∪ ∅)) star (! patt_free_evar star) (! (b and (a or b) and ! b and (a or a) and a ---> ⊥)) ((b and (a or b) and ! b and (a or a) and a) and ! ⊥) wfC (extract_wfp Γ (! (b and (a or b) and ! b and (a or a) and a ---> ⊥)) ((b and (a or b) and ! b and (a or a) and a) and ! ⊥) BasicReasoning H) (extract_wfq Γ (! (b and (a or b) and ! b and (a or a) and a ---> ⊥)) ((b and (a or b) and ! b and (a or a) and a) and ! ⊥) BasicReasoning H))) BasicReasoning
Abort. #[local] Ltac rfindContradictionTo a ll k := match ll with | ((mkNH _ ?name (! a)) :: ?m) => mlApply name; mlExactn k | ((mkNH _ _ _) :: ?m) => rfindContradictionTo a m k | _ => fail end. #[local] Ltac findContradiction l k:= match l with | ((mkNH _ _ ?a) :: ?m) => match goal with | [ |- @of_MLGoal ?Sgm (@mkMLGoal ?Sgm ?Ctx ?ll ?g ?i) ] => try rfindContradictionTo a ll k; let kk := eval compute in ( k + 1 ) in (findContradiction m kk) end | _ => fail end. #[local] Ltac findContradiction_start := match goal with | [ |- @of_MLGoal ?Sgm (@mkMLGoal ?Sgm ?Ctx ?l ?g ?i) ] => match goal with | [ |- @of_MLGoal ?Sgm (@mkMLGoal ?Sgm ?Ctx ?l ?g ?i) ] => findContradiction l 0 end end. #[local] Ltac breakHyps l := match l with | ((mkNH _ ?name (?x and ?y)) :: ?m) => mlDestructAnd name | ((mkNH _ ?name (?x or ?y)) :: ?m) => mlDestructOr name | ((mkNH _ ?name ?x) :: ?m) => breakHyps m end. #[local] Ltac mlTautoBreak := repeat match goal with | [ |- @of_MLGoal ?Sgm (@mkMLGoal ?Sgm ?Ctx ?l ?g ?i) ] => lazymatch g with | (⊥) => breakHyps l | _ => mlApplyMetaRaw (@useBasicReasoning _ _ _ i (@bot_elim _ _ g _)) end end. Ltac try_solve_pile2 fallthrough := lazymatch goal with | [ |- ProofInfoLe _ _] => try apply pile_refl; try_solve_pile; fallthrough | _ => idtac end. #[global] Ltac mlTauto := _ensureProofMode; unshelve( try ( toNNF; (try_solve_pile2 shelve); repeat mlIntro; mlTautoBreak; findContradiction_start ) ) .
Σ: Signature
Γ: Theory
a, b: Pattern

well_formed a → well_formed b → Γ ⊢i b and (a or b) and ! b and (a or a) and a ---> ⊥ using AnyReasoning
Σ: Signature
Γ: Theory
a, b: Pattern

well_formed a → well_formed b → Γ ⊢i b and (a or b) and ! b and (a or a) and a ---> ⊥ using AnyReasoning
Σ: Signature
Γ: Theory
a, b: Pattern
wfa: well_formed a
wfb: well_formed b

Γ ⊢i b and (a or b) and ! b and (a or a) and a ---> ⊥ using AnyReasoning
Σ: Signature
Γ: Theory
a, b: Pattern
wfa: well_formed a
wfb: well_formed b

well_formed (b and (a or b) and ! b and (a or a) and a ---> ⊥)
Σ: Signature
Γ: Theory
a, b: Pattern
wfa: well_formed a
wfb: well_formed b
Γ Ⱶ b and (a or b) and ! b and (a or a) and a ---> ⊥
Σ: Signature
Γ: Theory
a, b: Pattern
wfa: well_formed a
wfb: well_formed b

well_formed (b and (a or b) and ! b and (a or a) and a ---> ⊥)
wf_auto2.
Σ: Signature
Γ: Theory
a, b: Pattern
wfa: well_formed a
wfb: well_formed b

Γ Ⱶ b and (a or b) and ! b and (a or a) and a ---> ⊥
(* TODO: fail loudly if there is something else than AnyReasoning *) mlTauto. Defined.
Σ: Signature
Γ: Theory
a, b: Pattern

well_formed a → well_formed b → Γ ⊢i a ---> ! a ---> b using AnyReasoning
Σ: Signature
Γ: Theory
a, b: Pattern

well_formed a → well_formed b → Γ ⊢i a ---> ! a ---> b using AnyReasoning
Σ: Signature
Γ: Theory
a, b: Pattern
wfa: well_formed a
wfb: well_formed b

Γ ⊢i a ---> ! a ---> b using AnyReasoning
Σ: Signature
Γ: Theory
a, b: Pattern
wfa: well_formed a
wfb: well_formed b

well_formed (a ---> ! a ---> b)
Σ: Signature
Γ: Theory
a, b: Pattern
wfa: well_formed a
wfb: well_formed b
Γ Ⱶ a ---> ! a ---> b
Σ: Signature
Γ: Theory
a, b: Pattern
wfa: well_formed a
wfb: well_formed b

well_formed (a ---> ! a ---> b)
wf_auto2.
Σ: Signature
Γ: Theory
a, b: Pattern
wfa: well_formed a
wfb: well_formed b

Γ Ⱶ a ---> ! a ---> b
mlTauto. Defined.
Σ: Signature
Γ: Theory
a, b, c: Pattern

well_formed a → well_formed b → well_formed c → Γ ⊢i (a ---> b) ---> (b ---> c) ---> a or b ---> c using AnyReasoning
Σ: Signature
Γ: Theory
a, b, c: Pattern

well_formed a → well_formed b → well_formed c → Γ ⊢i (a ---> b) ---> (b ---> c) ---> a or b ---> c using AnyReasoning
Σ: Signature
Γ: Theory
a, b, c: Pattern
wfa: well_formed a
wfb: well_formed b
wfc: well_formed c

Γ ⊢i (a ---> b) ---> (b ---> c) ---> a or b ---> c using AnyReasoning
Σ: Signature
Γ: Theory
a, b, c: Pattern
wfa: well_formed a
wfb: well_formed b
wfc: well_formed c

well_formed ((a ---> b) ---> (b ---> c) ---> a or b ---> c)
Σ: Signature
Γ: Theory
a, b, c: Pattern
wfa: well_formed a
wfb: well_formed b
wfc: well_formed c
Γ Ⱶ (a ---> b) ---> (b ---> c) ---> a or b ---> c
Σ: Signature
Γ: Theory
a, b, c: Pattern
wfa: well_formed a
wfb: well_formed b
wfc: well_formed c

well_formed ((a ---> b) ---> (b ---> c) ---> a or b ---> c)
wf_auto2.
Σ: Signature
Γ: Theory
a, b, c: Pattern
wfa: well_formed a
wfb: well_formed b
wfc: well_formed c

Γ Ⱶ (a ---> b) ---> (b ---> c) ---> a or b ---> c
mlTauto. (* Slow *) Defined.
Σ: Signature
Γ: Theory
a: Pattern

well_formed a → Γ ⊢i ! (a and ! a) using AnyReasoning
Σ: Signature
Γ: Theory
a: Pattern

well_formed a → Γ ⊢i ! (a and ! a) using AnyReasoning
Σ: Signature
Γ: Theory
a: Pattern
wfa: well_formed a

Γ ⊢i ! (a and ! a) using AnyReasoning
Σ: Signature
Γ: Theory
a: Pattern
wfa: well_formed a

well_formed (! (a and ! a))
Σ: Signature
Γ: Theory
a: Pattern
wfa: well_formed a
Γ Ⱶ ! (a and ! a)
Σ: Signature
Γ: Theory
a: Pattern
wfa: well_formed a

well_formed (! (a and ! a))
wf_auto2.
Σ: Signature
Γ: Theory
a: Pattern
wfa: well_formed a

Γ Ⱶ ! (a and ! a)
mlTauto. Defined.
Σ: Signature
Γ: Theory
a: Pattern

well_formed a → Γ ⊢i ! ! a ---> a using AnyReasoning
Σ: Signature
Γ: Theory
a: Pattern

well_formed a → Γ ⊢i ! ! a ---> a using AnyReasoning
Σ: Signature
Γ: Theory
a: Pattern
wfa: well_formed a

Γ ⊢i ! ! a ---> a using AnyReasoning
Σ: Signature
Γ: Theory
a: Pattern
wfa: well_formed a

well_formed (! ! a ---> a)
Σ: Signature
Γ: Theory
a: Pattern
wfa: well_formed a
Γ Ⱶ ! ! a ---> a
Σ: Signature
Γ: Theory
a: Pattern
wfa: well_formed a

well_formed (! ! a ---> a)
wf_auto2.
Σ: Signature
Γ: Theory
a: Pattern
wfa: well_formed a

Γ Ⱶ ! ! a ---> a
mlTauto. Defined.
Σ: Signature
Γ: Theory
a, b: Pattern

well_formed a → well_formed b → Γ ⊢i ((a ---> b) ---> a) ---> a using AnyReasoning
Σ: Signature
Γ: Theory
a, b: Pattern

well_formed a → well_formed b → Γ ⊢i ((a ---> b) ---> a) ---> a using AnyReasoning
Σ: Signature
Γ: Theory
a, b: Pattern
wfa: well_formed a
wfb: well_formed b

Γ ⊢i ((a ---> b) ---> a) ---> a using AnyReasoning
Σ: Signature
Γ: Theory
a, b: Pattern
wfa: well_formed a
wfb: well_formed b

well_formed (((a ---> b) ---> a) ---> a)
Σ: Signature
Γ: Theory
a, b: Pattern
wfa: well_formed a
wfb: well_formed b
Γ Ⱶ ((a ---> b) ---> a) ---> a
Σ: Signature
Γ: Theory
a, b: Pattern
wfa: well_formed a
wfb: well_formed b

well_formed (((a ---> b) ---> a) ---> a)
wf_auto2.
Σ: Signature
Γ: Theory
a, b: Pattern
wfa: well_formed a
wfb: well_formed b

Γ Ⱶ ((a ---> b) ---> a) ---> a
mlTauto. Defined. Close Scope ml_scope. Close Scope list_scope. Close Scope string_scope.